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



                                             第一部分 分片

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_数据库

图例说明:本例用三台机器作为示例,他们的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端口。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_python_02



                第二步 开启mongos服务器

这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_服务器_03



                第三步 启动mongod服务器

对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_服务器_04



                第四步 服务配置

<1> 先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将4444,5555的mongod交给mongos,添加分片也就是addshard()。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_MongoDB分片规则一般用什么_05

这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。

<2>片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步

①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。

②:指定集合中分片的片键,这里我就指定为person.name字段。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_数据库_06



                第五步 查看效果

好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。

MongoDB分片规则一般用什么 mongodb中的分片是什么意思_服务器_07

这里主要看三点信息:

① shards: 我们清楚的看到已经别分为两个片了,shard0000和shard0001。

② databases: 这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。

③ chunks: 这个很有意思,我们发现集合被砍成四段:

无穷小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——无穷大。

分区情况为:3:1,从后面的 on shardXXXX也能看得出。

参考了《mongdb权威指南》