MongoDB分片集群环境搭建

分片集群部署

img

主机名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 }

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

分片集群部署

img

主机名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 }

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

分片集群部署

img

主机名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 }

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

posted @ 2021-11-22 14:46  追こするれい的人  阅读(319)  评论(0编辑  收藏  举报