Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Sincronização de dados do conjunto de réplica
Nesta página
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 outros membros. 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.
Sincronização inicial
A sincronização inicial copia todos os dados de um membro do conjunto de réplicas para outro membro. Consulte Seleção inicial da fonte de sincronização para obter mais informações sobre os critérios de seleção da fonte de sincronização inicial.
Você pode especificar a fonte de sincronização inicial preferencial 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.
Processo de sincronização inicial lógica
Ao executar uma initial sync lógica, o MongoDB:
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 origem e insere todos os dados em suas próprias cópias dessas collections.Constrói todos os índices das collections conforme os documentos são copiados para cada collection.
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.Aplica todas as alterações ao conjunto de dados. Utilizando o oplog da 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.
Initial sync baseada em cópia de arquivos
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 initial sync.
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.
Habilitar initial sync baseada em cópia de arquivos
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.
Comportamento
A sincronização inicial baseada em cópia de arquivo substitui o banco de dados local
do nó de destino pelo banco de dados local
do nó de origem durante a sincronização.
Limitações
Durante uma initial sync baseada em cópia de arquivos:
Não é possível executar um backup no membro para o qual está sendo sincronizado ou no membro de onde está sendo sincronizado.
Não é possível gravar no banco de dados
local
no membro para o qual está sendo sincronizado.
Só é possível executar uma initial sync de um determinado membro de cada vez.
Ao usar o mecanismo de armazenamento criptografado, o MongoDB usa a chave de origem para criptografar o destino.
Tolerância a falhas
Se um secundário executando a initial sync encontrar um erro de rede não transitório (i.e. persistente) durante o processo de sincronização, o secundário reinicia o processo de initial sync desde o início.
Um secundário executando a sincronização inicial pode tentar retomar o processo de sincronização se for interrompido por um erro de rede transitório (ou seja, temporário), queda de collection ou renomeação de collection.
Por padrão, a secundária tenta retomar a sincronização inicial por 24 horas. Você pode usar o parâmetro initialSyncTransientErrorRetryPeriodSeconds
servidor para controlar a quantidade de tempo que as tentativas secundárias de retomar a sincronização inicial. Se o secundário não puder retomar com êxito o processo de sincronização inicial durante o período de tempo configurado, ele selecionará uma nova fonte íntegra 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.
Seleção inicial da fonte de sincronização
A seleção da fonte de sincronização inicial depende do valor do parâmetro de inicialização do mongod
initialSyncSourceReadPreference
:
Para
initialSyncSourceReadPreference
definido comoprimary
(padrão sechaining
estiver desabilitado), selecione o primário como a fonte de sincronização. 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 comoprimaryPreferred
(padrão para membros do conjunto de réplicas com direito a voto), tente selecionar o primário como a fonte de sincronização. Se o primário estiver indisponível ou inacessível, realize a seleção da fonte de sincronização dos membros restantes do conjunto de réplicas.Para todos os outros modos de leitura suportados, realize a seleção de fonte de sincronização a partir dos membros do conjunto de réplicas.
Os membros que realizam a seleção da fonte de initial sync fazem duas passagens pela lista de todos os membros do conjunto de réplicas:
Se o membro não puder selecionar uma fonte de initial sync após duas passagens, ele registrará um erro e aguardará 1
segundo antes de reiniciar o processo de seleção. O mongod
secundário pode reiniciar o processo de seleção de fonte da initial sync até 10
vezes antes de sair com um erro.
Janela do Oplog
A oplog window deve ser longa o suficiente para que um secundário 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 secundário 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.
Replicação
Os membros secundários replicam os dados continuamente após a initial sync. Os membros secundários copiam o oplog de sua fonte de sincronização e aplicam essas operações em um processo assíncrono. [1]
Os secundários podem alterar automaticamente fonte de origem de sincronização , 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 da fonte de sincronização.
[1] | A partir da versão 4.2, membros secundários de um conjunto de réplicas podem extrapolar o limite de tempo para registrar entradas de oplog a serem aplicadas. Essas mensagens de atraso no oplog:
|
Replicação de streaming
A sincronização de fontes envia um fluxo contínuo de entradas de oplog para seus secundários de sincronização. 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 na sincronização da origem ou se você desejar limitar o uso da largura de banda da rede pelo MongoDB para replicação.
Replicação multithread
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.
Controle de fluxo
A partir do MongoDB 4.2, os administradores podem limitar a taxa na qual o primário aplica suas gravações com o objetivo de manter o atraso abaixo de um valor máximo majority
committed
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.
Seleção da fonte de sincronização de replicação
A seleção da fonte de sincronização de replicação depende da configuração chaining
do conjunto de réplicas:
Com o encadeamento habilitado (padrão), realize a seleção da fonte de sincronização a partir dos membros do conjunto de réplicas.
Com o encadeamento desabilitado, selecione o primário como fonte de sincronização. 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 da fonte de sincronização de replicação fazem duas passagens pela lista de todos os membros do conjunto de réplicas:
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 uma fonte pode ser alterada 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 uma fonte de sincronização inicial. Depois que um membro do conjunto de réplicas executa com êxito a initial sync, ele adia o valor de chainingAllowed
ao selecionar uma fonte de sincronização de replicação.
Consulte Seleção inicial da fonte de sincronização para obter mais informações sobre a seleção inicial da fonte de sincronização.