Como gerenciar o Consul e seu quorum em ambientes com dimensionamento automático?

8

Temos ambientes Docker de dimensionamento automático nos quais usamos o Consul para descoberta de serviços. Esses ambientes podem adicionar ou remover uma instância a cada poucos minutos.

Nosso teste inicial do Consul mostrou que era muito fácil para o Consul perder seu quorum. Talvez ingenuamente, nossa primeira experiência foi uma configuração na qual iniciaríamos um servidor Consul em todas as instâncias e fazer com que esse servidor Consul ingressasse no cluster. Essa parte estava funcionando bem.

No entanto, o Consul não colhe nós inacessíveis rapidamente (leva cerca de 72 horas?) Em ambientes muito escaláveis, o que significa que a lista de servidores Consul continua crescendo e, com o tempo, a maioria deles é "inacessível" e, nesse ponto, o cluster perde seu quorum.

Vimos a resposta de armon de quase dois anos atrás sobre esta questão no GitHub: https://github.com/hashicorp/consul/issues/454#issuecomment-125767550

A maioria desses problemas é causada por nosso comportamento padrão de tentar uma licença normal. Nosso modelo mental é que os servidores têm vida longa e não desligam por qualquer motivo que não seja a perda inesperada de energia ou uma manutenção normal, caso em que você precisa sair do cluster. Em retrospecto, isso foi um padrão ruim. Quase tudo isso pode ser evitado matando -9 o servidor Consul, afetando a simulação de perda de energia.

Estávamos tentando evitar a execução de nós dedicados e duradouros. Lembre-se de que, em nenhum momento, removemos instâncias N / 2 + 1 de um grupo de dimensionamento automático. O cluster EC2 pode, a qualquer momento, alcançar a maioria dos nós e deve poder votar se um nó deve ser removido do cluster Consul (ou outra ferramenta).

Alexandre
fonte
Eu imagino que uma resposta significativa não seja possível sem mais dados, como: Qual o tamanho (em números) da população de sua instância? Você tentou depurar o mecanismo subjacente de quorum / consenso para ver o que causa os atrasos na colheita de membros inativos? Qual é o momento da remoção da instância, você rastreou se a instância do consul realmente tem tempo para enviar a notícia de sua morte (graciosa ou não) para o resto do ASG?
Michael Bravo
Você está iniciando-os como um "modo de servidor" ou "modo de cliente"? A documentação leave_on_terminate diz que "modo cliente" será padronizado como true. Para mim parece que agentes cônsul iniciados como "server-mode" deve ser mais longa do que você descreve
Timina
Obrigado a todos. A resposta de Tensibai é o que estávamos procurando.
Alexandre

Respostas:

6

Eu definiria a leave_on_terminateopção como true. Conforme a documentação

leave_on_terminateSe ativado, quando o agente receber um sinal TERM, ele enviará uma mensagem Leave para o restante do cluster e sairá normalmente. O comportamento padrão desse recurso varia de acordo com a execução ou não do agente como cliente ou servidor (antes do Consul 0.7, o valor padrão era incondicionalmente definido como falso). Em agentes no modo cliente, esse padrão é true e para agentes no modo servidor, o padrão é false.

O que acontece quando um nó é encerrado normalmente é enviar o SIGTERM a todos os processos antes do encerramento, com essa configuração no agente consul deixando o cluster para que não seja considerado um nó que pode ser reiniciado e voltar ao cluster em um algumas horas (que é o que sua cotação diz que faz por padrão).

Tensibai
fonte
Com isso ativado, o cônsul do cliente morto é colhido imediatamente ou ainda há um atraso? Eu testei esta opção on-modo cliente Consul e após a execução shutdown -h now, nó mortos ainda mostra-se ...
Casper
@ Casper, há várias maneiras de isso não funcionar conforme o esperado, acho que vai depender se o sistema daemon deixar tempo suficiente para que o consul-client pare normalmente (supondo que você não tenha iniciado o cliente com um gerenciador de daemon e não como um comando )
Tensibai 20/11/19
Obrigado por responder, já faz um tempo :) Então, meu objetivo é ter um tempo de colheita baixo para nós mortos, as 72 horas padrão são muito longas e parece que não há como personalizar o tempo de colheita nos nós clientes
Casper
@ Casper, como eu disse acima, precisaríamos de mais detalhes para dar algum conselho; em uma configuração do sistema, a parte de parada pode ser ajustada para permitir que o cliente do consul pare corretamente antes de continuar o processo de desligamento para que ele possa se remover, ou há um bug em algum lugar , mas com a informação atual, só podemos adivinhar e locais sE não são bem adaptados para este tipo de depuração
Tensibai