Menu Docs

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

Versão do protocolo de conjunto de réplica

A partir da versão 4.0, o MongoDB só suporta a versão 1 do protocolo de conjunto de réplicas ( pv1 ). pv1 é o padrão para todos os novos conjuntos de réplicas criados com o MongoDB 3.2 ou versões mais recentes.

Com pv1, você pode usar catchUpTimeoutMillis para priorizar failovers mais rápidos e preservação de escritas w:1 .

pv1 garante a preservação das gravações w: "majority" confirmadas.

pv1 está disponível na versão 3.2 ou posterior do MongoDB e é o padrão para todos os novos conjuntos de réplicas criados com a versão 3.2 ou posterior.

Para as seguintes versões do MongoDB, o pv1 aumenta a probabilidade de reversões do w:1 em comparação com o pv0 (não mais suportado no MongoDB 4.0+) para conjuntos de réplicas com árbitros:

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 Ou anterior

Para as outras versões do MongoDB que suportam pv1, pv1 não aumenta a probabilidade de w:1 reversões para conjuntos de réplicas com árbitros.

Para as seguintes versões do MongoDB, o pv1 aumenta a probabilidade de reversões do w:1 em comparação com o pv0 (não mais suportado no MongoDB 4,0+) para conjuntos de réplicas com diferentes configurações do members[n].priority :

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 Ou anterior

Para as outras versões do MongoDB que suportam pv1, o pv1 não aumenta a probabilidade de reversões do w:1 para conjuntos de réplica com configurações de members[n].priority diferentes.

pv1 não usa vetores. Os membros individuais podem votar a favor ou contra um candidato em uma eleição específica, mas não podem vetorizar individualmente uma eleição de forma unilateral.

Em alguns casos, dois nós em um conjunto de réplicas podem acreditar transitoriamente que são os primários, mas somente um deles poderá realizar gravações com restrição de gravação { w: "majority" }. O nó que consegue realizar gravações { w: "majority" } é o primário atual, e o outro nó é um antigo primário que ainda não reconheceu seu rebaixamento, normalmente devido a uma partição de rede. Quando isso ocorre, os clientes que se conectam ao antigo primário poderão ver dados obsoletos, apesar de terem solicitado uma preferência de leitura primary, e novas gravações no antigo primário acabarão sendo revertidas.

pv1 usa o conceito do termo. Isso permite uma detecção mais rápida de primários simultâneos e várias eleições bem-sucedidas em um curto período.

pv1 faz uma tentativa de "melhor esforço" para que o secundário com o maior priority disponível chame uma eleição. Isso pode levar a eleições consecutivas, pois membros elegíveis com maior prioridade podem convocar uma eleição.

No entanto, no MongoDB 3.6+ (bem como no MongoDB 3.4.2+ e 3.2.12+), para pv1:

  • As eleições de prioridade foram limitadas para ocorrer somente se o nó de maior prioridade estiver a menos de 10 segundos do primário atual.

  • Os árbitros votarão não nas eleições se detectarem uma primária saudável de prioridade igual ou maior para o candidato.

pv1 evita o voto duplo na convocação de um membro para a eleição. Isso é alcançado por meio do uso de termos.

A partir da versão 4.0, o MongoDB suporta apenas a versão 1 do protocolo de conjunto de réplicas (pv1).

No entanto, o MongoDB 3.2 ao MongoDB 3.6 suporta conjunto de réplicas protocolo versão 1 e versão protocolo 0.

Antes de alterar a versão do protocolo para MongoDB 3.2 até MongoDB 3.6, certifique-se de que pelo menos uma entrada do oplog (gerada a partir da versão atual do protocolo) tenha sido replicada do primário para todos os secundários. Para verificar, em cada secundário, verifique o campo optimes.lastCommittedOpTime.t retornado de rs.status(). Por exemplo, conecte mongosh a cada secundário e execute:

rs.status().optimes.lastCommittedOpTime.t
  • Se a versão do protocolo do conjunto de réplica atual for 0, o t será igual a -1.

  • Se a versão atual do protocolo do conjunto de réplicas for 1, o t será maior que -1.

Depois de verificar que pelo menos uma entrada do oplog (usando a versão atual do protocolo) foi replicada para todos os secundários, você poderá alterar a versão do protocolo.

Para alterar a versão do protocolo do conjunto de réplicas, reconfigure (rs.reconfig()) o conjunto de réplicas com o novo protocolVersion. Por exemplo, para atualizar para pv1, conecte mongosh ao primário atual e execute a seguinte sequência de operações:

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

Você pode usar catchUpTimeoutMillis para priorizar failovers mais rápidos e preservação de gravações w:1.

← Configuração do conjunto de réplica