当前位置:Gxlcms > 数据库问题 > MongoDB Cluster 数据平衡优化

MongoDB Cluster 数据平衡优化

时间:2021-07-01 10:21:17 帮助过:34人阅读

关闭 Balancer

sh.stopBalancer()

开启 Balancer

sh.startBalancer()

说明:本文中提到的命令,都是连接到 sharding cluster 的 mongos 上执行

针对某个集合关闭 Balancer

默认情况下,Balancer 会针对所有分片的集合做负载均衡,如果针对某些特殊集合,不想 Balancer 自动去迁移数据,可以仅针对该集合关闭。

针对 students.grades 集合关闭 Balancer

sh.disableBalancing("students.grades")

针对 students.grades 集合开启 Balancer

sh.enableBalancing("students.grades")

设置 Balancer 时间窗口

为了尽量避免 chunk 迁移影响业务,可以将 Balancer 设置为只在某个时间窗口内工作,避开业务高峰期,如下命令设置 Balancer 只在凌晨2:00 – 6:00 工作。

  1.   use config
  2.   db.settings.update(
  3.   { _id: "balancer" },
  4.   { $set: { activeWindow : { start : "02:00", stop : "06:00" } } },
  5.   { upsert: true }
  6.   )

设置迁移选项

moveChunk 允许用户自定义迁移数据时,数据写到目标上的安全级别 (自由的在可靠性和迁移效率间做选择),通过writeConcern 的方式来指定。

用户可以修改_secondaryThrottle 以及 writeConcern 参数,这2个参数需要组合起来使用,意思是如果_secondaryThrottle为 true,则使用 writeConcern 选项来指定迁移时写数据的策略;如果_secondaryThrottle为 false,则使用{w: 1}, 如下命令将 writeConcern 设置为 {w: majority}。

  1.   use config
  2.   db.settings.update(
  3.   { "_id" : "balancer" },
  4.   { $set : { "_secondaryThrottle" : true ,
  5.   "writeConcern": { "w": "majority" } } },
  6.   { upsert : true }
  7.   )

如果没有设置,则默认使用 {w: 2} ,要求至少写到目标2个节点(若目标 shard 是单节点,则退化为{w: 1})。

数据迁移完后,源 shard 需要将迁移完的 chunk 移除,默认情况下,源 shard 会将删除 chunk 的任务加到一个后台队列,在后台异步删除,然后 Balancer 就可以启动下一次的 chunk 迁移。用户可以设置 _waitForDelete 为 true(默认为 false),让源 shard 在 chunk 迁移完后同步删除 chunk 数据。

  1.   use config
  2.   db.settings.update(
  3.   { "_id" : "balancer" },
  4.   { $set : { "_waitForDelete" : true } },
  5.   { upsert : true }
  6.   )

设置 chunkSize

MognoDB sharding 默认 chunkSize 为64MB,默认设置在绝大多数场景都是合适的,在某些场景下,用户可能需要修改 chunkSize 配置,具体参考关于MongoDB Sharding,你应该知道的 文章里『关于jumbo chunk及 chunk size』部分,这里不再赘述。

如下命令将 chunkSize 修改为 100MB

  1.   use config
  2.   db.settings.save( { _id:"chunksize", value: 100 } )

注意事项

  1. 将 chunkSize 改小,后台需要一定时间来对原来 chunk 进行分裂,将大小降低至新 chunkSize 以下。(如果是jumbo chunk,则无法分裂)
  2. 将 chunkSize 改大,原来的小 chunk 不会自动进行合并,只有新的插入或更新操作才能导致 chunk 大小逐步增大。
  3. chunkSize 可修改的范围为[1MB, 1024MB]之间。

参考资料

  • Manage Sharded Cluster Balancer
  • jumbo chunk
  • MongoDB Cloud Service

转载自:https://blog.csdn.net/wangkai_123456/article/details/53353193

MongoDB Cluster 数据平衡优化

标签:active   单节点   注意   attribute   迁移   分片   keyword   图片   dash   

人气教程排行