Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Sincronizar novamente um membro de um conjunto de réplicas

Nesta página

  • Procedimentos

Um membro do conjunto de réplicas torna-se "obsoleto" quando seu processo de replicação fica tão atrasado que o primário substitui as entradas de oplog que o membro ainda não replicou. O membro não consegue se atualizar e torna-se "obsoleto". Quando isso ocorre, você deve ressincronizar completamente o membro removendo seus dados e executando uma initial sync.

Este tutorial aborda a ressincronização de um membro obsoleto e a criação de um novo membro usando dados iniciais de outro membro, os quais podem ser usados para restaurar um membro do conjunto de réplicas. Ao sincronizar um membro, escolha um horário em que o sistema tenha a largura de banda para mover uma grande quantidade de dados. Agende a sincronização durante um período de baixo uso ou durante uma janela de manutenção.

O MongoDB oferece duas opções para realizar uma initial sync:

Observação

Para evitar a alteração do quorum de gravação, nunca gire mais de um nó de conjunto de réplicas por vez.

Aviso

Durante a sincronização inicial, o mongod remove o conteúdo do diretório dbPath.

Esse procedimento se baseia no processo regular do MongoDB para sincronização de conjuntos de réplicas. Isso armazena os dados atuais do membro. Para uma visão geral do processo de sincronização inicial do MongoDB, consulte a seção Sincronização do conjunto de réplicas.

As operações de sincronização iniciais podem impactar os outros membros do conjunto e criar tráfego adicional para o primário. O membro de sincronização requer outro membro do conjunto que esteja acessível e atualizado.

Se a instância não tiver dados, você poderá seguir o procedimento Adicionar membros a um conjunto de réplicas ou Substituir um membro do conjunto de réplicas para adicionar um novo membro a um conjunto de réplicas.

Você também pode forçar um mongod que já seja membro do conjunto a executar uma sincronização inicial reiniciando a instância sem o conteúdo do diretório dbPath:

  1. Pare a instância mongod do membro. Para garantir um desligamento limpo, use o método db.shutdownServer() de mongosh ou, em sistemas Linux, a opção mongod --shutdown .

  2. (Opcional) Fazer uma cópia de segurança de todos os dados e subdiretórios do diretório dbPath do membro. Se uma cópia de segurança completa não for exigida, considere fazer backup somente do diretório diagnostic.data para preservar dados de solução de problemas potencialmente úteis em caso de problema. Consulte Captura de dados de diagnóstico em tempo integral para obter mais informações.

  3. Exclua todos os dados e subdiretórios do diretório dbPath do membro.

  4. Reinicie o processo de mongod.

Neste ponto, o mongod executa uma sincronização inicial. O comprimento do processo de sincronização inicial depende do tamanho do banco de dados e da latência de rede entre os membros do conjunto de réplica.

Essa abordagem "seeds" um membro novo ou obsoleto usando os arquivos de dados de um membro existente do conjunto de réplicas. Os arquivos de dados devem ser suficientemente recentes para permitir que o novo membro acompanhe o registro. Caso contrário, o membro precisaria realizar uma sincronização inicial.

Você pode capturar os arquivos de dados como uma captura instantânea ou uma cópia direta. No entanto, na maioria dos casos, você não pode copiar arquivos de dados de uma instância do mongod em execução para outra, pois os arquivos de dados serão alterados durante a operação de cópia do arquivo.

Importante

Se copiar arquivos de dados, é importante que sua cópia tenha o conteúdo do banco de dados do local.

Você não pode usar um backup mongodump para os arquivos de dados: apenas um backup de snapshot. Para abordagens para capturar um snapshot consistente de uma instância mongod execução, consulte a documentação dos métodos de backup do MongoDB .

Depois de copiar os arquivos de dados da fonte "seed", inicie a instância mongod com um novo members[n]._id e permita que ela aplique todas as operações do registro até que ele reflita o estado atual do conjunto de réplicas. Para ver o status atual do conjunto de réplicas, utilize rs.printSecondaryReplicationInfo() ou rs.status().

← Forçar um membro a se tornar primary

Nesta página