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).