我有一个 mongo 分片集群和一个 mongos 实例。这些服务器在 MongoDB 3.4.0 上运行。当我使用 mongo shell 3.4.0 连接到 mongos 时,我得到以下输出sh.isBalancerRunning()
,
mongos> sh.isBalancerRunning()
false
但是当我使用 mongo shell 3.2.13 时得到了不同的结果:
mongos> sh.isBalancerRunning()
true
这是mongo版本之间不兼容的东西吗?如果是,为什么其他命令可以正常工作而这个命令不能?
不同之处在于 3.4 平衡工作由主配置服务器完成,而 3.2 由其中一个 mongos 服务完成。
为了防止“较旧的”(<3.4)mongos 服务开始平衡工作,配置服务器(>=3.4)将“锁定”文档生成到本地集合,“声明”其中一个 mongos 服务设置了“平衡锁”。
该文档不会阻止 (>=3.4) 配置服务器进行平衡。这就是为什么老 mongos “报告”总是在进行平衡的原因!