MongoDB sharding迁移那些事(三)

简介: 如果不了解 MongoDB Sharded Cluster 原理,请先阅读 MongoDB Sharded cluster架构原理 关于MongoDB Sharding,你应该知道的 关于 sharding 迁移,会分3个部分来介绍,本文为第三部分 负载均衡及迁移策略 chunk 迁移流程 Balancer 运维管理 在前面2个部分里,介绍了 MongoDB sharding 的迁移策略以及 chunk 迁移的步骤,本文将主要介绍如何管理 Balancer,以更好的为业务服务。

如果不了解 MongoDB Sharded Cluster 原理,请先阅读

关于 sharding 迁移,会分3个部分来介绍,本文为第三部分

  1. 负载均衡及迁移策略
  2. chunk 迁移流程
  3. Balancer 运维管理

在前面2个部分里,介绍了 MongoDB sharding 的迁移策略以及 chunk 迁移的步骤,本文将主要介绍如何管理 Balancer,以更好的为业务服务。

关闭 Balancer

可能需要关闭 Balancer 场景包括

  • 对 Sharded cluster 进行备份时,需要先关闭 Balancer,避免备份出来 shard、config server 数据出现不一致。
  • 避免 chunk 迁移对线上服务造成影响

查看 Balancer 当前状态

sh.getBalancerState()

关闭 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 工作。

use config
db.settings.update(
   { _id: "balancer" },
   { $set: { activeWindow : { start : "02", stop : "06" } } },
   { upsert: true }
)

设置迁移选项

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

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

use config
db.settings.update(
   { "_id" : "balancer" },
   { $set : { "_secondaryThrottle" : true ,
              "writeConcern": { "w": "majority" } } },
   { upsert : true }
)

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

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

use config
db.settings.update(
   { "_id" : "balancer" },
   { $set : { "_waitForDelete" : true } },
   { upsert : true }
)

设置 chunkSize

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

如下命令将 chunkSize 修改为 100MB

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

注意事项

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

参考资料

相关文章
|
人工智能 JSON 数据格式
[AI CrewAI] 你来当老板,组建AI团队,协作AI Agent完成任务
[AI CrewAI] 你来当老板,组建AI团队,协作AI Agent完成任务
1294 1
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园二手交易平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园二手交易平台的详细设计和实现(源码+lw+部署文档+讲解等)
321 3
|
存储 Linux 开发工具
简述利用samba实现windows和linux之间文件同步
简述利用samba实现windows和linux之间文件同步
985 0
|
SQL 关系型数据库 MySQL
MySQL 无法远程连接的解决办法
情况 1——云服务器控制台防火墙未开启 情况 2——未设置远程用户
2164 0
|
存储 缓存 资源调度
[Node] Node.js 包管理工具详解npm yarn cnpm npx pnpm
[Node] Node.js 包管理工具详解npm yarn cnpm npx pnpm
1366 0
|
Python
python自动化系列之python操作pptx文件
python自动化系列之python操作pptx文件
1467 0
python自动化系列之python操作pptx文件
|
安全 Linux 测试技术
漏洞利用和权限提升
漏洞利用和权限提升
447 0
|
8天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
9天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1877 15

热门文章

最新文章

相关产品

  • 云数据库 MongoDB 版