mongodb4.2版本搭建分片集群

本文是在3台麒麟服务器上部署3节点mongos、3节点mongod、3节点config
mongodb下载地址:
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-4.2.25.tgz
1.基础配置,在三台服务器上分别执行:
echo "10.16.223.182 szhjx-182 mongo01.com mongo02.com" >> /etc/hosts
echo "10.16.223.183 szhjx-183 mongo03.com mongo04.com" >> /etc/hosts
echo "10.16.223.184 szhjx-184 mongo05.com mongo06.com" >> /etc/hosts
在三台服务器上分别创建下面的目录:
说明:
shard1为分片1的目录
shard2为分片2的目录
config为config server的目录
mongos为mongos的目录
注意:
(1)mongos服务没有数据目录,因为mongos不存储数据。
(2)因为是测试环境,所以在三台机器上同时部署副本集shard1和副本集shard2,创建副本集时使用mong01、03、05.com域名模拟shard1,使用mong02、04、06.com模拟shard2。
#分别在三台服务器上创建以下目录
mkdir -p /data/mongodb-cluster/shard1/db /data/mongodb-cluster/shard1/log
mkdir -p /data/mongodb-cluster/config/db /data/mongodb-cluster/config/log mkdir -p /data/mongodb-cluster/shard2/db /data/mongodb-cluster/shard2/log
mkdir -p /data/mongodb-cluster/mongos/
2.shard1复制集节点mongod.conf配置,在三台服务器上分别执行:
cat >> /data/mongodb-cluster/mongodb4-mongod1/mongod.conf << EOF
processManagement:
fork: true
pidFilePath: /data/mongodb-cluster/shard1/db0.pid
net:
bindIp: 0.0.0.0
port: 27010
storage:
dbPath: /data/mongodb-cluster/shard1/db
systemLog:
destination: file
path: "/data/mongodb-cluster/shard1/log/mongod.log"
logAppend: true
storage:
journal:
enabled: true
sharding:
clusterRole: shardsvr
replication:
replSetName: shard1
EOF
3.启动shard1复制集节点上服务,在三台服务器上分别执行::
/data/mongodb-cluster/mongodb4-mongod1/bin/mongod -f /data/mongodb-cluster/mongodb4-mongod1/mongod.conf
4.创建shard1数据分片复制集,可以在三个的任意一个复制集节点上连接mongod服务,我在第一个节点连接mongod,:
(1)连接:
/data/mongodb-cluster/mongodb4-mongod1/bin/mongo mongo01.com:27010
或者 /data/mongodb-cluster/mongodb4-mongod1/bin/mongo --host mongo01.com --port 27010 #这两种连接方式都可以
(2)创建shard1,使用rs.initiate命令初始化复制集,指定复制集的名字为shard1,并指定各节点的IP和端口。
rs.initiate({ _id: "shard1", "members" : [ { "_id": 0, "host" : "mongo01.com:27010" }, { "_id": 1, "host" : "mongo03.com:27010" }, { "_id": 2, "host" : "mongo05.com:27010" } ] })
rs.status() # 查看分片复制集
5.创建 config server 复制集
在三台服务器上分别执行:
cat >>/data/mongodb-cluster/mongodb4-config/mongod.conf<< EOF processManagement: fork: true pidFilePath: /data/mongodb-cluster/config/db0.pid net: bindIp: 0.0.0.0 port: 27019 storage: dbPath: /data/mongodb-cluster/config/db systemLog: destination: file path: "/data/mongodb-cluster/config/log/mongod.log" logAppend: true storage: journal: enabled: true sharding: clusterRole: configsvr replication: replSetName: config EOF
在三台服务器上分别执行:
启动config server服务:
/data/mongodb-cluster/mongodb4-config/bin/mongod -f /data/mongodb-cluster/mongodb4-config/mongod.conf
6.创建config server复制集,连接三个节点中任何节点上的config server,我在第一个节点连接config:
(1)连接:
/data/mongodb-cluster/mongodb4-config/bin/mongo --host mongo01.com --port 27019
(2)config server 复制集节点初始化,在三台服务器上分别执行:
rs.initiate({ _id: "config", "members" : [ { "_id": 0, "host" : "mongo01.com:27019" }, { "_id": 1, "host" : "mongo03.com:27019" }, { "_id": 2, "host" : "mongo05.com:27019" } ] })
rs.status() #查看config server 复制集
7.搭建 mongos
在三台服务器上分别执行:
cat >>/data/mongodb-cluster/mongodb4-mongos/mongod.conf<< EOF processManagement: fork: true pidFilePath: /data/mongodb-cluster/mongos/db0.pid net: bindIp: 0.0.0.0 port: 27017 systemLog: destination: file path: "/data/mongodb-cluster/mongos/mongod.log" logAppend: true sharding: configDB: config/mongo01.com:27019,mongo03.com:27019,mongo05.com:27019 #mongos在启动的时候指定config server复制集的所有节点的IP和端口 EOF
在三台服务器上分别执行:
启动:
/data/mongodb-cluster/mongodb4-mongos/bin/mongos -f /data/mongodb-cluster/mongodb4-mongos/mongod.conf #注意mongos服务需要使用mongos命令启动
8.连接到其中一个mongos:
(1)连接:
/data/mongodb-cluster/mongodb4-mongos/bin/mongo --host mongo01.com --port 27017
(2)添加shard1分片:
mongos> sh.addShard("shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010") #添加shard1复制集,指定shard1复制集所有节点的IP和端口 mongos> sh.status() #查看mongos状态
9.创建第二个分片复制集:
在三台服务器上分别执行:
cat >>/data/mongodb-cluster/mongodb4-mongod2/mongod.conf<< EOF processManagement: fork: true pidFilePath: /data/mongodb-cluster/shard2/db0.pid net: bindIp: 0.0.0.0 port: 27011 storage: dbPath: /data/mongodb-cluster/shard2/db systemLog: destination: file path: "/data/mongodb-cluster/shard2/log/mongod.log" logAppend: true storage: journal: enabled: true sharding: clusterRole: shardsvr replication: replSetName: shard2 EOF
在三台服务器上分别执行:
启动:
/data/mongodb-cluster/mongodb4-mongod2/bin/mongod -f /data/mongodb-cluster/mongodb4-mongod2/mongod.conf
连接其中一个复制集节点:
/data/mongodb-cluster/mongodb4-mongod2/bin/mongo --host mongo02.com --port 27011
shard2复制集节点初始化
rs.initiate({ _id: "shard2", "members" : [ { "_id": 0, "host" : "mongo02.com:27011" }, { "_id": 1, "host" : "mongo04.com:27011" }, { "_id": 2, "host" : "mongo06.com:27011" } ] })
查看shard2复制集状态
rs.status()
10.连接到其中一个mongos:
连接:
/data/mongodb-cluster/mongodb4-mongos/bin/mongo --host mongo01.com --port 27017
添加shard2分片:
mongos> sh.addShard("shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011") mongos> sh.status() #查看mongos状态
11.测试:
对集合开启分片初始化:
连接到任何一个mongos, 对集合设置分片,如下为对company.emp集合的_id进行hash分片 /data/mongodb-cluster/mongodb4-mongos/bin/mongo mongo01.com:27017 mongos>sh.status() #为了使集合支持分片,需要先开启database的分片功能 mongos>sh.enableSharding("company") # 执行shardCollection命令,对集合执行分片初始化 mongos>sh.shardCollection("company.emp", {_id: 'hashed'}) mongos>sh.status() #插入测试数据 use company var emps=[] for (var i = 0; i < 10000; i++) { var emp = {i:i} emps.push(emp); } db.emp.insertMany(emps); #查询数据分布 db.emp.getShardDistribution() Shard shard2 at shard2/mongo02.com:27011,mongo04.com:27011,mongo06.com:27011 data : 161KiB docs : 5026 chunks : 2 estimated data per chunk : 80KiB estimated docs per chunk : 2513 Shard shard1 at shard1/mongo01.com:27010,mongo03.com:27010,mongo05.com:27010 data : 160KiB docs : 4974 chunks : 2 estimated data per chunk : 80KiB estimated docs per chunk : 2487 Totals data : 322KiB docs : 10000 chunks : 4 Shard shard2 contains 50.26% data, 50.26% docs in cluster, avg obj size on shard : 33B Shard shard1 contains 49.74% data, 49.74% docs in cluster, avg obj size on shard : 33B #可以看到这两个分片复制集的数据分布比例

浙公网安备 33010602011771号