简介
所谓分片,指的就是把数据拆分,将其分散到不一样机器上的过程。MongoDB支持自动
分片,对应用而言,好像始终和一个单机的服务器交互同样。
分片和复制
复制是让多台服务器拥有相同的数据副本,而分片是每一个分片都拥有整个数据集的
一个子集,且相互是不一样的数据,多个分片的数据合起来构成整个数据集。
Mongos
用来执行客户端访问集群数据的路由,它维护着一个内容列表,记录了每一个分片包
含的数据,应用程序只要链接上它,就跟操做单台服务器同样。
配置服务器
配置服务器就是普通的mongod服务器,保存整个集群和分片的元数据:集群中有哪
些分片,分片的是哪些集合,以及数据块的分布。它极其重要,必须启用日志功能。
在大型的集群中,建议配置3台配置服务器,就足够用了。启动配置服务器的方式:
1:先建立几个存放数据的文件夹,好比在前面的dbs下面建立confdb文件夹,而后在confdb下
面建立confdb1,confdb2,confdb3文件夹;
同理在前面的logs下面建立conflogs文件夹数据库
2:而后分别启动这三个配置服务器,使用—configsvr指明是配置服务器,以下:服务器
./mongod --configsvr --dbpath ../dbs/confdb/confdb1 --logpath ../logs/conflog/conflog1 --fork --port 30001 ./mongod --configsvr --dbpath ../dbs/confdb/confdb2 --logpath ../logs/conflog/conflog2 --fork --port 30002 ./mongod --configsvr --dbpath ../dbs/confdb/confdb3 --logpath ../logs/conflog/conflog3 --fork --port 30003
3:--configsvr默认的端口为27019,默认的数据目录为/data/configdb,能够使用--dbpath
和--port本身定义。
4:注意不要使用--replSet选项,配置服务器不是副本集成员。Mongos会向全部的3台配置服
务器发送写请求,并确保3台服务器拥有相同的数据。日志
启动mongos进程
1:code
./mongos --configdb localhost:30001,localhost:30002,localhost:30003 --logpath ../logs/conflog/mongoslog --fork
2:能够启动任意多个mongos,一般是一个应用服务器使用一个mongos,也就是说mongos一般
与应用服务器运行在一个机器上
3:mongos的默认端口是27017,能够用chunkSize来指定块的大小,默认是200M索引
将副本集转换成为分片
1:若是没有副本集,按照前面讲的建立并初始化一个;若是有一个副本集,就打开相应的服
务器,把副本集运行起来进程
2:先链接到mongos use admin 也就是切换到使用admin的数据库路由
./mongo localhost:27017 use admin
3:而后链接到mongos,把副本集转换成为分片,示例以下:io
sh.addShard("myrepl/127.0.0.1:20001,127.0.0.1:20002");
不用把全部副本集的成员都写出来,mongos会自动检查整个副本集。副本集的名称
myrepl就用做了分片的名称。
4:使用sh.status();察看状态,会发现整个副本集里面的服务都加入进来了。
5:注意:添加分片事后,客户端应该链接mongos进行操做,而不是链接副本集了。
6:也能够建立单mongod服务器的分片,但不建议在生产环境中使用
7:至此一个分片就建立好了,而后能够重复步骤,建立一个新的副本集,加入到分片中来集群
数据分片
须要明确指定分片的数据库和集合,MongoDB才会对数据进行自动分片。
1:对数据库启用分片配置
sh.enableSharding(“数据库名”);
2:而后指定分片的集合,还有分片的键,若是对已经存在的集合进行分片,那么指定的这个
分片键上必须有索引;若是集合不存在,mongos会自动在分片键上建立索引。例如:
sh.shardCollection("rep1.users",{"userId":1});