更改日志集合中的MongoDB块迁移步骤

时间:2013-08-07 12:20:20

标签: mongodb sharding

有人可以澄清" moveChunk.from"的所有步骤和" moveChunk.to"。我想知道在这些步骤中执行了哪些操作(我猜这些步骤的值代表时间ms,这是步骤所花费的)。这将帮助我推导出在块迁移过程中发生的任何最慢的步骤。

{
    "_id" : "bdvlpabhishekk-2013-07-20T17:46:28-51eaccf40c5c5c12e0e451d5",
    "server" : "bdvlpabhishekk",
    "clientAddr" : "127.0.0.1:50933",
    "time" : ISODate("2013-07-20T17:46:28.589Z"),
    "what" : "moveChunk.from",
    "ns" : "test.test",
    "details" : {
        "min" : {
            "key1" : 151110
        },
        "max" : {
            "key1" : 171315
        },
        "step1 of 6" : 0,
        "step2 of 6" : 1,
        "step3 of 6" : 60,
        "step4 of 6" : 2067,
        "step5 of 6" : 7,
        "step6 of 6" : 0
    }
}


{
    "_id" : "bdvlpabhishekk-2013-07-20T17:46:31-51eaccf7d6a98a5663942b06",
    "server" : "bdvlpabhishekk",
    "clientAddr" : ":27017",
    "time" : ISODate("2013-07-20T17:46:31.671Z"),
    "what" : "moveChunk.to",
    "ns" : "test.test",
    "details" : {
        "min" : {
            "key1" : 171315
        },
        "max" : {
            "key1" : 192199
        },
        "step1 of 5" : 0,
        "step2 of 5" : 0,
        "step3 of 5" : 1712,
        "step4 of 5" : 0,
        "step5 of 5" : 344
    }
}

2 个答案:

答案 0 :(得分:1)

所有这些步骤都在“M202:MONGODB高级部署和操作”课程中进行了解释,该课程可在线免费获取(由于多个已发布网址的stackoverflow限制,我无法在此处发布此链接,只是尝试在谷歌找到课程

本课程的相关视频有:Anatomy of a migration overviewAnatomy of a migration deep dive

解释如下。

所有时间值都以毫秒为单位。 假设F是“moveChunk.from”而T是“moveChunk.to”。步骤是F1..F6和T1..T5。步骤顺序执行F1,F2,F3,F4:{T1,T2,T3,T4,T5},F5,F6。步骤F4包括{T1..T5},F4的时间是T1..T5的总和(但没有完全匹配)。

  1. F1 - mongos将'moveChunk'命令发送给F(要迁移的分片的主要部分)
  2. F2 - 完整检查命令
  3. F3 - F将命令发送给T(从我这里读取这个块)
  4. F4,T1..T3 - 转移开始,T执行健全性检查,索引检查等
  5. F4,T4 - 赶上后续操作(如果在传输过程中有插入块,将更新从F发送到T)
  6. F4,T5 - 稳定状态(更改写入主日志)
  7. F5 - 即将提交有关新块位置(关键部分)的服务器更改
  8. F6 - 清理

答案 1 :(得分:0)

所有块迁移都使用以下过程:

  1. balancer进程将moveChunk命令发送到源分片。
  2. 源使用内部moveChunk命令启动移动。在迁移过程中,对块路由到源分片的操作。源分片负责块的传入写操作。
  3. 目标分片开始请求块中的文档并开始接收数据副本。
  4. 在块中收到最终文档后,目标分片会启动同步过程,以确保它对迁移期间发生的迁移文档进行了更改。
  5. 完全同步后,目标分片将连接到配置数据库,并使用新块的位置更新群集元数据。
  6. 目标分片完成元数据更新后,一旦块上没有打开的游标,源分片将删除其文档副本。
  7. 取自this