MongoDB分片群集主要有如下三个组件:

Shard:

分片服务器,用于存储实际的数据块,实际生产环境中一个shard server 角色可以由几台服务器组成一个Peplica Set 承担,防止主机单点故障。

Config Server:

配置服务器,存储了整个分片群集的配置信息,其中包括chunk信息。

Routers:

  1. 前端路由,客户端由此接入,且让整个群集看上去像单一[数据库](https://cloud.tencent.com/solution/database?from=10680),前端应用可以透明使用。 <br />![3re941wrsa.png](https://cdn.nlark.com/yuque/0/2021/png/8393655/1637155787752-dda61de9-33b5-4577-98c4-7c535382bf0e.png#clientId=u76523043-41d4-4&from=paste&height=222&id=u667f1fe5&margin=%5Bobject%20Object%5D&name=3re941wrsa.png&originHeight=443&originWidth=650&originalType=binary&ratio=1&size=39758&status=done&style=none&taskId=ufecf49fe-2171-4d7e-a302-a59a63bb8c7&width=325)<br />![950y007s7g.png](https://cdn.nlark.com/yuque/0/2021/png/8393655/1637155811447-4866af81-20d1-4c29-bfbc-eaa515a465ff.png#clientId=u76523043-41d4-4&from=paste&height=252&id=uc16634e5&margin=%5Bobject%20Object%5D&name=950y007s7g.png&originHeight=504&originWidth=1231&originalType=binary&ratio=1&size=53310&status=done&style=none&taskId=u123beb50-6301-438c-a28b-c748b0af19d&width=615.5)

系统环境

Centos7.5、MongoDB4.0.2、关闭防火墙。

IP 路由服务端口 配置服务端口 分片1端口 分片2端口 分片3端口
192.168.137.238 27017 27018 27001 27002 27003
192.168.137.239 27017 27018 27001 27002 27003
192.168.137.240 27017 27018 27001 27002 27003

image.png
三台机器的配置服务(27018)形成复制集,分片1、2、3也在各机器都部署一个实例,它们之间形成复制集,客户端直接连接3个路由服务与之交互,配置服务和分片服务对客户端是透明的。

服务器的安装及配置(3台服务器执行相同操作)

1、下载解压MongoDB
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.6.tgz
tar -zxvf mongodb-linux-x86_64-4.0.6.tgz
解压到/opt/mongodb,设置环境变量:
echo ‘export PATH=$PATH:/opt/mongodb/mongodb-linux-x86_64-4.0.6/bin’ >> /etc/profile
保存后执行:
source /etc/profile

2、创建路由、配置、分片等的相关目录与文件
#启动配置文件存放的文件夹:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf
#配置服务数据存放目录:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/config
#分片1服务数据存放目录:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/data/shard1
#分片2服务数据存放目录:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/data/shard2
#分片3服务数据存放目录:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/data/shard3
#日志存放目录:
mkdir -p /opt/mongodb/mongodb-linux-x86_64-4.0.6/log
# 配置服务日志存放文件:
touch /opt/mongodb/mongodb-linux-x86_64-4.0.6/log/config.log
#路由服务日志存放文件:
touch /opt/mongodb/mongodb-linux-x86_64-4.0.6/log/mongos.log
#分片1服务日志存放文件:
touch /opt/mongodb/mongodb-linux-x86_64-4.0.6/log/shard1.log
#分片2服务日志存放文件:
touch /opt/mongodb/mongodb-linux-x86_64-4.0.6/log/shard2.log
#分片3服务日志存放文件:
touch /opt/mongodb/mongodb-linux-x86_64-4.0.6/log/shard3.log

配置服务器部署(3台服务器执行相同操作)

1、在/opt/mongodb/mongodb-linux-x86_64-4.0.6/conf目录创建config.conf:

cd /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf
touch config.conf
vim /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf/config.conf

dbpath=/opt/mongodb/mongodb-linux-x86_64-4.0.6/data/config
logpath=/opt/mongodb/mongodb-linux-x86_64-4.0.6/log/config.log
port=27018
logappend=true
fork=true
maxConns=5000
#复制集名称
replSet=configs
#置参数为true
configsvr=true
#允许任意机器连接
bind_ip=0.0.0.0

2、配置复制集
分别启动三台服务器的配置服务:
mongod -f /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf/config.conf
3:连接mongo,只需在任意一台机器执行即可:
mongo —host 192.168.137.238 —port 27018
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:”configs”,members:[{_id:0,host:”192.168.137.238:27018”},{_id:1,host:”192.168.137.239:27018”}, {_id:2,host:”192.168.137.240:27018”}]})
其中_id:”configs”的configs是上面config.conf配置文件里的复制集名称,把三台服务器的配置服务组成复制集。
查看状态:
rs.status()
等几十秒左右,执行上面的命令查看状态,三台机器的配置服务就已形成复制集,其中1台为PRIMARY,其他2台为SECONDARY。

分片服务部署(3台服务器执行相同操作)

1、在/opt/mongodb/mongodb-linux-x86_64-4.0.6/conf目录创建shard1.conf、shard2.conf、shard3.conf,内容如下:
cd /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf
touch shard1.conf
vim shard1.conf
dbpath=/opt/mongodb/mongodb-linux-x86_64-4.0.6/data/shard1
#其他2个分片对应修改为shard2、shard3文件夹
logpath=/opt/mongodb/mongodb-linux-x86_64-4.0.6/log/shard1.log
#其他2个分片对应修改为shard2.log、shard3.log
port=27001
#其他2个分片对应修改为27002、27003
logappend=true
fork=true
maxConns=5000
storageEngine=mmapv1
shardsvr=true
replSet=shard1
#其他2个分片对应修改为shard2、shard3
bind_ip=0.0.0.0
端口分别是27001、27002、27003,分别对应shard1.conf、shard2.conf、shard3.conf。
还有数据存放目录、日志文件这几个地方都需要对应修改。
在3台机器的相同端口形成一个分片的复制集,由于3台机器都需要这3个文件,所以根据这9个配置文件分别启动分片服务:
mongod -f /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf/shard{1/2/3}.conf
2、将分片配置为复制集
连接mongo,只需在任意一台机器执行即可:
mongo —host 192.168.137.238 —port 27001 //这里以shard1为例,其他两个分片则再需对应连接到27002、27003的端口进行操作即可
切换数据库:
use admin
初始化复制集:
rs.initiate({_id:”shard1”,members:[{_id:0,host:”192.168.137.238:27001”},{_id:1,host:”192.168.137.239:27001”},{_id:2,host:”192.168.137.240:27001”}]})
以上是基于分片1来操作,同理,其他2个分片也要连到各自的端口来执行一遍上述的操作,让3个分片各自形成1主2从的复制集,注意端口及仲裁节点的问题即可,操作完成后3个分片都启动完成,并完成复制集模式。

路由服务部署(3台服务器执行相同操作)

1、在/opt/mongodb/mongodb-linux-x86_64-4.0.6/conf目录创建mongos.conf,

内容如下:
logpath=/opt/mongodb/mongodb-linux-x86_64-4.0.6/log/mongos.log
logappend = true
port = 27017
fork = true
configdb = configs/192.168.137.238:27018,192.168.137.239:27018,192.168.137.240:27018
maxConns=20000
bind_ip=0.0.0.0
2、启动mongos
分别在三台服务器启动:
mongos -f /opt/mongodb/mongodb-linux-x86_64-4.0.6/conf/mongos.conf
3、启动分片功能
连接mongo:
mongo —host 192.168.137.238 —port 27017
切换数据库:
use admin
添加分片,只需在一台机器执行即可:
sh.addShard(“shard1/192.168.137.238:27001,192.168.137.239:27001,192.168.137.240:27001”) sh.addShard(“shard2/192.168.137.238:27002,192.168.137.239:27002,192.168.137.240:27002”) sh.addShard(“shard3/192.168.137.238:27003,192.168.137.239:27003,192.168.137.240:27003”)
查看集群状态:
sh.status()
4、实现分片功能
设置分片chunk大小
use config db.setting.save({“_id”:”chunksize”,”value”:1}) # 设置块大小为1M是方便实验,不然需要插入海量数据
5、模拟写入数据
use calon for(i=1;i<=50000;i++){db.user.insert({“id”:i,”name”:”jack”+i})} #模拟往calon数据库的user表写入5万数据
7、启用数据库分片
sh.enableSharding(“calon”)
8、创建索引,对表进行分片
db.user.createIndex({“id”:1}) # 以”id”作为索引 sh.shardCollection(calon.user”,{“id”:1}) # 根据”id”对user表进行分片 sh.status() # 查看分片情况
到此,MongoDB分布式集群就搭建完毕。
(adsbygoogle = window.adsbygoogle || []).push({});