Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Menu Docs
Página inicial do Docs
/

Solucionar problemas de eleições frequentes

Os conjuntos de réplicas ocasionalmente executam eleições quando um primário é desativado ou fica indisponível. Durante uma eleição, o conjunto de réplicas não pode aceitar escritas até que eleja com sucesso um novo primary, embora a maioria das leituras possa continuar em secundários se configurado.

Espere esse comportamento durante failovers raros ou manutenção planejada. No entanto, eleições frequentes, em que o primário muda com frequência durante a operação normal, causam interrupções repetidas de gravação e, em alguns casos, reversões de dados não comprometidos.

Esta página contém problemas e resoluções comuns para eleições frequentes para garantir um diagnóstico rápido e evitar interrupções de gravação de aplicação . Se precisar de suporte adicional após revisar as seções a seguir, entre em contato com o Suporte técnico.

Clusters saudáveis veem eleições apenas durante eventos esperados e infrequentes. As eleições normalmente acontecem durante os seguintes cenários:

Verifique se seu sistema passa por eleições frequentes fora desses cenários, executando o método ou várias vezes em um período definido, como em uma hora ou ao longo do dia. Compare o valor do replSetGetStatus rs.status() primário _id relatado a cada vez para rastrear se e quando o nó primário for alterado, o que significa que ocorreu uma eleição .

Observação

Se você vir um alerta TOO_MANY_ELECTIONS no Ops Manager, é provável que você esteja enfrentando eleições frequentes.

Você também pode consultar as mensagens de registro do seu sistema para entradas onde o"c" valor do ELECTION componente () é. Se seus registros exibirem várias ocorrências das seguintes mensagens em intervalos curtos, como várias vezes por hora ou dia sem manutenção planejada, isso normalmente indica um conjunto de réplicas não íntegros causado por instabilidade da rede, hosts não íntegros ou configuração incorreta:

mensagem
Descrição

"Iniciando uma eleição, já que não vimos nenhum PRIMARY no período de tempo limite da eleição "

Registrado por outros membros quando o primário desce.

"transição de SECUNDÁRIO para PRIMARY"

Um novo primário assume.

"não consegue ver a maioria do conjunto, abandonando o primary"

O primário anterior se torna secundário.

A seção a seguir descreve problemas comuns que podem fazer com que um conjunto de réplicas realize eleições frequentes inesperadas. Antes de entrar em contato com o suporte, verifique se as seguintes armadilhas causam eleições frequentes em seu conjunto de réplicas.

Queries intensivas, grandes agregações e tarefas em segundo plano, como criação de índices ou backups, podem levar ao alto uso da CPU, latência ou falhas de disco e pressão de memória. O esgotamento de recursos pode causar eleições frequentes porque o primário pode deixar de responder ou ser incapaz de processar os heartbeats a tempo.

Para verificar se seu sistema está esgotando recursos devido a queries ineficientes:

  1. Procure entradas em seus registros em que o valor do componente ("c") COMMAND seja.

  2. Para cada entrada, o campo bytesRead indica quantos bytes um determinado comando lê. Preste atenção aos comandos com valores bytesRead grandes.

  3. Se os registros de data/hora de suas queries ineficientes ocorrerem próximos aos registros de data/hora de múltiplas eleições, as queries ineficientes provavelmente estão causando suas eleições frequentes.

Use os seguintes recursos para otimizar suas queries:

  • Administre seu volume de trabalho com mais eficiência usando índices compostos.

  • Revise nossa diretriz ESR para criar novos índices.

  • No Atlas, revise seu consultor de desempenho regularmente para obter sugestões de índice com base em seu volume de trabalho mais recente.

Os conjuntos de réplicas convocam eleições continuamente até que elejam o membro com a maior prioridade. Se você não definir as prioridades dos membros adequadamente, as eleições podem ocorrer com mais frequência, com membros inesperados se tornando primários.

Para verificar os valores de prioridade de cada membro, execute o replSetGetConfig comando ou rs.conf() o método. O exemplo a seguir mostra a saída do rs.conf() método para um conjunto de réplicas com prioridades configuradas incorretamente:

rs.conf().members
[
{
_id: 0,
host: "rs0-0.example.net:27017",
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 1,
tags: { dc: "primaryDC" },
secondaryDelaySecs: Long(0),
votes: 1
},
{
_id: 1,
host: "rs0-1.example.net:27017",
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 10,
tags: { dc: "remoteDC1" },
secondaryDelaySecs: Long(0),
votes: 1
},
{
_id: 2,
host: "rs0-2.example.net:27017",
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 9,
tags: { dc: "remoteDC2" },
secondaryDelaySecs: Long(0),
votes: 1
},
{
_id: 3,
host: "rs0-3.example.net:27017",
arbiterOnly: false,
buildIndexes: true,
hidden: false,
priority: 8,
tags: { dc: "analyticsDC" },
secondaryDelaySecs: Long(0),
votes: 1
}
]

No exemplo acima, o primário atual tem menor prioridade do que os outros três membros. Se um secundário de alta prioridade estiver íntegro e estiver no estado SECUNDÁRIO, ele pode desencadear uma eleição para assumir o controle como primary.

Certifique-se de configurar adequadamente as prioridades para os membros do conjunto de réplicas:

  • Atribua a maior prioridade ao servidor que você deseja servir consistentemente como principal

  • Atribua prioridades padrão ou inferiores a outros membros para reduzir sua probabilidade de se tornarem primários

  • Atribuir nós com alta prioridade de atraso de replicação baixa

Para verificar as definições de configuração do conjunto replSetGetConfig de réplicas, execute o comando ou rs.conf() o método. O exemplo a seguir mostra um conjunto de réplicas com electionTimeoutMillis configurado muito baixo:

rs.conf().settings
{
chainingAllowed: true,
heartbeatIntervalMillis: 2000,
heartbeatTimeoutSecs: 10,
electionTimeoutMillis: 1500, // lower than a single heartbeat cycle
catchUpTimeoutMillis: 2000,
getLastErrorModes: { },
getLastErrorDefaults: {
w: 1,
wtimeout: 0
},
replicaSetId: ObjectId("58858acc1f5609ed986b641b")
}

Certifique-se settings.electionTimeoutMillis de que o valor para não seja muito baixo. No exemplo acima, o settings.electionTimeoutMillis valor é menor que. Isso significa que um nó pode declarar o primário "inativo" antes da conclusão de um intervalo de pulsação completo, causando eleições settings.heartbeatIntervalMillis desnecessárias.

Se o seu sistema sofrer partição de rede ou se os nós receberem mensagens de pulsação atrasadas, os secundários poderão ver incorretamente o primário como indisponível e iniciar eleições.

Para verificar se você está enfrentando partições de rede:

  1. Verifique se há ocorrências comuns das seguintes mensagens em seus registros:

    mensagem
    Descrição

    "Iniciando uma eleição, já que não vimos nenhum PRIMARY no período de tempo limite da eleição "

    Um secundário iniciou uma eleição porque não recebeu heartbeats do primário dentro da janela de tempo limite configurada.

    "não consegue ver a maioria do conjunto, abandonando o primary"

    O primário renunciou porque não consegue se comunicar com a maioria dos secundários votantes.

  2. Execute rs.status() ou a partir de nós diferentes para mostrar diferentes visualizações de quais membros são acessíveis, o que indica uma divisão entre subconjuntos de replSetGetStatus nós.

Para ajudar a restaurar a conectividade após uma partição:

  • Verifique as configurações de firewalls para procurar regras que possam bloquear a comunicação entre os membros.

  • Verifique os nomes de host DNS.

  • Certifique-se de adicionar seu endereço IP à sua lista de acesso IP.

Depois de resolver a causa raiz, confirme que as eleições frequentes não ocorrem mais executando rs.status() novamente. A saída mostra exatamente um membro no estado primário e que o primário permanece estável durante sua janela de observação normal sem alterações não planejadas.

Você também pode consultar seus registros de sistema. Procure as mensagens de registro listadas acima em seus registros de sistema para garantir que as eleições não ocorram várias vezes em intervalos curtos.

Se você ainda não conseguir resolver o problema, entre em contato com o Suporte técnico com as seguintes informações de diagnóstico:

  • Mensagens de registro relevantes durante o período afetado

  • rs.config() saída

  • rs.status() saída

Voltar

Versão do protocolo de conjunto de réplica

Nesta página