MongoDB分片及副本集配置说明
目录
MongoDB分片及副本集配置说明... 1
第一部分 副本集... 2
第一步 副本集部署... 3
第二步 副本集初始化(在哪个端口下初始化都行). 4
第三步 启动仲裁服务器... 4
第二部分 分片... 5
第一步 开启config服务器... 5
第二步 开启mongos服务器... 5
第三步 启动mongod服务器... 5
第四步 分片配置... 6
第三部分 附录... 7
一、分片介绍... 7
二、试验配置说明... 8
第一步 开启config服务器... 8
第二步 开启mongos服务器... 8
第三步 启动mongod服务器... 9
第四步 服务配置... 9
第五步 查看效果... 10
第一部分 分片
图例说明:本例用三台机器作为示例,他们的ip分别为192.168.2.196、192.168.2.197、192.168.2.198, 每台服务器上分别存放着config服务器(端口为:20001)、 mongos服务器(端口为:20000)、mongod服务器(端口为:30001)、副本集服务器(端口:30002)。
在MongoDB里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对。
第一步 开启config服务器
分别开启三台机器的config服务,各自端口都为20001:
192.168.2.196下:
C:\mongocfig\bin\mongod --dbpath=C:\mongo30001\dataCfig --port 20001
192.168.2.197下:
D:\mongocfig\bin\mongod --dbpath=D:\mongo30001\dataCfig --port 20001
192.168.2.198下:
E:\mongocfig\bin\mongod --dbpath=E:\mongo30001\dataCfig --port 20001
第二步 开启mongos服务器
分别开启三台机器的mongos服务,各自端口都为20000:
192.168.2.196下:
C:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
192.168.2.197下:
D:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
192.168.2.198下:
E:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001
第三步 启动mongod服务器
分别开启三台机器的mongod服务,各自端口都为30001:
192.168.2.196下:
C:\mongodb\bin\mongod --port 30001 --dbpath= C:\mongodb\data
192.168.2.197下:
D:\mongodb\bin\mongod --port 30001 --dbpath= D:\mongodb\data
192.168.2.198下:
E:\mongodb\bin\mongod --port 30001 --dbpath=E:\mongodb\data
第四步 分片配置
配置192.168.2.196的分片:
C:\ mongos \bin\mongo 192.168.2.196:20000/admin
db.runCommand({"addshard":"192.168.2.196: 30001 ",allowLocal:true})
db.runCommand({"addshard":"192.168.2.197: 30001 ",allowLocal:true})
db.runCommand({"addshard":"192.168.2.198: 30001 ",allowLocal:true})
db.runCommand({"enablesharding":"marc"})
db.runCommand({"shardcollection":"marc.211010","key":{"_id":1}})
第二部分 副本集
副本集合介绍
简述:副本集合(Replica Sets),是一个基于主/从复制机制的复制功能,但增加了自动故障转移和恢复特性。一个集群最多可以支持7个服务器,并且任意节点都可以是主节点。所有的写操作都被分发到主节点,而读操作可以在任何节点上进行。
建立一个副本集需要步骤:
1、需要启动每个节点,
2、然后进行初始化设置。在这里,我们将配置一组(三个节点, 他们的ip分别为192.168.2.196、192.168.2.197、192.168.2.198),这是标准设置。
一旦mongod节点启动,我们将发出一个命令,以正确地初始化设置。几秒钟后,将选举产生一个主节点,你就可以开始写和查询集。
第一步 副本集部署
副本集名称:calisDms,先启动三个节点:
启动ip为192.168.2.196:30001节点:
d:\mongo\bin\mongod --dbpath=d:\mongo30001\data --port 30001 --replSet calisDms
启动ip为192.168.2.197:30002的节点:
d:\mongo\bin\mongod --dbpath=d:\mongo30002\data --port 30002 --replSet calisDms
启动ip为192.168.2.198:30003的节点:
d:\mongo\bin\mongod --dbpath=d:\mongo30003\data --port 30003 --replSet calisDms
第二步 副本集初始化(在哪个端口下初始化都行)
2.1:d:\mongo\bin\mongo 192.168.2.196:30001/admin
2.2:db.runCommand({"replSetInitiate":{"_id":"calisDms","members":[{"_id":1,"host":"192.168.2.196:30001"},{"_id":2,"host":"192.168.2.197:30001"},{"_id":3,"host":"192.168.2.198:30001"}]}})
第三步 启动仲裁服务器
192.168.2.196:30004,负责仲裁是master剩余为slaver。
3.1:d:\mongo\bin\mongod --dbpath=d:\mongozc\data --port 30004 --replSet calisDms/192.168.2.196:30001
3.2:d:\mongo\bin\mongo 192.168.2.196:30001/admin
3.3:rs.addArb("192.168.2.196:30004")
3.4:查看集群中服务器状态:rs.status();stateStr为服务状态:(PRIMARY:主服务,SECONDARY:从服务,ARBITER:仲裁服务)
第三部分 附录
一、分片介绍
mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。
下面我对这张图解释一下:
人脸:代表客户端。
mongos:首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在"config服务器"上。
mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod;如果分片了,我们则需要连接mongos服务器。
二、试验配置说明
本部分让读者更清楚分片的意义(具体生产环境配置,请参见三:生产环境下配置说明)。
首先我们准备4个mongodb程序,我这里是均摊在C,D,E,F盘上,当然你也可以做多个文件夹的形式。
第一步 开启config服务器
先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立2222端口。
第二步 开启mongos服务器
这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。
第三步 启动mongod服务器
对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。
第四步 服务配置
<1> 先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将4444,5555的mongod交给mongos,添加分片也就是addshard()。
这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。
<2>片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步
①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。
②:指定集合中分片的片键,这里我就指定为person.name字段。
第五步 查看效果
好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。
这里主要看三点信息:
① shards: 我们清楚的看到已经别分为两个片了,shard0000和shard0001。
② databases: 这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。
③ chunks: 这个很有意思,我们发现集合被砍成四段:
无穷小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——无穷大。
分区情况为:3:1,从后面的 on shardXXXX也能看得出。
参考了《mongdb权威指南》