目录
分片集群
分片集群的组成如下图
分片集群角色
部署图
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