☰
云服务器mongo搭建集群-分片
2026/10/24 2:29:15 网站建设 项目流程

目录

分片集群

分片集群的组成如下图

分片集群角色

部署图

shard1

准备目录&文件

启动第一个分片shard1(复制集-3个实例)

加入到复制集shard1

shard1成功

config

准备目录&文件

启动config(3个)

加入到复制集config

config成功

mongos

准备目录&文件

启动

向路由mongos中添加集群分片shard1

动态扩容

增加shard2

向路由mongos中添加集群分片shard2

分片表

插入测试数据



分片集群

分片集群的组成如下图

  • mongos
  • config(复制集)
  • mongod(复制集)

分片集群角色

1.路由节点 mongos

提供集群单一入口,转发应用端请求,选择合适的数据节点进行读写,合并多个数据节点的返回。无状态,建议 mongos节点集群部署以提供高可用性。客户请求应发给mongos,而不是 分片服务器,当查询包含分片片键时,mongos将查询发送到指定分片,否则,mongos将查询发送到所有分片,并汇总所有查询结果。

2.配置节点config 就是普通的mongod进程

建议以复制集部署,提供高可用

提供集群元数据存储分片数据分布的数据。主节点故障时,配置服务器进入只读模式,

只读模式下,数据段分裂和集群平衡都不可执行。整个复制集故障时,分片集群不可用

3.数据节点

以复制集为单位,横向扩展最大1024分片,分片之间数据不重复,所有数据在一起才可以完整工作。

部署图


shard1

准备目录&文件

# 准备数据6个目录

每个分片集3个实例,2个分片集,一共6个实例

mkdir -p /usr/local/mongodb_cluster/data/shard1 /usr/local/mongodb_cluster/data/shard1second1 /usr/local/mongodb_cluster/data/shard1second2 /usr/local/mongodb_cluster/data/shard2 /usr/local/mongodb_cluster/data/shard2second1 /usr/local/mongodb_cluster/data/shard2second2

# 准备6个日志文件

touch /usr/local/mongodb_cluster/data/shard1/mongod.log /usr/local/mongodb_cluster/data/shard1second1/mongod.log /usr/local/mongodb_cluster/data/shard1second2/mongod.log /usr/local/mongodb_cluster/data/shard2/mongod.log /usr/local/mongodb_cluster/data/shard2second1/mongod.log /usr/local/mongodb_cluster/data/shard2second2/mongod.log

启动第一个分片shard1(复制集-3个实例)

#1

/usr/local/mongodb_cluster

mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /usr/local/mongodb_cluster/data/shard1 --logpath /usr/local/mongodb_cluster/data/shard1/mongod.log --port 27010 --fork --shardsvr

# 2

mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /usr/local/mongodb_cluster/data/shard1second1 --logpath /usr/local/mongodb_cluster/data/shard1second1/mongod.log --port 27011 --fork --shardsvr

# 3

mongod --bind_ip 0.0.0.0 --replSet shard1 --dbpath /usr/local/mongodb_cluster/data/shard1second2 --logpath /usr/local/mongodb_cluster/data/shard1second2/mongod.log --port 27012 --fork --shardsvr

加入到复制集shard1

# 进入任意mongo

mongo --port 27010

# rs.status()

# 执行 initiate

rs.initiate( {_id:"shard1", "members":[ {"_id":0,"host":"localhost:27010"}, {"_id":1,"host":"localhost:27011"}, {"_id":2,"host":"localhost:27012"} ] });

ok为1成功

shard1成功

# 再次查看 rs.status()

config

准备目录&文件

# 也是复制集(3个实例)

# 目录 /usr/local/mongodb_cluster

mkdir -p /usr/local/mongodb_cluster/data/config /usr/local/mongodb_cluster/data/configsecond1 /usr/local/mongodb_cluster/data/configsecond2

# 日志文件

touch /usr/local/mongodb_cluster/data/config/mongod.log /usr/local/mongodb_cluster/data/configsecond1/mongod.log /usr/local/mongodb_cluster/data/configsecond2/mongod.log

启动config(3个)

#1

mongod --bind_ip 0.0.0.0 --replSet config --dbpath /usr/local/mongodb_cluster/data/config --logpath /usr/local/mongodb_cluster/data/config/mongod.log --port 37010 --fork --configsvr

#2

mongod --bind_ip 0.0.0.0 --replSet config --dbpath /usr/local/mongodb_cluster/data/configsecond1 --logpath /usr/local/mongodb_cluster/data/configsecond1/mongod.log --port 37011 --fork --configsvr

#3

mongod --bind_ip 0.0.0.0 --replSet config --dbpath /usr/local/mongodb_cluster/data/configsecond2 --logpath /usr/local/mongodb_cluster/data/configsecond2/mongod.log --port 37012 --fork --configsvr

加入到复制集config

# mongo --port 37010

# 执行

rs.initiate( {_id:"config", "members":[ {"_id":0,"host":"localhost:37010"}, {"_id":1,"host":"localhost:37011"}, {"_id":2,"host":"localhost:37012"} ] });

config成功

mongos

准备目录&文件

# 目录

mkdir -p /usr/local/mongodb_cluster/data/mongos

# 文件

touch /usr/local/mongodb_cluster/data/mongos/mongos.log

启动

mongos --bind_ip 0.0.0.0 --logpath /usr/local/mongodb_cluster/data/mongos/mongos.log --port 4000 --fork --configdb config/localhost:37010,localhost:37011,localhost:37012

# --configdb 为配置服务器的地址列表

向路由mongos中添加集群分片shard1

#进入到mongso

mongo --port 4000

# 执行如下

sh.addShard("shard1/localhost:27010,localhost:27011,localhost:27012");

查看分片信息

sh.status()

已经加入了shard1

动态扩容

增加shard2

和shard1一样,增加shard2复制集

/usr/local/mongodb_cluster

mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /usr/local/mongodb_cluster/data/shard2 --logpath /usr/local/mongodb_cluster/data/shard2/mongod.log --port 27013 --fork --shardsvr

#

mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /usr/local/mongodb_cluster/data/shard2second1 --logpath /usr/local/mongodb_cluster/data/shard2second1/mongod.log --port 27014 --fork --shardsvr

#

mongod --bind_ip 0.0.0.0 --replSet shard2 --dbpath /usr/local/mongodb_cluster/data/shard2second2 --logpath /usr/local/mongodb_cluster/data/shard2second2/mongod.log --port 27015 --fork --shardsvr

初始化加入复制集shard2

mongo --port 27013

rs.initiate( {_id:"shard2", "members":[ {"_id":0,"host":"localhost:27013"}, {"_id":1,"host":"localhost:27014"}, {"_id":2,"host":"localhost:27015"} ] });

向路由mongos中添加集群分片shard2

#

mongo --port 4000

sh.addShard("shard2/localhost:27013,localhost:27014,localhost:27015");

sh.status();


分片表

# 分片表

sh.enableSharding("order");

# 分片键

sh.shardCollection("order.account",{_id: "hashed"});

插入测试数据

use order

for( var i =0;i<100; i++){ db.account.insert({i:i}); }

# 【删除错误集合 db.order.drop()】

db.account.find()

# 退出mongos,分别到shard1和shard2中查看数据

# shard1

mongo --port 27010

# shard2

mongo --port 27013

可以配置身份验证功能, 可参考如下链接

Mongo数据库集群搭建_mongo集群-CSDN博客文章浏览阅读1.8k次,点赞21次,收藏34次。本文介绍了Mongo集群的优势,包括高可用性、水平扩展性、高性能等。还说明了下载指定操作系统版本包的方法,详细阐述了部署和验证工作,如准备配置文件、启动节点、初始化副本集等步骤。最后列举了Mongo集群使用中的常见问题及解决办法。https://blog.csdn.net/sinat_33718563/article/details/143833377

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询