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 }

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

相关推荐
Msshu12311 小时前
Type-C 多协议快充诱骗电压芯片XSP28 芯片脚耐压高达21V 电路简单 性价比高
mongodb·zookeeper·rabbitmq·flume·memcache
hexiekuaile19 小时前
mongodb8.2知识
mongodb
The Sheep 20231 天前
MongoDB与.Net6
数据库·mongodb
点灯小铭1 天前
基于单片机的智能收银机模拟系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
数据知道1 天前
一文掌握 MongoDB 存储引擎 WiredTiger 的原理
数据库·mongodb·数据库架构
清风6666662 天前
基于单片机的电加热炉智能温度与液位PID控制系统设计
单片机·嵌入式硬件·mongodb·毕业设计·课程设计·期末大作业
列御寇2 天前
MongoDB分片集概述
数据库·mongodb
列御寇2 天前
MongoDB分片集群——集群组件概述
数据库·mongodb
列御寇2 天前
MongoDB分片集群——mongos组件(mongos进程)
数据库·mongodb