MongoDB分片到复制集改造实践

  • 时间:
  • 浏览:37
  • 来源:uu快3新平台_uu快3诀窍_讨论群

最后打开均衡器,这就说 大伙 庆幸的发现,均衡器又始于英语 英语 迁移chunk了。

3)群克隆集做一次迁移,迁移到容器上

就说 片键设计不合理很容易会导致 分析而且 chunk超出上方大小,从前均衡器就无法移动你这人块儿。执行sh.status(true)还不都能能 想看 jumbo chunk,也还不都能能 通过查看config.chunks来获取jumbo chunk的信息:

mongos以及shard的日志上方也还不都能能 想看 相关迁移记录。

                                           

大伙 取有一有四个 min._id和max._id的共要上方值来进行split。

就说 业务选取了合理的片键,removeShard会顺利完成,但在大伙 业务中仅仅拿_id进行了hash分片,在removeShard过程中大伙 遇到了jumbo chunk,导致 分析无法迁移

当然,就说 业务数据量有点儿少,而且可接受一定程度上的业务停服,那也还不都能能 选取逻辑导出导入的法律法律法律依据。尽管你这人法律法律法律依据最为简便,但因影响服务时间过长,就说 很少会在生产环境中使用。

使用moveChunk命令移动块儿到指定的shard:

简单描述业务背景,起初业务评估需求有点儿高,而且大伙 采用了分片架构,设计了四个shard,通过_id进行hash分片,但就说 业务远远没了达到预期目标,再就说 业务没了萎缩,到现在分片集群反而成为了业务负担。为了减少其成本,业务决定将分片替换为群克隆集,一块儿将物理机部署改为容器化。而且,大伙 提供了如下迁移步骤:

当然迁移过程中就说 一定会经常出现jumbo chunk,解法就说 重复上方splitChunk操作

遇到jumbo chunk并非慌张,处里法律法律法律依据必然是有的。首先,大伙 不要都能能想到的法律法律法律依据是还不都能能 直接给手动移动?官方也的确提供了moveChunk功能参考文档

移动块儿不可行大伙 还有一招还不都能能 尝试,那就说 splitChunk,官方文档

就说 ,大伙 就还不都能能 进行removeShard了,其操作说明官方文档也非常删剪。

通过该法律法律法律依据我成功remove了有一有四个 shard,只留下primary shard,而且通知业务服务从mongos访问改为群克隆集法律法律法律依据,上方物理机改容器你这人没了本文范围内,就说 不再往下去讨论。

待迁移完shard上所有chunk,执行removeShard会返回成功信息。

我就针对生产级业务环境需求提供最小影响服务将分片改造为群克隆集(含减分片场景)的处里方案。

这就说 大伙 再去查config.chunks,就说 看只有该chunk信息。以此类推,而且 chunk都split下,sh.status还不都能能 想看 要删除shard上的chunk数量翻倍

                                           

首先,我提供这人生活可选方案:

1)就说 有同步工具支持,还不都能能 选取从分片全量+增量的法律法律法律依据同步到群克隆集,而且选个时间点切换;

思路就说 拆分jumbo chunk为更小的块儿,而且通过均衡器来自动迁移。拿有一有四个 jumbo chunk来举例说明:

我这里是moveChunk失败了,导致 分析是MongoDB 3.4版本手动moveChunk命令做了个限制。但失败归失败,就说 而且 版本中使用该功能时,务必注意加在_secondaryThrottle,加在会强制要求迁移过程间歇进行,每迁移完而且 数据,需听候集群中大多数分片成功完成数据群克隆后再进入下一次迁移。尽管快一点 迁移的过程,但一块儿减缓了对系统性能的影响。这在生产环境中还是尤为重要。当然,该选项仅仅适用于群克隆集shard。

Each database in a sharded cluster has a primary shard that holds all the un-sharded collections for that database. Each database has its own primary shard. The primary shard has no relation to the primary in a replica set.

首先保证均衡器是开启的,就说 在draining数据的过程中均衡器负责将该shard上方的数据迁移至其余的shard。

本文,我主要讲第二种方案,其核心技术点为removeShard,但经验我想 知道们,你这人操作往往不要没了顺利完成,大伙 就说 会遇到primary shard提示,也就说 会遇到jumbo chunk无法迁移的问题报告 。下面我拿有一有四个 线上正式服务的案例来删剪说明。

那为那此要提前确认primary shard,就说 就说 是primary shard就无法remove,会有如下提示:

MongoDB不允许移动大于chunksize的chunk,就说 大伙 还不都能能 临时将chunk大小调大,法律法律法律依据为:

jumbo chunk怎样才能产生呢?每个分片一定会有最大chunk的大小,保地处config.settings上方:

这就说 就说 该shard为我想 删除的对象,没了不都能能 先删除就说 移动那此对象,删除不要解释,正式环境就说 允许你操作,下面看下movePrimary官方文档

                                           

2)业务从分片访问法律法律法律依据改为群克隆集访问法律法律法律依据

2)从集群中减分片(removeShard),最后只保留有一有四个 shard(群克隆集),业务接入从mongos改为群克隆集

draining数据过程非常缓慢,还不都能能 继续通过执行removeShard命令来查看当前情况表:

生产线上使用 MongoDB Sharidng 的场景非常多,但就说 业务初期评估只有位就说 业务发展不符合预期,为了管理起来更方便,就说 不都能能 将 Sharding 改造为 群克隆集。

最后,就说 是分片场景,请务必重视: 设计合理片键设计合理的片键设计合理片键念之再三,铭之肺腑。

进入正题,目前大伙 系统有有一有四个 shard,第一步要提前确认primary shard,何为primary shard官方说明

执行完removeShard,大伙 再通过sh.status查看的就说 还不都能能 想看 指定shard正在draining数据

简单理解就说 没了进行分片的集合所在库的shard。那怎样才能确认,虽然也简单,笨而且 法律法律法律依据就说 连接每个分片show collection查看即可。也还不都能能 执行sh.status查看

提供这人生活法律法律法律依据来定位移动的对象,find后接文档查询query条件,bound则提供要移动块儿的边界,更为精准。

从上还不都能能 想看 ,anav_team_2上方地处7个jumbo chunk

1)目前有有一有四个 shard,remove有一有四个 shard

另外也还不都能能 通过sh.status命令想看 被删除shard上的chunk数量不断减少,其余shard的chunk数量增多。