目录html
第一部分 副本集mongodb
第一步 副本集部署数据库
第三步 启动仲裁服务器spa
第二部分 分片orm
第一步 开启config服务器server
图例说明:本例用三台机器做为示例,他们的ip分别为192.168.2.19六、192.168.2.19七、192.168.2.198, 每台服务器上分别存放着config服务器(端口为:20001)、 mongos服务器(端口为:20000)、mongod服务器(端口为:30001)、副本集服务器(端口:30002)。
在MongoDB里面存在另外一种集群,就是分片技术,跟sql server的表分区相似,咱们知道当数据量达到T级别的时候,咱们的磁盘,内存就吃不消了,针对这样的场景咱们该如何应对。
分别开启三台机器的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服务,各自端口都为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服务,各自端口都为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.19六、192.168.2.19七、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盘上,固然你也能够作多个文件夹的形式。
先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所固然首先开启它,我这里就创建2222端口。
这里要注意的是咱们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。
对分片来讲,也就是要添加片了,这里开启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权威指南》