EventoObtenha 50% de desconto no seu ingresso para MongoDB.local Londres em outubro 2. Use o código WEB50Saiba mais >>
Desenvolvedor MongoDB
Central de desenvolvedor do MongoDBchevron-right
Produtoschevron-right
MongoDBchevron-right

Sincronização inicial retomável no MongoDB 4.4

Nuno Costa5 min read • Published Dec 16, 2021 • Updated Sep 11, 2024
MongoDB
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty

Introdução

Olá a todos. Meu nome é Nuno e trabalho com bancos de dados MongoDB há quase oito anos como administrador de sistemas e engenheiro de serviços técnicos.
Um dos desafios mais comuns em ambientes MongoDB é quando um membro do conjunto de réplicas exige uma ressincronização e o processo desincronização inicialdo é interrompido por algum motivo.
Interrupções, como partições de rede entre a fonte de sincronização e o nó que faz a sincronização inicial, fazem com que o processo falhe, forçando-o a reiniciá-lo do zero para garantir a consistência do banco de dados.
Isso começou a ser particularmente problemático quando confrontado com conjuntos de dados grandes, que podem levar vários dias quando estão em termos de terabytes.
Você já deve ter notado que estou falando no passado, pois esse não é mais um problema que você precisa enfrentar. Estou muito satisfeito em compartilhar com você um dos mais recentes aprimoramentos introduzidos pelo MongoDB na v4.4: sincronização inicial retomável.
A Sincronização inicial retomável agora permite que os nós que fazem a sincronização inicial sobrevivam a eventos como erros transitórios de rede ou uma reinicialização da fonte de sincronização ao buscar dados do nó de origem de sincronização.

Sincronização inicial retomável

O tempo gasto na recuperação de membros do conjunto de réplicas com procedimentos desincronização inicial em ambientes de dados grandes tem dois desafios comuns:
  • Saindo do oplog
  • Falhas de rede transitórias
O MongoDB tornou-se mais resiliente a esses tipos de falhas com o MongoDB v3.4 adicionando a capacidade de extrair registros de oplog recém-adicionados durante a fase de cópia de dados e, mais recentemente, com o MongoDB v4.4 e a capacidade de retomar a sincronização inicial de onde parou.

Descrição comportamental

O processo de sincronização inicial reiniciará o comando interrompido ou com falha e continuará tentando até que o comando seja bem-sucedido quando ocorrer um erro não retomável ou um período especificado pelo parâmetro initialSyncTransientErrorRetryPeriodSeconds pass (padrão: 24 horas). Essas reinicializações são limitadas a usar a mesma fonte de sincronização e não são tolerantes a rollbacks na fonte de sincronização. Ou seja, se a fonte de sincronização sofrer uma reversão, toda a tentativa de sincronização inicial falhará.
Os erros retomáveis incluem erros recuperáveis quando ErrorCodes::isRetriableError retorna true, o que inclui todos os erros de rede, bem como alguns outros erros transitórios.
O ErrorCodes::NamespaceNotFound, ErrorCodes::OperationFailed, ErrorCodes::CursorNotFoundou ErrorCodes::QueryPlanKilled significam que a coleção pode ter sido descartada, renomeada ou modificada de uma forma que fez com que o cursor fosse eliminado. Esses erros causarão ErrorCodes::InitialSyncFailure e serão tratados da mesma forma que erros transitórios recuperáveis (exceto por não matar o cursor), marcarão ErrorCodes::isRetriableError como truee permitirão que a sincronização inicial seja retomada de onde parou.
Em ErrorCodes::NamespaceNotFound, ele pulará toda a collection e retornará com sucesso. Mesmo que a collection tenha sido renomeada, simplesmente retomar a query é suficiente, pois estamos consultando por UUID; a alteração do nome será tratada durante a aplicaçãooplog.
Todos os outros erros são non-resumable.

Configurando o período de repetição personalizado

O período de repetição padrão é de 24 horas (86,400 segundos). Um administrador de banco de dados pode optar por aumentar esse período com o seguinte comando:
Observação: o valor de 24horas é o período padrão estimado para que um administrador de banco de dados detecte qualquer falha contínua e possa agir ao reiniciar o nó de origem da sincronização.

Requisitos e comportamentos de upgrade/downgrade

O comportamento retomável completo estará sempre disponível entre 4.4 nós, independentemente da FCV - Feature Compatibility Version. Entre 4.2 e 4.4 nós, a sincronização inicial não poderá ser retomada durante a fase de consulta do CollectionCloner (onde estamos realmente lendo dados de coleções), nem será retomada após a renomeação da coleção, independentemente de qual nó é 4.4. A retomada após falhas transitórias em outros comandos será possível quando o nó de sincronização for 4.4 e a fonte de sincronização é 4.2.

Diagnóstico/Degradabilidade

Durante a sincronização inicial, o nó de origem da sincronização pode ficar indisponível (devido a uma falha na rede ou à reinicialização do processo) e, ainda assim, ser capaz de retomar e concluir.
Aqui estão exemplos de quais mensagens esperar nos registros.
A tentativa de sincronização inicial foi iniciada com sucesso:
Mensagens causadas por falhas de rede (ou reinicialização do nó de origem da sincronização):
A sincronização inicial é retomada após ser interrompida:
Os clonadores de dados retomam:
A fase de clonagem de dados é concluída com sucesso. A fase de clonagem do Oplog começa:
A sincronização inicial é concluída com sucesso e as estatísticas são fornecidas:
As novas estatísticas InitialSync de replSetGetStatus.initialSyncStatus podem ser úteis para revisar o status do progresso da sincronização inicial.
A partir do MongoDB 4.2.1, as métricasreplSetGetStatus.initialSyncStatus só estão disponíveis quando executadas em um membro durante sua sincronização inicial (ou seja, estadoSTARTUP2).
As métricas são:
Para cada tentativa de sincronização inicial de replSetGetStatus.initialSyncStatus.initialSyncAttempts:
  • totalTimeUnreachableMillis - O tempo total em milissegundos em que o nó esteve indisponível durante a sincronização inicial atual.
  • operaçõesRepetidas - Número total de todas as tentativas de repetição de operação.
  • rollBackId - O identificador de rollback da fonte de sincronização no início da tentativa de sincronização inicial.
Um exemplo dessa saída é:

Embrulhar

Atualize seu MongoDB database para o novo v4.4 e aproveite o novo recurso Resumable Initial Sync. Sua implantação agora sobreviverá a erros de rede transitórios ou a uma fonte de sincronização será reiniciada.
Se tiver dúvidas, acesse o site da nossa comunidade de desenvolvedores, no qual os engenheiros e a comunidade do MongoDB ajudarão você a desenvolver sua próxima grande ideia com o MongoDB.

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Aperol Spritze de verão com queries geoespaciais e pesquisa vetorial do MongoDB


Aug 22, 2024 | 13 min read
Tutorial

Como usar a fase do pipeline de agregação Union All no MongoDB 4.4


Sep 09, 2024 | 16 min read
Tutorial

Primeiros passos no MongoDB e C++


Aug 14, 2024 | 7 min read
Artigo

As 4 principais razões pelas quais você deve usar o MongoDB


Sep 23, 2022 | 9 min read
Sumário