时间:2021-05-24
背景
Part1:写在最前
我们在使用MongoDB sharding集群时,会使用如下命令来管理启停Balancer:
Part2:背景
开启balancer后,客户反馈前端应用写入缓慢,查询超时。因此我们尝试关闭balancer,来避免chunk迁移对集群性能带来的影响。
但是在调用sh.stopBalancer的时候,发现却停不下来,sh.stopBalancer会处于卡住的状态:
从上述报错能够看出,是由于目前balancer正在运行导致的,
Warning:警告 在3.4版本中,balancer运行在config server 的主节点上,在早期的版本中,balancer是运行在mongos上的。 当balancer进程处于活动状态时,config server副本集的主服务器通过修改config数据库的lock集合中的文档,来获取“平衡器锁”。 这个“平衡器锁”只能自己主动释放。
Part3:排查方法
我们调用sh.status()命令能够看到当前balancer已经关闭了,但是running还是yes,这说明有迁移正在运行。
我们查看发现migrations集合下为空,说明没有集合在迁移
我们查看locks集合下的信息,处于2状态的说明正持有锁
Warning:警告
locks集合中的why列告诉我们持有锁的原因,如果有正在迁移的文档,其状态应该是2,why中的原因会显示Migrating chunk(s) in collection db.collationname.
从3.4版本起,balancer的状态字段将始终为值2,以防止老版本的mongos实例执行平衡操作。 when字段指config server 成员成为主节点的时间。
解决办法
Part1:写在最前
sh.stopBalancer停不下来,常见的可能原因有以下几个:
Part2:解决办法
替换老版本的mongo客户端,使用3.4版本的客户端
Part3:原因分析
卡住的原因是由于客户端mongo是3.2版本,而config节点是3.4版本,3.2版本的mongos在执行stopBalancer()时,stopBalancer代码假定如果balancerStop命令没有找到,那么它会使用旧版本的逻辑,等待锁被释放。从3.4版本起,Balance进程从mongos移动之configer server的primary节点上。
总结
通过这个案例,我们能够了解到mongo客户端版本带来的问题,以及有哪些常见原因导致sh.stopBalancer停不下来。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Linux执行.sh文件,提示Nosuchfileordirectory的问题问题描述解决方法分析原因,可能因为我平台迁移碰到权限问题我们来进行权限转换1)在W
引言今天在教别人使用protobuf的时候,无意中发现了一个phpcli模式下的诡异问题,费了老半天的找到解决方法了,这里拿出来分享下。问题描述我们这边最先引入
大华电子秤不出纸的原因及解决方法如下: 1、电子秤的打印机卡纸。解决方法:如果是打印机卡纸,则将卡住的纸张拿开即可。 2、电子秤的纸卷或墨粉用完了。解决方法
每次启动MongoDB时总是会收到如下Uncleanshutdown提示,总结了一下出现该问题的原因及解决方法。提示如下:复制代码代码如下:**********
罗茨风机转不动的解决方法: 1、异物卡住。解决方法:需要清理腔体里面的异物,并检查叶轮之间的间隙。另检查异物落入的原因,避免故障再次发生。堵塞各部分间隙,造成