分片集群部署

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

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

MongoDB 分片集群环境搭建的更多相关文章

  1. MongoDB分片集群环境搭建记录

    --创建配置服务器mongod.exe --logpath "G:\USERDATA\MONGODB\Test2\Log\mongodb.log" --logappend --db ...

  2. MongoDB 分片集群实战

    背景 在如今的互联网环境下,海量数据已随处可见并且还在不断增长,对于如何存储处理海量数据,比较常见的方法有两种: 垂直扩展:通过增加单台服务器的配置,例如使用更强悍的 CPU.更大的内存.更大容量的磁 ...

  3. Mongodb副本集+分片集群环境部署记录

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

  4. 搭建MongoDB分片集群

    在部门服务器搭建MongoDB分片集群,记录整个操作过程,朋友们也可以参考. 计划如下: 用5台机器搭建,IP分别为:192.168.58.5.192.168.58.6.192.168.58.8.19 ...

  5. Mongodb副本集+分片集群环境部署

    前面详细介绍了mongodb的副本集和分片的原理,这里就不赘述了.下面记录Mongodb副本集+分片集群环境部署过程: MongoDB Sharding Cluster,需要三种角色: Shard S ...

  6. Windows 搭建MongoDB分片集群(二)

    在本篇博客中我们主要讲描述分片集群的搭建过程.配置分片集群主要有两个步骤,第一启动所有需要的mongod和mongos进程.第二步就是启动一个mongos与集群通信.下面我们一步步来描述集群的搭建过程 ...

  7. Windows 搭建MongoDB分片集群(一)

    一.角色说明 要构建一个MongoDB分片集群,需要三个角色: shard server  即存储实际数据得分片,每个shard 可以是一个Mongod实例,也可以是一组mongod实例构成得Repl ...

  8. MongoDB分片集群搭建及扩容

    ### 实验:分片集群搭建及扩容#### 实验目标及流程 * 目标:学习如何搭建一个两分片的分片集群 * 环境:3台Linux虚拟机器,4Core 8GB * 步骤: * 配置域名解析 * 准备分片目 ...

  9. MongoDB分片集群原理、搭建及测试详解

    随着技术的发展,目前数据库系统对于海量数据的存储和高效访问海量数据要求越来越高,MongoDB分片机制就是为了解决海量数据的存储和高效海量数据访问而生. MongoDB分片集群由mongos路由进程( ...

  10. elasticsearch与mongodb分布式集群环境下数据同步

    1.ElasticSearch是什么 ElasticSearch 是一个基于Lucene构建的开源.分布式,RESTful搜索引擎.它的服务是为具有数据库和Web前端的应用程序提供附加的组件(即可搜索 ...

随机推荐

  1. Java 集合框架底层数据结构实现深度解析

    Java 集合框架(Java Collections Framework, JCF)是支撑高效数据处理的核心组件,其底层数据结构的设计直接影响性能与适用场景.本文从线性集合.集合.映射三大体系出发,系 ...

  2. 下一代 2D 图像设计工具「GitHub 热点速览」

    长期以来,2D 设计领域似乎已是 Adobe 与 Figma 的天下,层叠的图层.熟悉的工具栏,一切都显得那么顺理成章,却也让不少设计师在创意的边界上感到了些许乏力.当我们以为设计工具的革新只能是小修 ...

  3. ChatGPT学习之旅 (6) 聊聊AI人设

    大家好,我是Edison. 上一篇:Prompt终极用法 通过前面5篇内容我们了解了从基础到高级的Prompt用法,今天我们来聊聊AI的人设! 打造人设的步骤:只要3步 在Prompt实践中,我们了解 ...

  4. GSS 全做

    等我学了 fhq-treap 再 remake 一遍 I 板子 II 离线,顺便维护历史最值,感觉难写. III 板子 IV 每个数被开方次数很少,线段树暴力 V 分类讨论 若区间不交,则 ans=[ ...

  5. Rust 修仙之道

    静修Rust三年多,有所感悟.今借道家修仙之法展一斑之管窥,只为博大家一乐.进入正文

  6. java基础(switch)

    switch语句 # switch(表达式){ case 常量1:代码块1: break: case 常量2:代码块2: break: case 常量3:代码块3: break: default:以上 ...

  7. CF1905C Largest Subsequence 题解

    CF1905C Largest Subsequence 首先考虑如何生成一个字典序最大的子序列.我们先考虑找到字符串中的最大元素,然后在其之后找到第二大的元素,重复这个过程,直到达到序列末尾. 我们可 ...

  8. java radioButton

    简介 简单 code /* * @Author: your name * @Date: 2020-11-04 10:19:14 * @LastEditTime: 2020-11-04 10:28:50 ...

  9. SciTech-Mathmatics-Probability+Statistics-Conditional Probability + Bayes Theorem+App.: 条件概率+Bayes原理及应用:广告邮件分类

    SciTech-Mathmatics-Probability+Statistics Conditional Probability + Bayes Formula: Application: Cond ...

  10. POLIR-Society-Organization-Psychology-Relationship关系-Feelings感觉: Relationship Emotions : How to Express Feelings in a Relationship

    https://www.verywellmind.com/feeling-words-to-help-spouse-2300571 Relationships > Strengthening R ...