如果不了解 MongoDB Sharded Cluster 原理,请先阅读
关于 sharding 迁移,会分3个部分来介绍,本文为第三部分
在前面2个部分里,介绍了 MongoDB sharding 的迁移策略以及 chunk 迁移的步骤,本文将主要介绍如何管理 Balancer,以更好的为业务服务。
可能需要关闭 Balancer 场景包括
查看 Balancer 当前状态
sh.getBalancerState()
关闭 Balancer
sh.stopBalancer()
开启 Balancer
sh.startBalancer()
说明:本文中提到的命令,都是连接到 sharding cluster 的 mongos 上执行
默认情况下,Balancer 会针对所有分片的集合做负载均衡,如果针对某些特殊集合,不想 Balancer 自动去迁移数据,可以仅针对该集合关闭。
针对 students.grades 集合关闭 Balancer
sh.disableBalancing("students.grades")
针对 students.grades 集合开启 Balancer
sh.enableBalancing("students.grades")
为了尽量避免 chunk 迁移影响业务,可以将 Balancer 设置为只在某个时间窗口内工作,避开业务高峰期,如下命令设置 Balancer 只在凌晨2:00 – 6:00 工作。
moveChunk 允许用户自定义迁移数据时,数据写到目标上的安全级别 (自由的在可靠性和迁移效率间做选择),通过writeConcern 的方式来指定。
用户可以修改_secondaryThrottle
以及 writeConcern
参数,这2个参数需要组合起来使用,意思是如果_secondaryThrottle
为 true,则使用 writeConcern
选项来指定迁移时写数据的策略;如果_secondaryThrottle
为 false,则使用{w: 1}, 如下命令将 writeConcern 设置为 {w: majority}。
如果没有设置,则默认使用 {w: 2} ,要求至少写到目标2个节点(若目标 shard 是单节点,则退化为{w: 1})。
数据迁移完后,源 shard 需要将迁移完的 chunk 移除,默认情况下,源 shard 会将删除 chunk 的任务加到一个后台队列,在后台异步删除,然后 Balancer 就可以启动下一次的 chunk 迁移。用户可以设置 _waitForDelete 为 true(默认为 false),让源 shard 在 chunk 迁移完后同步删除 chunk 数据。
MognoDB sharding 默认 chunkSize 为64MB,默认设置在绝大多数场景都是合适的,在某些场景下,用户可能需要修改 chunkSize 配置,具体参考关于MongoDB Sharding,你应该知道的 文章里『关于jumbo chunk及 chunk size』部分,这里不再赘述。
如下命令将 chunkSize 修改为 100MB
注意事项
转载自:https://blog.csdn.net/wangkai_123456/article/details/53353193
原文:https://www.cnblogs.com/xibuhaohao/p/13156722.html