Como remover automaticamente um nó morto do cluster RabbitMQ

11

Estou planejando criar um cluster RabbitMQ usando o Ansible no AWS VPC com o balanceador de carga interno da Amazon como o frontend para apontar conexões a ele.

Alguma sugestão de como remover um nó morto do cluster RabbitMQ com base na regra de escalonamento automático em que os nós podem subir e descer, ou se você estiver usando instâncias spot?

Quando um nó é desativado, o RabbitMQ não o remove automaticamente da lista de replicação, como posso ver Node not runningna interface de gerenciamento.

Consegui ingressar no cluster uma instância dimensionada automaticamente via Ansible e userdata.

Diagrama de infraestrutura

Berlim
fonte
@ Pierre.Vriens, mudei para apenas 1 pergunta, obrigado.
Berlim
Merci! Você não destruiu as outras 4 (mais ou menos) perguntas que espero. Talvez mantê-los como pergunta seguinte, na medida em que ainda são relevantes?
Pierre.Vriens
Sim, as perguntas ainda são relevantes, mas essa é a mais importante. Vou postar outra pergunta mais tarde :) obrigado!
Berlim
11
@Berlin Eu desenhei um diagrama que representa o que eu acho que você está descrevendo, se você quis dizer outra coisa, por favor me avise e eu vou me adaptar.
Richard Slater
11
Hey @ Pierre.Vriens - Não me importo de ter alguns minutos e queria esclarecer minha suposição, teoricamente, poderia adicioná-la à minha resposta, e posso fazê-lo.
Richard Slater

Respostas:

4

Considere usar o plug- in rabbitmq / rabbitmq-autocluster :

Um plug-in RabbitMQ que agrupa nós automaticamente usando vários mecanismos de descoberta de pares:

  • Consul ,
  • etcd2
  • Registros DNS A
  • Tags AWS EC2
  • Grupos de escalonamento automático da AWS

bastante configuração para conectar-se a essa configuração, incluindo a definição de políticas do IAM e a adição de tags EC2 às instâncias em que você deseja participar do cluster.

Se você usar o AWS Autoscaling Groups, adicione o seguinte ao seu rabbitmq.config:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_autoscaling, true},
    {aws_ec2_region, "us-west-2"}
  ]}
].

Se você não estiver usando o AWS Autoscaling Groups, ainda poderá alcançar o resultado desejado usando tags nas suas instâncias do EC2:

[
  {rabbit, [ ... ]},
  {autocluster, [
    {backend, aws},
    {aws_ec2_tags, [{"region", "us-west-2"}, {"service", "rabbitmq"}]},
    {aws_ec2_region, "us-east-1"},
    {aws_access_key, "..."},
    {aws_secret_key, "..."}
  ]}
].

Com tudo isso dito, eu recomendo fortemente o uso do Consul da HashiCorp como seu mecanismo de descoberta de serviços, a longo prazo, você obtém uma flexibilidade significativamente maior em termos de dissociar suas partes do sistema.

Richard Slater
fonte
obrigado pela explicação detalhada e pelo diagrama, para que o AFAIK rabbitmq/rabbitmq-autocluster plugintambém saiba remover o nó da lista de replicação depois que o nó estiver inoperante, mais uma coisa, se me perguntar, pensei em começar com o 2-nodecluster, você sugeriu começar com o 3-nodecluster como você descreve em seu diagrama com a política `rabbitmqctl set_policy ha-all" "'{" ha-mode ":" all "," ha-sync-mode ":" automatic "}'`? ou devo postá-lo em outra pergunta?
Berlim
11
Possivelmente outra questão, pois a formatação dos comentários não é tão fácil de usar. Sempre aconselhei os clientes ao adotar a nuvem para usar um número maior de pequenas instâncias, em vez da inversa. Isso ocorre porque a falha é esperada na nuvem, se você tiver um cluster de 2 nós e 1 falhar, perderá 50% de sua capacidade, enquanto que se você tiver um cluster de 3 nós e 1 falhar, perderá apenas 33%.
Richard Slater
Eu configurei meu cluster usando rabbitmq/rabbitmq-autocluster plugine ele funciona muito bem, no entanto, quando o nó é desativado, o RabbitMQ não o remove da lista de replicação, tem alguma idéia do porquê?
Berlin
11
Você ativou a opção de configuração Limpeza de cluster?
Richard Slater
obrigado, encontrei https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings, vou tentar isso.
Berlin