MongoDB sharding迁移那些事(二)
《MongoDB sharding迁移那些事(二)》要点: 欢迎参与《MongoDB sharding迁移那些事(二)》讨论,分享您的想法,编程之家PHP学院为您提供专业教程。 如果不了解 MongoDB Sharded Cluster 原理,请先阅读(本文资料,都可在这查看:https://yq.aliyun.com/articles/60935)
关于 sharding 迁移,会分3个部门来介绍,本文为第二部门
moveChunk 命令 从MongoDB sharding迁移那些事(一) 我们了解到,Chunk 迁移可能是 Balancer 触发,也可能用户手动向 mongos 发送 我们先来近距离了解下mongos 上的 moveChunk 命令,如果是 Balancer 触发,其逻辑也跟 moveChunk的主要参数列表如下
归根结底就是要指定『迁移哪个集合的哪个 chunk』,『把这个 chunk 迁移到哪个 shard』,选择 chunk 时,可以通过 find 或 bound 2种方式来指定(两者只能选择一个),mongos 就能计算出要迁移哪个 chunk,并知道 chunk 所在的源 shard. mongos 接下来会构造根据上述参数,向源 shard 发送一个 moveChunk 命令(mongos 和 shard 都支持 迁移步调 Step1: mongos 发送 moveChunk 给源 shard mongos 接受到用户发送的迁移 chunk 命令,或者因负载均衡策略必要迁移 chunk,会构建一个 Step2:源 shard 通知目标 shard 开始同步 chunk数据 源 shard 收到 mongos 发送的 moveChunk 命令后,会向目标 shard 发送 Step3: 目标 shard 同步 chunk 数据到当地 目标 shard 接受到
目标 shard 清理脏数据 (如果有需要)
目标 shard 向源 shard 发送 源 shard 会赓续调用查询目标 shard 上的迁移状态,看是否为 STEADY 状态,如果已经是 STEADY 状态,就会停止源 shard 上的写操作(通过对集合加互斥写锁实现).接下来发送 目标 shard 的迁移线程不断向源 shard 发送 源 shard 收到 Step4:源 shard 更新 config server 元数据 数据迁移完成后,源 shard 就会向 config server 更新 chunk 对应的 shard 信息,同时也会更新 chunk 的版本信息,这样 mongos 发现当地版本更低就会主动的 reload 元数据,具体机制参考 MongoDB Sharded Cluster 路由策略. Step5:源 shard 删除 chunk 数据 chunk 迁移到目标 shard 后,源上的 chunk 就没有必要再保留了,源 shard 会将 chunk 数据删除,默认情况下源 shard 会将删除操作加入到队列,异步删除,如果 moveChunk 时,指定了 _waitForDelete 参数为 true,则同步删除完再返回. 总结 本文粗略的介绍了 chunk 迁移的主要流程,chunk 的迁移会受 Balancer 策略、chunkSize等很多因素影响,第三部门将会介绍迁移相关的运维管理,以便大家更好的管理 MongoDB Sharded Cluster. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |