Réplica do Mongo DB configurada Preso no estado RECUPERAÇÃO
14
Criamos um conjunto de réplicas e agora o problema é que 2 membros do conjunto de réplicas [3 membros] estão no modo de recuperação a partir de 48 horas. Inicialmente, o tamanho dos nós em recuperação estava aumentando e agora até isso parou. Portanto, na recuperação de nós, eles ficam presos após 90 GB de dados com mais de 60 GB de dados locais.
Isso é um pouco inseguro, pois não se sabe por que os secundários entraram no estado de recuperação.
A maneira mais segura, mas também mais intrusiva
Como acima, mas pare seu aplicativo durante o processo. Isso evita a possibilidade de seu aplicativo estar inserindo mais dados do que os secundários são capazes de replicar. No entanto, o problema pode ocorrer durante a produção.
A maneira mais segura, mas também a mais intrusiva
Encerre todo o conjunto de réplicas
Remover o conteúdo de dbpathem ambos os secundários
Copie o conteúdo dbpathpara para os dois secundáriosdbpath
Inicie o primário primário.
Inicie um dos antigos secundários.
Aguarde até que uma nova primária seja eleita.
Inicie o secundário restante.
Algumas notas:
Use MMS . É gratuito, fácil de configurar e fornece boas informações sobre seu conjunto de réplicas. Tente manter o valor de "atraso na replicação" em torno de 0 e use todos os meios necessários para que o atraso na replicação nunca seja maior que a "janela do log de replicação".
Sempre verifique se você possui uma rede de 1 Gb e uma (desculpe) carga de RAM. Quanto mais melhor. Regra geral: mais da metade da RAM e dos SSDs do que o dobro da RAM e nenhum SSD (com a RAM permanecendo dentro de limites razoáveis).
Isenção de responsabilidade: sempre faça um backup dos dados de produção antes de brincar com eles.
No momento, não temos um nó secundário no conjunto de réplicas. Um está no modo PRIMÁRIO e os outros dois estão no modo RECUPERAÇÃO.
Avinash Sahu
1
Secundários lógicos, então. O processo é o mesmo.
Markus W Mahlberg
Eu tentei várias vezes iniciar a instância do Mongo e ressincronizar, toda vez que ele começa a copiar os dados para outro nó até um tamanho fixo (~ 96gb) e depois fica preso. O tamanho do oplog tem a ver com isso?
Avinash Sahu 28/09
1
Não exatamente, exceto pelo fato de que a ressincronização pode parar quando você insere mais dados do que o oplog pode reter durante a ressincronização inicial. Tome a opção 2 ou 3 neste caso.
Markus W Mahlberg
1
Você pode explicar isso um pouco mais? "mais da metade da RAM e SSDs do que o dobro da RAM e sem SSDs (com a RAM permanecendo dentro de limites razoáveis)."
Stephen Nguyen
1
O processo de replicação falha mesmo que você inicie o scratch a partir de um novo dbpath no secundário. Então, a coisa é fazer algumas alterações no oplog . O tamanho do oplog deve ser definido como um valor ideal para que ele possa manipular todas as gravações de aplicativos nele.
Aumentando o tamanho do oplog:
Encerrar o servidor principal
use admin
db.shutdownServer()
Comece o primário como autônomo e execute em uma porta diferente, digamos 37017
Entre no mongo na porta 37017
mongo --port 37017
Remova o conteúdo antigo no banco de dados local
Por segurança, tenha backop do antigo oplog antes de soltar
mongodump --db local --collection 'oplog.rs' --port 37017
Solte o conteúdo antigo no banco de dados local
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
A coleção de conjuntos de réplicas não pode ser descartada; portanto, remova-a com o ID necessário:
Além disso, você pode especificar o tamanho do oplog em MB no arquivo mongod.conf, digamos 50 GB, 429496 MB
replication:
oplogSizeMB:429496
Espero que isto ajude !!!
Editar:
Como mencionado por Nicholas Tolley Cottrell nos comentários. No MongoDB versão 3.6 , podemos alterar o tamanho do oplog em tempo de execução sem reiniciar.
O processo de replicação falha mesmo que você inicie o scratch a partir de um novo dbpath no secundário. Então, a coisa é fazer algumas alterações no oplog . O tamanho do oplog deve ser definido como um valor ideal para que ele possa manipular todas as gravações de aplicativos nele.
Aumentando o tamanho do oplog:
Encerrar o servidor principal
Comece o primário como autônomo e execute em uma porta diferente, digamos 37017
Entre no mongo na porta 37017
Remova o conteúdo antigo no banco de dados local
Por segurança, tenha backop do antigo oplog antes de soltar
Solte o conteúdo antigo no banco de dados local
A coleção de conjuntos de réplicas não pode ser descartada; portanto, remova-a com o ID necessário:
Crie um novo oplog do tamanho necessário, digamos 50 GB
Além disso, você pode especificar o tamanho do oplog em MB no arquivo mongod.conf, digamos 50 GB, 429496 MB
Espero que isto ajude !!!
Editar:
Como mencionado por Nicholas Tolley Cottrell nos comentários. No MongoDB versão 3.6 , podemos alterar o tamanho do oplog em tempo de execução sem reiniciar.
Verifique o tamanho atual do oplog
Para alterar o tamanho do oplog para 10 GB
fonte