当前位置: 首页 > news >正文

MongoDB sharding迁移那些事(三)

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

  • MongoDB Sharded cluster架构原理
  • 关于MongoDB Sharding,你应该知道的

关于 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]之间。

参考资料

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

相关文章:

  • [转]Oracle 阳历转农历
  • V-rep学习笔记:转动关节1
  • Bootstrap--全局CSS样式之栅格系统
  • 使用Percona XtraBackup热备和恢复MySQL
  • 事件的截获
  • Hibernate中如何完成持久化类和数据库映射文件
  • 如何做好一名实习生
  • 事件分发时候的onTouchEvent,onInterceptTouchEvent,dispatchTouchEvent调用顺序
  • PetaPoco - 轻量级高性能的ORM框架(支持.NET Core)
  • jQuery基础:mouseeter( ) 与 mouseover( ) 区别
  • 为什么「教学相长」?
  • linux内核(kernel)版本号的意义
  • a+=b 是什么意思?
  • 模拟。。。 Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) C
  • 端口聚合配置
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • hadoop集群管理系统搭建规划说明
  • HashMap ConcurrentHashMap
  • iOS 颜色设置看我就够了
  • Java读取Properties文件的六种方法
  • JS笔记四:作用域、变量(函数)提升
  • leetcode98. Validate Binary Search Tree
  • Less 日常用法
  • session共享问题解决方案
  • Shell编程
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 坑!为什么View.startAnimation不起作用?
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 爬虫模拟登陆 SegmentFault
  • 前端
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • nb
  • No resource identifier found for attribute,RxJava之zip操作符
  • Linux权限管理(week1_day5)--技术流ken
  • 函数计算新功能-----支持C#函数
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Spring Boot 分片上传文件
  • #QT项目实战(天气预报)
  • (03)光刻——半导体电路的绘制
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (33)STM32——485实验笔记
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (javascript)再说document.body.scrollTop的使用问题
  • (待修改)PyG安装步骤
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (万字长文)Spring的核心知识尽揽其中
  • (原)本想说脏话,奈何已放下
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .dwp和.webpart的区别
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core webapi 大文件上传到wwwroot文件夹