
目录分片集群分片集群的组成如下图分片集群角色部署图shard1准备目录文件启动第一个分片shard1(复制集-3个实例加入到复制集shard1shard1成功config准备目录文件启动config(3个)加入到复制集configconfig成功mongos准备目录文件启动向路由mongos中添加集群分片shard1动态扩容增加shard2向路由mongos中添加集群分片shard2分片表插入测试数据分片集群分片集群的组成如下图mongosconfig(复制集)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_clustermongod --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# 2mongod --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# 3mongod --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# 进入任意mongomongo --port 27010# rs.status()# 执行 initiaters.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_clustermkdir -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个)#1mongod --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#2mongod --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#3mongod --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#进入到mongsomongo --port 4000# 执行如下sh.addShard(shard1/localhost:27010,localhost:27011,localhost:27012);查看分片信息sh.status()已经加入了shard1动态扩容增加shard2和shard1一样增加shard2复制集/usr/local/mongodb_clustermongod --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初始化加入复制集shard2mongo --port 27013rs.initiate( {_id:shard2, members:[ {_id:0,host:localhost:27013}, {_id:1,host:localhost:27014}, {_id:2,host:localhost:27015} ] });向路由mongos中添加集群分片shard2#mongo --port 4000sh.addShard(shard2/localhost:27013,localhost:27014,localhost:27015);sh.status();分片表# 分片表sh.enableSharding(order);# 分片键sh.shardCollection(order.account,{_id: hashed});插入测试数据use orderfor( var i 0;i100; i){ db.account.insert({i:i}); }# 【删除错误集合 db.order.drop()】db.account.find()# 退出mongos分别到shard1和shard2中查看数据# shard1mongo --port 27010# shard2mongo --port 27013可以配置身份验证功能 可参考如下链接Mongo数据库集群搭建_mongo集群-CSDN博客文章浏览阅读1.8k次点赞21次收藏34次。本文介绍了Mongo集群的优势包括高可用性、水平扩展性、高性能等。还说明了下载指定操作系统版本包的方法详细阐述了部署和验证工作如准备配置文件、启动节点、初始化副本集等步骤。最后列举了Mongo集群使用中的常见问题及解决办法。https://blog.csdn.net/sinat_33718563/article/details/143833377