mongoDB——split&balance操作

来源:互联网 发布:怎么编程游戏知乎 编辑:程序博客网 时间:2024/06/16 12:27

split&balance整体流程

  正如三国中说的,分久必合合久必分、mongoDB数据库也是处于分分合合的动态平衡中。但这里所谓的“合”,只是针对shard所属的chunk块而言的。
  
  split&balance处理示意图:

处理流程

①、发送write请求。
②、数据写之前,检测到chunk块的大小超过了预设值(默认是64MB,可变动),进行split
③、chunk数据信息发生变化,更新config server中的metadata信息
④、由于shard中chunk的个数引发数据不均衡,经过判断,chunk块向相邻的shard中做copy
⑤、由于chunk块位置信息发生变化,再次更新config server中的metadata信息
⑥、删除copy源的chunk块
⑦、反馈write结果
⑧、传送
➈、客户端显示写成功信息

这里为了描述整个流程,特意串行处理了,实际上,逻辑处理时,write操作引发的split跟balance是不同的线程并行去处理的,大家不要误解。


Split

split示意图如下所示:

处理流程:
  1. chunk的size默认是64MB,可变更的。
  2. insert/update操作会导致超出chunk的预设大小。
  3. mongos进程一直开启,检测到后,会将目标chunk分裂成2个等大的新的chunk1和chunk2.
  4. 分裂成功后,更新config server中metadata的数据。


Balance

示意图如下所示:

处理流程:
         #mongos检测到整个集群中chunk块的数据分布不均衡
  1. mongos将moveChunk命令发送到Shard B中
  2. 内部命令moveChunk在Shard B中执行
  3. Shard C从Shard B中获取需要移动的chunk块
  4. 获取后,同期化所有的变动
  5. 一同期化,立马更新config server中的metadata信息
  6. chunk的copy成功后,删除Shard B中copy元的chunk块
0 0
原创粉丝点击