Estou executando o mongo 2.6.1 em um cluster de 3 estilhaços.
A configuração é: 3 nós de dados e 2 árbitros.
O único nó de dados é ocultado e atrasado por 3 horas (slavedelay).
Ocultei o nó para iniciar/parar durante o backup e o atraso de 3 horas é para segurança durante novas implantações.
O problema que estou enfrentando é: durante o fim de semana não há operações de gravação no cluster (essa é a natureza do aplicativo). Na manhã de segunda-feira, quando as gravações começam, o sistema de monitoramento informa que o nó de dados atrasado está atrasado há mais de 40 horas.
Eu acho que é porque o oplog que não tem registros durante o fim de semana e quando chega um registro na segunda-feira, precisa de 3 horas para chegar ao escravo atrasado.
Por favor, compartilhe sua opinião sobre o assunto, meus pensamentos estão corretos aqui ou devo verificar em uma direção diferente?
Pelo que entendi, o secundário oculto sempre estará atrasado pelo número de segundos definido pelo slaveDelay. No seu caso, a qualquer momento do dia, o secundário oculto estará sempre atrasado em três horas desde a última gravação no oplog. Se não houver mais atividade de gravação, o secundário oculto será totalmente recuperado em três horas. Você pode verificar o status da replicação no Mongo diretamente conectando-se a cada nó e executando rs.printReplicationInfo()
Eu configurei um cluster de 3 fragmentos usando um secundário oculto que está exatamente 180 segundos atrás, usando 2.6.3
Aqui está a configuração dos dois secundários, o último está oculto e 180 segundos atrás.
A prioridade é definida como 0 para impedir que o secundário oculto participe das eleições.
Comecei a inserir documentos no shard e agora estou olhando para o oplog usando db.printReplicationInfo().
Documentação do MongoDB sobre db.printReplicationInfo()
Mongo secundário visível --porta 27001
Secundário oculto mongo --port 27002
180 segundos depois, o secundário oculto alcança mongo --port 27002
Portanto, esteja você gravando no oplog ou não, o secundário continuará a acompanhar por N segundos, conforme definido em slaveDelay. Se a sua ferramenta de monitoramento estiver indicando 40 horas, verifique primeiro se você está obtendo as mesmas informações usando os comandos do replicationInfo do mongo.
db.getReplicationInfo()
db.printReplicationInfo()
rs.printReplicationInfo()
A saída de db.printReplicationInfo() é idêntica à de rs.printReplicationInfo()
Atualizar
http://docs.mongodb.org/manual/core/replica-set-delayed-member/
Com relação à sua pergunta sobre migrações de blocos atrasadas
Fragmentação
Se eu entendi seu comentário corretamente.
Se secondThrottle fosse definido como false , o balanceador poderia continuar a migrar blocos sem esperar por um membro atrasado. Não tenho certeza se isso é 100% preciso, mas foi assim que interpretei a documentação deles sobre secundárioThrottle e membros atrasados.