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.
Verificações de pré-requisitos
Clusters saudáveis veem eleições apenas durante eventos esperados e infrequentes. As eleições normalmente acontecem durante os seguintes cenários:
Configuração inicial
Operações de manutenção, como
rs.stepDown()ours.reconfig()Adições de novos membros com
rs.add()Indisponibilidade primária por mais tempo do que o
timeoutconfigurado, onde o padrão é 10 segundos
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.
Verifique as mensagens de registro
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. |
Problemas e Resoluções Comuns
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.
Esgotação de recursos
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.
Queries ineficientes
Para verificar se seu sistema está esgotando recursos devido a queries ineficientes:
Procure entradas em seus registros em que o valor do componente ("c")
COMMANDseja.Para cada entrada, o campo
bytesReadindica quantos bytes um determinado comando lê. Preste atenção aos comandos com valoresbytesReadgrandes.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.
Configuração incorreta do conjunto de réplicas
Prioridade de nó
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
Configurações de conjunto de réplicas
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.
Particionamento de rede ou latência
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:
Verifique se há ocorrências comuns das seguintes mensagens em seus registros:
mensagemDescriçã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.
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 dereplSetGetStatusnó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.
Verificar resolução
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.
Diagnósticos a serem coletados para mais suporte
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ídars.status()saída