Eleições do conjunto de réplicas
Os conjuntos de réplicas usam eleições para determinar qual membro do conjunto se tornará primária. Os conjuntos de réplicas podem desencadear uma eleição em resposta a uma variedade de eventos, como:
Adicionando um novo nó ao conjunto de réplicas,
executar a manutenção do conjunto de réplicas usando métodos como
rs.stepDown()
ours.reconfig()
eos membros secundários perdem conectividade com a primária por mais do que o
timeout
configurado (10 segundos por padrão).
No diagrama a seguir, o nó primário ficou indisponível por mais tempo que o configured timeout
e aciona o processo de failover automático. Uma das secundárias restantes solicita uma eleição para selecionar uma nova primária e retomar automaticamente as operações normais.
O conjunto de réplicas não pode processar operações de escrita até que a eleição seja concluída com sucesso. O conjunto de réplicas pode continuar a servir queries de leitura se essas queries estiverem configuradas para serem executadas em secundários.
O tempo médio antes de um cluster eleger um novo primário normalmente não deve exceder 12 segundos, assumindo o padrão replica
configuration settings
. Isso inclui o tempo necessário para marcar o primary como indisponível , chamar e concluir umaeleição . Você pode ajustar esse período modificando a opção de configuração de replicação do settings.electionTimeoutMillis
. Fatores como a latência da rede podem prolongar o tempo necessário para que as eleições de conjuntos de réplicas sejam concluídas, o que, por sua vez, afeta o tempo em que o cluster pode operar sem um primary. Esses fatores dependem da arquitetura específica de seus clusters.
A lógica de conexão do seu aplicativo deve incluir tolerância para failovers automáticos e as eleições subsequentes. Os drivers do MongoDB podem detectar a perda do primário e repetir automaticamente determinadas operações de gravação uma única vez, fornecendo tratamento adicional integrado de failovers e eleições automáticas:
Drivers compatíveis permitem gravações repetíveis por padrão
Fatores e condições que afetam as eleições
Protocolo de Eleição de Replicação
O protocolVersion: 1
de replicação reduz o tempo de failover do conjunto de réplicas e acelera a detecção de várias primárias simultâneas.
Você pode usar catchUpTimeoutMillis
para priorizar failovers mais rápidos e preservação de gravações w:1
.
Para obter mais informações sobre pv1
, consulte Versão do protocolo do conjunto de réplicas autogerenciado.
Heartbeats
Os membros do conjunto de réplicas enviam heartbeats (pings) uns aos outros a cada dois segundos. Se um heartbeat não retornar dentro de 10 segundos, os outros membros marcam o membro inadimplente como inacessível.
Prioridade de membro
Depois que um conjunto de réplicas tiver uma primária estável, o algoritmo de eleição fará uma tentativa de "melhor esforço" para que a secundária com o priority
mais alto disponível chame uma eleição. A prioridade dos membros afeta tanto o momento como o resultado das eleições; as secundárias com maior prioridade convocam eleições relativamente mais cedo do que as secundárias com menor prioridade e também têm maior probabilidade de vencer. No entanto, uma instância de prioridade mais baixa pode ser escolhida como primária por períodos breves, mesmo que uma secundária de prioridade mais alta esteja disponível. Os membros do conjunto de réplicas continuam a convocar eleições até que o membro de maior prioridade disponível se torne primária.
Membros com um valor de prioridade 0
não podem se tornar primários e não concorrem à eleição. Para obter detalhes, consulte Membros do conjunto de réplicas de prioridade 0.
Leituras espelhadas
O MongoDB fornece leituras espelhadas para pré-preparar o cache de membros secundários elegíveis com os dados acessados mais recentemente. Com leituras espelhadas, o primário pode espelhar um subconjunto de operações que receber e enviá-las para um subconjunto de secundários elegíveis. A pré-preparação do cache de um secundário pode ajudar a restaurar o desempenho mais rapidamente após uma eleição.
Para obter detalhes, consulte Leituras espelhadas.
Perda de um Centro de Dados
Com um conjunto de réplicas distribuído, a perda de um centro de dados pode afetar a capacidade dos membros restantes em outro(s) centro(s) de dados de eleger uma primária.
Se possível, distribua os membros do conjunto de réplicas entre os centros de dados para maximizar a probabilidade de que, mesmo com a perda de um centro de dados, um dos membros restantes do conjunto de réplicas possa se tornar a nova primária.
Partição de rede
Uma partição de rede pode segregar um primário em uma partição com uma minoria de nós. Quando o primário detecta que só pode ver uma minoria de nós de votação no conjunto de réplicas, o primário diminui e se torna um secundário. Independentemente disso, um nó da partição que pode se comunicar com majority
dos nós de votação (incluindo ele próprio) realiza uma eleição para se tornar o novo primário.
Membros votantes
A configuração de membro do conjunto de réplicas members[n].votes
e state
de membro determinar se um membro vota em uma eleição.
Todos os membros do conjunto de réplicas que têm a configuração
members[n].votes
igual a 1 voto nas eleições. Para excluir um membro de votar em uma eleição, altere o valor da configuraçãomembers[n].votes
do membro para0
.Somente membros votantes nos seguintes estados são elegíveis para votar:
Membros não votantes
Embora os membros não votantes não votem nas eleições, esses membros mantêm cópias dos dados do conjunto de réplicas e podem aceitar operações de leitura de aplicativos cliente.
Como um conjunto de réplicas pode ter até 50 membros, mas apenas 7 membros votantes, os membros sem direito a voto permitem que um conjunto de réplicas tenha mais de sete membros.
Não votante (ou seja, votes
é 0
) membros devem ter priority
de 0.
Por exemplo, o seguinte conjunto de réplicas de nove membros tem sete membros votantes e dois membros não votantes.
Um membro não votante tem votes
e priority
iguais a 0
:
{ "_id" : <num>, "host" : <hostname:port>, "arbiterOnly" : false, "buildIndexes" : true, "hidden" : false, "priority" : 0, "tags" : { }, "secondaryDelaySecs" : NumberLong(0), "votes" : 0 }
Importante
Não altere o número de votos para controlar quais membros se tornarão primárias. Em vez disso, modifique a opção members[n].priority
. Só altere o número de votos em casos excepcionais. Por exemplo, para permitir mais de sete membros.
Para configurar um membro sem direito a voto, consulte Configurar um membro sem direito a voto do conjunto de réplicas autogerenciado.