MongoDB 分片集群环境搭建
分片集群部署
主机名 | IP地址 | 规划 | 端口分配 |
---|---|---|---|
node-01 | 192.168.229.21 | 副本集名称:shard1(1主2从1仲裁) | 主:27017 从:27018:从:27019 仲:28017 |
node-02 | 192.168.229.22 | 副本集名称:shard2(1主2从1仲裁) | 主:27017 从:27018:从:27019 仲:28017 |
node-03 | 192.168.229.23 | 副本集名称:shard3(1主2从1仲裁) | 主:27017 从:27018:从:27019 仲:28017 |
node-04 | 192.168.229.24 | 1路由服务器+1配置服务器 | 路由服务器:27017 配置服务器:27018 |
注:实际生产环境中,路由服务器和配置服务器可部署多个,以构建高可用分片集群模式
环境搭建
步骤一: node-01 副本集配置
- 创建 node-1 副本集 4 个节点的数据存储目录
[root@node-01 data]# cd /root/apps/mongodb-4.2.7/data/
[root@node-01 data]# mkdir -p 27017db
[root@node-01 data]# mkdir -p 27018db
[root@node-01 data]# mkdir -p 27019db
[root@node-01 data]# mkdir -p 28017db
- 拷贝 node-01 副本集配置文件并修改
[root@node-03 config]# cd /root/apps/mongodb-4.2.7/config/
[root@node-01 config]# vim 27017_cluster.conf
#数据文件存放路径
dbpath=/root/apps/mongodb-4.2.7/data/27017db
#日志文件存放目录
logpath=/root/apps/mongodb-4.2.7/logs/27017_mongodb.log
#pid文件
pidfilepath=/root/apps/mongodb-4.2.7/run/27017_mongodb.pid
#以守护程序的方式启用,即在后台运行
fork=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口
port=27017
#开启权限验证
auth=false
#副本集名称
replSet=shard1
#操作日志大小(MB)
oplogSize=100
#设置分片集群角色
shardsvr=true
- 拷贝 27017_cluster.conf 到 node-01 副本集其他 3 个节点并修改
[root@node-01 config]# cp 27017_cluster.conf 27018_cluster.conf
[root@node-01 config]# cp 27017_cluster.conf 27019_cluster.conf
[root@node-01 config]# cp 27017_cluster.conf 28017_cluster.conf
# 使用 sed 命令分别将配置中的 27017 替换为 27018、27019、28017
[root@node-01 config]# sed -i 's/27017/27018/g' 27018_cluster.conf
[root@node-01 config]# sed -i 's/27017/27019/g' 27019_cluster.conf
[root@node-01 config]# sed -i 's/27017/28017/g' 28017_cluster.conf
步骤二:启动 node-01 副本集
- 编写批处理 cluster.sh 脚本
[root@node-01 mongodb-4.2.7]# vim cluster.sh
#!/bin/bash
CMD=$1
case $CMD in
start)
echo "starting"
cd /root/apps/mongodb-4.2.7;bin/mongod -f config/27017_cluster.conf
cd /root/apps/mongodb-4.2.7;bin/mongod -f config/27018_cluster.conf
cd /root/apps/mongodb-4.2.7;bin/mongod -f config/27019_cluster.conf
cd /root/apps/mongodb-4.2.7;bin/mongod -f config/28017_cluster.conf
;;
stop)
echo "stoping"
cd /root/apps/mongodb-4.2.7;bin/mongod --shutdown --dbpath data/27017db
cd /root/apps/mongodb-4.2.7;bin/mongod --shutdown --dbpath data/27018db
cd /root/apps/mongodb-4.2.7;bin/mongod --shutdown --dbpath data/27019db
cd /root/apps/mongodb-4.2.7;bin/mongod --shutdown --dbpath data/28017db
;;
*)
echo "Usage:{start | stop }"
esac
- 执行批处理 cluster.sh 脚本,启动副本集
[root@node-01 mongodb-4.2.7]# chmod 777 cluster.sh
[root@node-01 mongodb-4.2.7]# ./cluster.sh start
步骤三:初始化 node-01 副本集
[root@node-01 mongodb-4.2.7]# bin/mongo --port 27017
> use admin
switched to db admin
# 初始化副本集
> rs.initiate( {
_id: "shard1",
members: [
{ _id: 0, host: "192.168.229.21:27017" },
{ _id: 1, host: "192.168.229.21:27018" },
{ _id: 2, host: "192.168.229.21:27019" },
{ _id: 3, host: "192.168.229.21:28017",arbiterOnly:true }
] })
# 查看集群状态
shard1:OTHER> rs.status()
步骤四:拷贝 node-01 配置到 node-02
# 创建 node-2 副本集 4 个节点的数据存储目录
[root@node-02 data]# cd /root/apps/mongodb-4.2.7/data/
[root@node-02 data]# mkdir -p 27017db
[root@node-02 data]# mkdir -p 27018db
[root@node-02 data]# mkdir -p 27019db
[root@node-02 data]# mkdir -p 28017db
[root@node-01 mongodb-4.2.7]# scp -r config/ node-02:$PWD
[root@node-02 config]# cd /root/apps/mongodb-4.2.7/config/
[root@node-02 config]# sed -i 's/shard1/shard2/g' 27017_cluster.conf
[root@node-02 config]# sed -i 's/shard1/shard2/g' 27018_cluster.conf
[root@node-02 config]# sed -i 's/shard1/shard2/g' 27019_cluster.conf
[root@node-02 config]# sed -i 's/shard1/shard2/g' 28017_cluster.conf
步骤五:启动 node-02 副本集
[root@node-01 mongodb-4.2.7]# scp cluster.sh node-02:$PWD
[root@node-01 mongodb-4.2.7]# ./cluster.sh start
步骤六:初始化 node-02 副本集
[root@node-02 mongodb-4.2.7]# bin/mongo --port 27017
> use admin
switched to db admin
# 初始化副本集
> rs.initiate( {
_id: "shard2",
members: [
{ _id: 0, host: "192.168.229.22:27017" },
{ _id: 1, host: "192.168.229.22:27018" },
{ _id: 2, host: "192.168.229.22:27019" },
{ _id: 3, host: "192.168.229.22:28017",arbiterOnly:true }
] })
# 查看集群状态
shard2:SECONDARY> rs.status()
步骤七:拷贝 node-01 配置到 node-03
# 创建 node-3 副本集 4 个节点的数据存储目录
[root@node-03 data]# cd /root/apps/mongodb-4.2.7/data/
[root@node-03 data]# mkdir -p 27017db
[root@node-03 data]# mkdir -p 27018db
[root@node-03 data]# mkdir -p 27019db
[root@node-03 data]# mkdir -p 28017db
[root@node-01 mongodb-4.2.7]# scp -r config/ node-03:$PWD
[root@node-03 config]# cd /root/apps/mongodb-4.2.7/config/
[root@node-03 config]# sed -i 's/shard1/shard3/g' 27017_cluster.conf
[root@node-03 config]# sed -i 's/shard1/shard3/g' 27018_cluster.conf
[root@node-03 config]# sed -i 's/shard1/shard3/g' 27019_cluster.conf
[root@node-03 config]# sed -i 's/shard1/shard3/g' 28017_cluster.conf
步骤八:启动 node-03 副本集
[root@node-01 mongodb-4.2.7]# scp cluster.sh node-03:$PWD
[root@node-01 mongodb-4.2.7]# ./cluster.sh start
步骤九:初始化 node-03 副本集
[root@node-03 mongodb-4.2.7]# bin/mongo --port 27017
> use admin
switched to db admin
# 初始化副本集
> rs.initiate( {
_id: "shard3",
members: [
{ _id: 0, host: "192.168.229.23:27017" },
{ _id: 1, host: "192.168.229.23:27018" },
{ _id: 2, host: "192.168.229.23:27019" },
{ _id: 3, host: "192.168.229.23:28017",arbiterOnly:true }
] })
# 查看集群状态
shard3:SECONDARY> rs.status()
步骤十:node-04 中创建 config 服务器配置
#创建 node-04 配置服务器数据存储目录
[root@node-04 data]# cd /root/apps/mongodb-4.2.7/data/
[root@node-04 data]# mkdir -p configdb
[root@node-04 config]# cd /root/apps/mongodb-4.2.7/config
[root@node-04 config]# vi config.conf
#数据文件存放路径
dbpath=/root/apps/mongodb-4.2.7/data/configdb
#日志文件存放目录
logpath=/root/apps/mongodb-4.2.7/logs/config_mongodb.log
#pid文件
pidfilepath=/root/apps/mongodb-4.2.7/run/config_mongodb.pid
#以守护程序的方式启用,即在后台运行
fork=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#开启权限验证
auth=false
#端口
port=27017
#所有IP都能访问
bind_ip=0.0.0.0
#副本集名称
replSet=config
#操作日志大小(MB)
oplogSize=100
#设置分片集群角色
configsvr=true
步骤十一:启动 config 配置服务器
[root@node-04 mongodb-4.2.7]# bin/mongod -f config/config.conf
步骤十二:初始化 config 配置服务器
[root@node-04 mongodb-4.2.7]# bin/mongo --port 27017
> use admin
switched to db admin
>rs.initiate( {
_id: "config",
members: [
{ _id: 0, host: "192.168.229.24:27017", priority:2 }
] })
步骤十三:node-04 中创建 route 路由服务器配置
[root@node-04 ~]# cd /root/apps/mongodb-4.2.7/config
[root@node-04 mongodb-4.2.7]# vi config/route.conf
#日志文件存放目录
logpath=/root/apps/mongodb-4.2.7/logs/route_mongodb.log
#pid文件
pidfilepath=/root/apps/mongodb-4.2.7/run/route_mongodb.pid
#端口
port=27018
#以守护程序的方式启用,即在后台运行
fork=true
#这个选项可以过滤掉一些无用的日志信息,若需要调试使用请设置为false
quiet=true
#所有IP都能访问
bind_ip=0.0.0.0
#配置服务器路径
configdb=config/192.168.229.24:27017
步骤十四:启动 route 路由服务器
注意:这里启动 route 路由服务器要使用 bin/mongos 实例
[root@node-04 mongodb-4.2.7]# bin/mongos -f config/route.conf
步骤十五:添加集群分片
[root@node-04 mongodb-4.2.7]# bin/mongo --port 27018
mongos>sh.addShard("shard1/192.168.229.21:27017");
mongos>sh.addShard("shard1/192.168.229.21:27018");
mongos>sh.addShard("shard1/192.168.229.21:27019");
mongos>sh.addShard("shard1/192.168.229.21:28017");
mongos>sh.addShard("shard2/192.168.229.22:27017");
mongos>sh.addShard("shard2/192.168.229.22:27019");
mongos>sh.addShard("shard2/192.168.229.22:27019");
mongos>sh.addShard("shard2/192.168.229.22:28017");
mongos>sh.addShard("shard3/192.168.229.23:27017");
mongos>sh.addShard("shard3/192.168.229.23:27018");
mongos>sh.addShard("shard3/192.168.229.23:27019");
mongos>sh.addShard("shard3/192.168.229.23:28017");
步骤十六:查看集群分片状态
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("605a0f50db845e34215b6b0b")
}
shards:
{ "_id" : "shard1", "host" : "shard1/192.168.229.21:27017,192.168.229.21:27018,192.168.229.21:27019", "state" : 1 }
{ "_id" : "shard2", "host" : "shard2/192.168.229.22:27017,192.168.229.22:27018,192.168.229.22:27019", "state" : 1 }
{ "_id" : "shard3", "host" : "shard3/192.168.229.23:27017,192.168.229.23:27018,192.168.229.23:27019", "state" : 1 }
active mongoses:
"4.2.7" : 1
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
步骤十七:验证集群分片
mongos> use config;
switched to db config
mongos> db.shards.find()
{ "_id" : "shard1", "host" : "shard1/192.168.229.21:27017,192.168.229.21:27018,192.168.229.21:27019", "state" : 1 }
{ "_id" : "shard2", "host" : "shard2/192.168.229.22:27017,192.168.229.22:27018,192.168.229.22:27019", "state" : 1 }
{ "_id" : "shard3", "host" : "shard3/192.168.229.23:27017,192.168.229.23:27018,192.168.229.23:27019", "state" : 1 }
至此,分片集群环境搭建成功 :)