MongoDB块迁移究竟是如何工作的?

时间:2016-04-30 07:13:51

标签: mongodb

在阅读了chunk-migration-procedure之后,我仍然有几个问题。

  1. 目标分片是否在开始之前完成传输块以将更新同步到传输期间出现的块?
  2. 目标分片如何确定它是完全同步的?如果在更新配置服务器上的元数据时块上的某些更新会怎样?

1 个答案:

答案 0 :(得分:0)

以下信息通常应该与MongoDB 3.2一样正确,但旧版(或更新版)可能存在一些实现差异。

  

1。目标分片是否在开始之前完成传输块以将更新同步到传输期间出现的块?

是的,这是第4步& chunk migration procedure中的5:

  1. 目标分片开始请求块中的文档并开始接收数据副本。

  2. 在块中收到最终文档后,目标分片会启动同步过程,以确保它对迁移期间发生的迁移文档进行了更改。

  3. A chunk表示特定分片中连续范围的分片键值,并且(与MongoDB 3.2一样)不会为该范围内的文档赋予任何磁盘上的位置。迁移过程开始跟踪从源分片迁移的块中的文档的所有更新,在目标分片上构建所需的索引,在块范围内的初始文档上复制,然后进入应用任何尚未更新的循环要传播到目标分片。

      

    2。目标分片如何确定它是完全同步的?

    在应用更新的周期中,迁移过程等待挂起的更新达到源和目标分片接近(或甚至完全)同步的状态。此时,迁移进入关键部分,其中阻止对源分片上的块集合的更新和读取,传输任何最终数据更改,以及存储在配置中的分片集群元数据使用新的块所有权信息更新服务器。

      

    如果在更新配置服务器上的元数据时对块有一些更新会怎样?

    迁移过程位于关键部分时,将阻止更新。当迁移成功退出临界区时,分片版本将递增,并且对于任何阻止的请求将返回StaleConfigException。陈旧的配置异常是mongos重新加载分片群集元数据的当前版本并将请求重新发送到正确分片的提示。

    如果您有兴趣了解更多(并且能够阅读C ++),MongoDB 3.2中的相关源路径为src/mongodb/s/