MongoDB系列: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 个节点的数据存储目录
bash 复制代码
[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 副本集配置文件并修改
bash 复制代码
[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 个节点并修改
bash 复制代码
[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 副本集
bash 复制代码
[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 脚本,启动副本集
bash 复制代码
[root@node-01 mongodb-4.2.7]# chmod 777 cluster.sh
[root@node-01 mongodb-4.2.7]# ./cluster.sh start
步骤三:初始化 node-01 副本集
bash 复制代码
[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
bash 复制代码
# 创建 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 副本集
bash 复制代码
[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 副本集
bash 复制代码
[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
bash 复制代码
# 创建 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 副本集
bash 复制代码
[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 副本集
bash 复制代码
[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 服务器配置
bash 复制代码
#创建 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 配置服务器
bash 复制代码
[root@node-04 mongodb-4.2.7]# bin/mongod -f config/config.conf
步骤十二:初始化 config 配置服务器
bash 复制代码
[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 路由服务器配置
bash 复制代码
[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 实例

bash 复制代码
[root@node-04 mongodb-4.2.7]# bin/mongos -f config/route.conf
步骤十五:添加集群分片
bash 复制代码
[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");
步骤十六:查看集群分片状态
bash 复制代码
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 }
步骤十七:验证集群分片
bash 复制代码
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 }

至此,分片集群环境搭建成功 :)

相关推荐
77美式3 小时前
Node + Express + MongoDB 后端部署全解析:新手零踩坑
数据库·mongodb·express
知识分享小能手11 小时前
MongoDB入门学习教程,从入门到精通,MongoDB 持久性完全指南(20)
数据库·学习·mongodb
爬山算法1 天前
MongoDB(86)如何使用MongoDB存储大文件?
数据库·mongodb
知识分享小能手1 天前
MongoDB入门学习教程,从入门到精通,MongoDB的了解应用程序的动态(18)
数据库·学习·mongodb
知识分享小能手1 天前
MongoDB入门学习教程,从入门到精通,MongoDB 安全完全指南(19)
学习·安全·mongodb
disgare2 天前
MongoDB 底层原理
数据库·mongodb
gihigo19983 天前
基于MSComm控件的PC串口通信程序(中断方式接收数据)
数据库·mongodb
知识分享小能手3 天前
MongoDB入门学习教程,从入门到精通,MongoDB的分片管理(17)
数据库·学习·mongodb
清风6666663 天前
基于单片机的自动存包柜设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
爬山算法3 天前
MongoDB(88)如何进行数据迁移?
数据库·mongodb