Eu tenho um cluster de fragmentos mongo e uma instância mongos. Esses servidores estão sendo executados no MongoDB 3.4.0. Quando uso o mongo shell 3.4.0 para me conectar aos mongos, obtive a saída abaixo de sh.isBalancerRunning()
,
mongos> sh.isBalancerRunning()
false
mas obtive um resultado diferente quando uso o mongo shell 3.2.13:
mongos> sh.isBalancerRunning()
true
Isso é algo não compatível entre as versões do mongo? Se sim, por que outros comandos funcionam bem, apenas este comando não?
A diferença é que o trabalho de balanceamento do 3.4 é feito pelo servidor de configuração primário e no 3.2 foi feito por um dos serviços do mongos.
Para evitar que serviços mongos "mais antigos" (<3.4) comecem a balancear o trabalho, o config server (>=3.4) faz um documento "lock" para a coleção local, o que "afirma" que um dos serviços mongos tem "balancing lock" definido.
Esse documento não impede (>=3.4) o servidor de configuração de fazer o balanceamento. Essa é a razão pela qual os mongos mais velhos "relatam" que há sempre um equilíbrio em andamento!