天天看点

MongoDB sharding迁移那些事(三)

MongoDB sharding迁移那些事(三)

如果不了解 mongodb sharded cluster 原理,请先阅读

<a href="https://yq.aliyun.com/articles/32434?spm=5176.8091938.0.0.5cqblw">mongodb sharded cluster架构原理</a>

<a href="https://yq.aliyun.com/articles/60096?spm=5176.8091938.0.0.ia5ha5">关于mongodb sharding,你应该知道的</a>

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

<a href="https://yq.aliyun.com/articles/60881?spm=5176.8091938.0.0.1448o4">负载均衡及迁移策略</a>

<a href="https://yq.aliyun.com/articles/60935?spm=5176.8091938.0.0.k1p02g">chunk 迁移流程</a>

balancer 运维管理

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

可能需要关闭 balancer 场景包括

对 sharded cluster 进行备份时,需要先关闭 balancer,避免备份出来 shard、config server 数据出现不一致。

避免 chunk 迁移对线上服务造成影响

查看 balancer 当前状态

关闭 balancer

开启 balancer

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

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

针对 students.grades 集合关闭 balancer

针对 students.grades 集合开启 balancer

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

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

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

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

如下命令将 chunksize 修改为 100mb

注意事项

将 chunksize 改大,原来的小 chunk 不会自动进行合并,只有新的插入或更新操作才能导致 chunk 大小逐步增大。

chunksize 可修改的范围为[1mb, 1024mb]之间。

<a href="https://docs.mongodb.com/manual/tutorial/manage-sharded-cluster-balancer/#disable-balancing-on-a-collection">manage sharded cluster balancer</a>

<a href="https://docs.mongodb.com/manual/tutorial/clear-jumbo-flag/">jumbo chunk</a>

<a href="https://www.aliyun.com/product/mongodb">mongodb cloud service</a>