Algumas verificações rápidas:
- Você está executando no 2.0 ou abaixo? A replicação recebeu uma grande reformulação em 2.2
- Você tem alguma coleção limitada? Um índice ausente em _id em uma coleção limitada pode causar esse tipo de atraso
- Você menciona que os hosts não estão muito ocupados - se você tiver lacunas em seus novos ops, a matemática usada para calcular o atraso pode relatar falsamente quando não houver operações
- Como você está calculando o atraso? Eu definitivamente tentaria confirmar qualquer atraso do shell - a última oportunidade das entradas em
rs.status()
seria um bom começo - Verificar duplamente o lado da rede, picos de latência e / ou perda intermitente de pacotes podem causar isso e ser temporário o suficiente para ser difícil de detectar (veja
netstat --statistics
antes e depois de um pico de atraso, por exemplo - veja se retransmissões ou erorrs estão aumentando) - Se você estiver executando o 2.2, veja se está trocando o host, o secundário atrasado está sendo sincronizado, revelado de forma um tanto confusa pelo campo
[syncingTo][3]
emrs.status()
. Isso é feito com o comandors.syncFrom()
. - Se ainda não estiver disponível, coloque o conjunto em MMS e veja se algo está aumentando / quase ao mesmo tempo o pico de atraso para apontar na direção certa.
Se, depois de tudo isso, você ainda não sabe o que está causando isso, então pode estar além de responder no serverfault de uma maneira razoável (precisaria ver logs, estatísticas etc.) - Eu recomendaria o mongodb usuário do grupo do Google como a próxima etapa.