Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Sincronização de dados do conjunto de réplica

Nesta página

  • Sincronização inicial
  • Replicação

Para manter cópias atualizadas do conjunto de dados compartilhados, os membros secundários de um conjunto de réplicas sincronizam ou replicam dados de um membro de origem. O MongoDB usa duas formas de sincronização de dados: sincronização inicial, para preencher novos membros com o conjunto completo de dados, e replicação, para aplicar alterações contínuas a todo o conjunto de dados.

A sincronização inicial copia todos os dados do membro de origem do conjunto de réplicas para um membro de destino. Consulte Seleção inicial da fonte de sincronização para obter mais informações sobre os critérios de seleção do membro de origem.

Observação

Durante a sincronização inicial, o MongoDB trunca o oplog no membro de destino. Essa truncamento de oplog pode impacto processos, como change streams, que dependem de dados de oplog.

Você pode especificar a fonte de sincronização inicial preferida usando o parâmetro initialSyncSourceReadPreference. Este parâmetro só pode ser especificado ao iniciar o mongod.

A partir do MongoDB 5.2, as sincronizações iniciais podem ser lógicas ou baseadas em cópias de arquivos.

Ao executar uma initial sync lógica, o MongoDB:

  1. Clona todos os bancos de dados, exceto o banco de dados local . Para clonar, o mongod verifica cada collection em cada banco de dados de membro de origem e insere todos os dados em suas próprias cópias dessas collections.

  2. Constrói todos os índices das collections conforme os documentos são copiados para cada collection.

  3. Extrai registros de oplog recém-adicionados durante a cópia de dados. Certifique-se de que o membro de destino tenha espaço em disco suficiente no banco de dados local para armazenar temporariamente esses registros oplog durante esse estágio da cópia de dados.

  4. Aplica todas as alterações ao conjunto de dados. Usando o oplog do membro de origem, o mongod atualiza seu conjunto de dados para refletir o estado atual do conjunto de réplicas.

Quando a initial sync termina, o membro faz a transição de STARTUP2 para SECONDARY.

Para executar uma initial sync, consulte Sincronizar novamente um membro de um conjunto de réplicas autogerenciado.

Disponível apenas no MongoDB Enterprise.

A sincronização inicial baseada em cópia de arquivos executa o processo de sincronização inicial copiando e movendo arquivos no sistema de arquivos. Esse método de sincronização pode ser mais rápido do que a sincronização inicial.

Importante

A initial sync baseada em cópia de arquivos pode causar contagens imprecisas

Após a initial sync baseada em cópia de arquivos ser concluída, se for executado o método count() sem um predicado de query, a contagem de documentos retornados poderá ser imprecisa.

Um método count sem um query tem esta aparência: db.<collection>.count().

Para saber mais, consulte Contagens imprecisas sem previsão de consulta.

Para habilitar a initial sync baseada em cópia de arquivos, defina o parâmetro initialSyncMethod como fileCopyBased no membro de destino para a initial sync. Esse parâmetro só pode ser definido na inicialização.

A initial sync baseada em cópia de arquivos substitui o banco de dados local do membro de destino pelo banco de dados local do membro de origem ao sincronizar.

  • Durante uma initial sync baseada em cópia de arquivos:

    • Você não pode executar backups no nó de origem nem no nó de destino.

    • Não é possível gravar no banco de dados local no nó de destino.

  • Só é possível executar uma initial sync de um membro de origem de cada vez.

  • Ao usar o mecanismo de armazenamento criptografado, o MongoDB usa a chave de membro de origem para criptografar o destino.

Você deve executar uma initial sync em clusters que usam a opção de armazenamento SSD local de memória não livre (NVMe), inclusive se você estiver usando o auto-scaling do Atlas. Os clusters do Atlas NVMe são dimensionados automaticamente para o próximo nível superior quando 90% do espaço de armazenamento estiver cheio. Uma sincronização inicial leva mais tempo para ser concluída em comparação com sincronizações subsequentes e reduz o desempenho do primário do qual os dados são lidos.

Se um membro de destino que executa a initial sync encontrar um erro de rede persistente durante o processo de sincronização, o membro de destino reiniciará o processo de initial sync desde o início.

Um membro de destino que esteja executando a sincronização inicial pode tentar retomar o processo de sincronização se for interrompido por um erro temporário de rede, descarte de coleção ou renomeação de coleção.

Por padrão, o membro de destino tenta retomar a sincronização inicial por 24 horas. Você pode utilizar o parâmetro do servidor initialSyncTransientErrorRetryPeriodSeconds para controlar a quantidade de tempo que o membro de destino tenta retomar a sincronização inicial. Se o membro de destino não puder retomar com êxito o processo de sincronização inicial durante o período de tempo configurado, ele selecionará um novo membro de origem íntegro do conjunto de réplicas e reiniciará o processo de sincronização inicial desde o início.

O secundário tentará reiniciar a initial sync até 10 vezes antes de retornar um erro fatal.

A seleção da fonte de sincronização inicial depende do valor do parâmetro de inicialização do mongod initialSyncSourceReadPreference:

  • Para initialSyncSourceReadPreference definido como primary (padrão se chainingAllowed estiver desabilitado), selecione o primário como o membro de origem. Se o primário não estiver disponível ou acessível, registre um erro e verifique periodicamente a disponibilidade do primário.

  • Para initialSyncSourceReadPreference definido como primaryPreferred (padrão para membros do conjunto de réplicas com direito a voto), tente selecionar o primário como o membro de origem. Se o primário estiver indisponível ou inacessível, realize a seleção do membro de origem da sincronização dos membros restantes do conjunto de réplicas.

  • Para todos os outros modos de leitura compatíveis, execute a seleção do nó de origem sincronizado a partir dos nós de destino.

Os membros que realizam a seleção inicial do membro de origem fazem duas passagens pela lista de todos os membros do conjunto de réplicas:

O membro aplica os seguintes critérios a cada membro do conjunto de réplicas ao fazer a primeira passagem para selecionar um membro de origem inicial:

  • O membro de origem deve estar no estado de replicação do PRIMARY ou SECONDARY .

  • O nó de origem deve estar online e acessível.

  • Se initialSyncSourceReadPreference for secondary ou secondaryPreferred, o membro de origem deverá ser secundário.

  • O nó de origem deve ser visible.

  • O nó de origem deve estar dentro de 30 segundos da entrada de oplog mais recente no primário.

  • Se o nó builds indexes, o nó de origem deve construir índices.

  • Se o nó votes nas eleições do conjunto de réplicas, o nó de origem também deverá votar.

  • Se o membro não for um delayed member, o membro de origem não deve ser atrasado.

  • Se o nó for um delayed member, o nó de origem deverá ter um atraso configurado mais curto.

  • O membro de origem deve ser mais rápido do que a melhor origem de sincronização atual.

Se nenhum membro de origem candidata permanecer após a primeira aprovação, o membro realizará uma segunda aprovação com critérios relaxados. Consulte Sync Source Selection (Second Pass).

O membro aplica os seguintes critérios a cada membro do conjunto de réplicas ao fazer a segunda passagem para selecionar um membro de origem inicial:

Se o nó de destino não puder selecionar um nó de origem após duas passagens, ele registrará um erro e aguardará 1 segundo antes de reiniciar o processo de seleção. O secundário mongod pode reiniciar o processo de seleção da fonte da sincronização inicial até 10 vezes antes de sair com um erro.

A oplog window deve ser longa o suficiente para que um membro de destino possa buscar quaisquer novas entradas do oplog que ocorram entre o início e o fim do Processo de initial sync lógica. Se a janela não for longa o suficiente, há o risco de que algumas entradas caiam do oplog antes que o membro de destino possa aplicá-las.

É recomendável dimensionar oplog para obter mais tempo para buscar novas entradas de oplog . Isso permite alterações que podem ocorrer durante as sincronizações iniciais.

Para obter mais informações, consulte Tamanho do oplog.

Os membros de destino replicam dados continuamente após a initial sync. Os membros de destino copiam o oplog do membro de origem e aplicam essas operações em um processo assíncrono.

Os membros de destino alteram automaticamente seu membro de origem, conforme necessário, com base nas alterações no tempo de ping e no estado da replicação de outros membros. Consulte Seleção da fonte de sincronização de replicação para mais informações sobre os critérios de seleção do membro de origem.

Os membros de origem enviam um fluxo contínuo de entradas de oplog para seus membros de destino. A replicação de streaming atenua o atraso de replicação em redes de alta carga e alta latência. Isso também:

  • Reduz a desatualização das leituras de secundários.

  • Reduz o risco de perda de operações de gravação com w: 1 devido ao failover principal.

  • Reduz a latência nas operações de gravação com w: "majority" e w: > 1 (ou seja, qualquer problema de gravação que exija esperar pela replicação).

Use o parâmetro de inicialização oplogFetcherUsesExhaust para desabilitar a replicação de streaming e usar o comportamento de replicação mais antigo. Defina o parâmetro oplogFetcherUsesExhaust como false somente se houver alguma restrição de recursos no membro de origem ou se você desejar limitar o uso da largura de banda da rede pelo MongoDB para replicação.

O MongoDB aplica operações de gravação em lotes usando vários threads para melhorar a simultaneidade. O MongoDB agrupa lotes por ID de documento (WiredTiger) e aplica simultaneamente cada grupo de operações usando um thread diferente. O MongoDB sempre aplica operações de gravação a um determinado documento em sua ordem de gravação original.

As operações de leitura destinadas a secundários e configuradas com um nível de read concern de "local" ou "majority" lêem a partir de um snapshot de WiredTiger dos dados se a leitura ocorrer em um secundário onde os lotes de replicação estejam sendo aplicados.

A leitura de um snapshot garante uma visão consistente dos dados e permite que a leitura ocorra simultaneamente com a replicação contínua, sem a necessidade de uma trava. Como resultado, as leituras secundárias que exigem esses níveis de read concern não precisam mais esperar pela aplicação dos lotes de replicação e podem ser tratadas à medida que são recebidas.

Os administradores podem limitar a taxa na qual o primário aplica suas gravações com o objetivo de manter o atraso majority committed abaixo de um valor máximo configurável flowControlTargetLagSeconds.

Por padrão, o controle de fluxo é enabled.

Observação

Para que o controle de fluxo seja ativado, o conjunto de réplicas/cluster fragmentado deve ter: featureCompatibilityVersion (fCV) de 4.2 e preocupação de leitura majority enabled. Ou seja, o controle de fluxo ativado não terá efeito se fCV não for 4.2 ou se a maioria das preocupações de leitura estiver desativada.

Para obter mais informações, consulte Controle de fluxo.

A seleção do membro de origem da replicação depende da configuração chaining do conjunto de réplicas:

  • Com o encadeamento habilitado (padrão), realize a seleção do membro de origem a partir dos membros de destino.

  • Com o encadeamento desabilitado, selecione o principal como nó de origem. Se o primário não estiver disponível ou acessível, registre um erro e verifique periodicamente a disponibilidade do primário.

Os membros que realizam a seleção do membro de origem da replicação fazem duas passagens pela lista de todos os membros do conjunto de réplicas:

O membro aplica os seguintes critérios a cada membro do conjunto de réplicas ao fazer a primeira passagem para selecionar um membro de origem:

  • O membro de origem deve estar no estado de replicação do PRIMARY ou SECONDARY .

  • O nó de origem deve estar online e acessível.

  • O nó de origem deve ter entradas de oplog mais recentes do que o nó. Ou seja, o nó de origem deve estar à frente do nó.

  • O nó de origem deve ser visible.

  • O nó de origem deve estar dentro de 30 segundos da entrada de oplog mais recente no primário.

  • Se o nó builds indexes, o nó de origem deve construir índices.

  • Se o nó votes nas eleições do conjunto de réplicas, o nó de origem também deverá votar.

  • Se o membro não for um delayed member, o membro de origem não deve ser atrasado.

  • Se o nó for um delayed member, o nó de origem deverá ter um atraso configurado mais curto.

  • O membro de origem deve ser mais rápido do que a melhor origem de sincronização atual.

Se nenhum membro de origem candidato permanecer após a primeira aprovação, o membro realizará uma segunda aprovação com critérios relaxados. Veja o Sync Source Selection (Second Pass).

O membro aplica os seguintes critérios a cada membro do conjunto de réplicas ao fazer a segunda passagem para selecionar um membro de origem:

  • O membro de origem deve estar no estado de replicação do PRIMARY ou SECONDARY .

  • O nó de origem deve estar online e acessível.

  • Se o nó builds indexes, o nó de origem deve construir índices.

  • O membro de origem deve ser mais rápido do que a melhor origem de sincronização atual.

Se o membro não puder selecionar uma fonte de sincronização após duas passagens, ele registrará um erro e aguardará 1 segundo antes de reiniciar o processo de seleção.

O número de vezes que um membro de origem pode ser alterado por hora é configurável com a definição do parâmetro maxNumSyncSourceChangesPerHour .

Observação

O parâmetro de inicialização initialSyncSourceReadPreference tem precedência sobre a configuração settings.chainingAllowed do conjunto de réplicas ao selecionar um membro de origem da initial sync. Depois que um membro do conjunto de réplicas executa com êxito a initial sync, ele adia o valor de chainingAllowed ao selecionar um membro de origem.

Consulte Seleção da fonte da sincronização inicial para obter mais informações relacionadas.

Voltar

Oplog