mongodb的sharding

来源:互联网 发布:西门子博途软件 编辑:程序博客网 时间:2024/05/21 10:43

         一开始我们使用的是5台机器来搭建mongodb的sharding的,一台作为config,gateway和客户端,4台作为server。这种情况下系统分布非常均匀。由于系统数据增长的非常快,4台数据已经不能满足,决定增加3台server。使用db.runCommand( { addshard : "172.16.0.1:27017" } );命令很快的就增加了3台shading。

         我们的系统是每天会导入数据,每天采用一个新的collection来存放数据的。结果我第二天来的时候发现新的一天的数据全部集中在shard0000上,这样子整个系统的数据不是快了,而是更慢了。这样下去不行,要挨批了。只能拼命处理。找到所有的chunk,将chunk数比较的server上的chunk移动到chunk数比较少的server上。

         useconfig

         db.chunks.find({“ns”:”XXXX”})

         useadmin

         db.runCommand({moveChunk: "XXXX", find : { "ci" : "123456" }, to :"shard0001"})

         这样一条一条的命令来执行,把chunk分发到其他的server上,这个方法只能治标不能治本,只能是数据不均匀了之后来处理。而且chunk上数据量比较多的话,移动起来很慢,影响了系统的性能。Balance一直没有恢复,反正就是我增加了机器之后sharding死活不能balance了,google了一把也没有找到原因(mongodb是1.8.2版本)。

         每天手工处理也不行,只好写一个脚本,在建立collection,还没有插入数据的时候执行手工balance。手动建立chunk,手动将chunk移动到各个server上去。参见http://www.mongodb.org/display/DOCS/Splitting+Chunks

         db.runCommand({ split : "XXXX" , middle : { "ci" : "123456" } })

         db.runCommand({moveChunk: "XXXX", find : { "ci" : "123456" }, to :"shard0001"})

         目前只好采用这种土办法来自动balance了。


原创粉丝点击