ITPub博客

首页 > 数据库 > NoSQL > MongoDB分片

MongoDB分片

原创 NoSQL 作者:壹頁書 时间:2014-06-15 12:13:26 0 删除 编辑

如果数据量已经突破了单台服务器的处理能力。可以考虑使用分片。

分片的概念类似于数据库的分区表。不同的是数据库的分区表只是将一个segment分为多个segment存储,而MongoDB的分片,则是将每一个Segment划分到一个单独的服务器处理。和传统的数据库一样,分片需要依据一个索引列,而这个索引列一定要应用在查询中,否则不能应用分区消除的特性,这样会在每一个分区中进行查询。


MongoDB分片的组件有mongos路由服务器,配置服务器和分片服务器。而分片服务器一般作为逻辑服务器存在,实际应用中,它应该是一个副本集集群。

实验使用三台虚拟机,搭建一个具有三个分片的高可用集群。


每个虚拟机启动5个MongoDB实例。相关目录和配置文件如下:


每台虚拟机端口分配如下:

配置服务器                3000    
Mongos路由服务器    4000
分片服务器1              5000
分片服务器2              6000
分片服务器3              7000

配置服务器参数文件内容如下:
configsvr    =true
dbpath     =/home/lihuilin/mongoconfig/
port        =3000
smallfiles    =true

路由服务器参数文件内容如下:
port         =4000  
logpath    =/home/lihuilin/mongos/mongos.log

分片服务器参数文件内容如下:
dbpath        =/home/lihuilin/mongoshard1
smallfiles    =true
replSet        =shard1
profile        =1
port        =5000
分片2和分片3 修改相应的数据

首先,需要启动配置服务器。
三台配置服务器启动之后,启动mongos服务器。

然后启动三个副本集,

最后登录mongos服务器,增加分片服务器。

查看集群分片状态。


这个时候,分片的环境就已经搭建完成了。

但是,MongoDB默认不会对数据进行分片,他会将数据存储在一个分片中。除非指定了分片的数据库和集合。


可以看到MSG数据库存放在了分片2的副本集上。


设定需要分片的数据库。


设置需要分片的集合和键。如果该键没有索引,则报错如下:


在分片的键上创建索引


增加索引之后,设置分片成功


分片的键选择非常重要,一旦分片,结构就固定了。

如果后续发现用这个键不合适,就会非常非常的麻烦。

下图是采用rcvrID作为键的分片情况。
具体使用哪个键作为分片的依据,确实需要在业务层次想清楚。
和数据库分区表一样,如果业务没有考虑清楚,就创建了分区表。
导致每次查询都不能应用分区消除,结果就是全分区扫描,性能没有提升,反而下降。





路由服务器故障处理:

Mongos路由服务器故障,应该是最好解决的一种故障。因为配置信息存放在配置服务器,数据存放在分片服务器,所以只需要重新启动mongodb实例连接配置服务器即可。

而前端JAVA程序中记录着所有mongos的信息,他发现mongos不能连接,会自动寻找pings最先返回的mongos进行连接。所以对于JAVA应用,mongos故障是透明的。

分片服务器故障处理:

由于分片由副本集组成,所以故障处理同副本集的成员故障处理。


配置服务器故障处理:

配置服务器存放着集群的分片信息。一旦所有的配置服务器都故障,则集群基本上就彻底挂了。所以配置服务器一定要保证有3个实例分布在不同的机器(机房)上。

在任何一个配置服务器失效的时候,Mongodb集群的元数据都会变成为只读了。集群系统继续运行,但是chunks在一个分片中将会成为不可以被拆分或者是不可以跨分片进行迁移。对于大多数使用场景,这个不会导致问题,应为改变Chunk元数据进行的并不频繁。

另外,使宕机的Config Server在一个合理的时间周期(一天)内恢复是相当重要的,这样可以避免分片由于缺乏迁移而变得负载不均衡


恢复宕机的配置服务器,可以找到一个新的服务器,使用相同的IP或者主机名称。停止另外一个可用的配置服务器(或者上锁拷贝文件),将他所有的文件同步到新的服务器上。然后启动这个新的配置服务器。


参考:
http://blog.itpub.net/29254281/viewspace-1176553/
http://www.lanceyan.com/tech/mongodb/mongodb_repset1.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1183315/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Linux xargs 命令
下一篇: 我的软件实验室
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339926