Cómo eliminar automáticamente un nodo muerto del clúster RabbitMQ


11

Estoy planeando crear el clúster RabbitMQ usando Ansible en AWS VPC con el equilibrador de carga interno de Amazon como la interfaz para apuntar conexiones a él.

¿Alguna sugerencia de cómo eliminar un nodo muerto del clúster RabbitMQ basado en la regla de autoescalado donde los nodos pueden subir y bajar, o si está utilizando instancias puntuales?

Cuando un nodo cae, RabbitMQ no lo elimina de la lista de replicación automáticamente, puedo verlo Node not runningen la IU de administración.

Logré unir al clúster una instancia escalada automáticamente a través de Ansible y userdata.

Diagrama de Infraestructura


@ Pierre.Vriens, cambié a solo 1 pregunta, gracias.
Berlín

Merci! No destruiste las otras 4 (más o menos) preguntas, espero. Tal vez mantenerlos como una pregunta de seguimiento, en la medida en que todavía son relevantes.
Pierre.Vriens

Sí, las preguntas siguen siendo relevantes, pero esta es la más importante. Publicaré otra pregunta más tarde :) ¡gracias!
Berlín

1
@Berlin Dibujé un diagrama que representa lo que creo que estás describiendo, si querías decir algo más, házmelo saber y me adaptaré.
Richard Slater

1
Hola @ Pierre.Vriens: no me importa tener unos minutos y quería aclarar mi suposición, teóricamente, podría agregarlo a mi respuesta, y bien podría hacerlo.
Richard Slater

Respuestas:


4

Considere usar el complemento rabbitmq / rabbitmq-autocluster :

Un complemento RabbitMQ que agrupa nodos automáticamente usando una serie de mecanismos de descubrimiento de pares:

  • cónsul ,
  • etcd2
  • Registros DNS A
  • Etiquetas de AWS EC2
  • Grupos de escalado automático de AWS

Hay un poco de configuración para conectar para obtener esta configuración, incluida la configuración de políticas de IAM y la adición de etiquetas EC2 a las instancias en las que desea ser parte de su clúster.

Si usara AWS Autoscaling Groups entonces agregaría lo siguiente a su rabbitmq.config:

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

Si no está utilizando AWS Autoscaling Groups, aún puede lograr el resultado deseado utilizando etiquetas en sus instancias 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, "..."}
  ]}
].

Dicho todo esto, recomiendo utilizar Consul de HashiCorp como su mecanismo de descubrimiento de servicios, a la larga, obtendrá una flexibilidad significativamente mayor en términos de desacoplamiento de sus partes del sistema.


gracias por la explicación detallada y el diagrama, por lo que AFAIK rabbitmq/rabbitmq-autocluster plugintambién sabrá eliminar el nodo de la lista de replicación una vez que el nodo esté inactivo, una cosa más si puedo preguntar, pensé comenzar con el 2-nodeclúster, ¿me sugiere comenzar con el 3-nodeclúster? como usted describe en su diagrama con la política `rabbitmqctl set_policy ha-all" "'{" ha-mode ":" all "," ha-sync-mode ":" automatic "}'`? o debería publicarlo en otra pregunta?
Berlín

1
Posiblemente otra pregunta ya que el formato en los comentarios no es tan fácil de usar. Siempre he aconsejado a los clientes cuando adoptan la nube que usen un mayor número de instancias pequeñas en lugar de lo inverso. Esto se debe a que se espera una falla en la nube, si tiene un clúster de 2 nodos y 1 falla, ha perdido el 50% de su capacidad, mientras que si tiene un clúster de 3 nodos y 1 falla, solo pierde el 33%.
Richard Slater

He configurado mi clúster usando rabbitmq/rabbitmq-autocluster pluginy funciona bastante bien, sin embargo, cuando el nodo se cae, RabbitMQ no lo elimina de la lista de replicación, ¿alguna idea de por qué?
Berlín

1
¿Ha habilitado la opción de configuración Cluster Cleanup?
Richard Slater

gracias, lo encontré https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings, lo intentaré.
Berlín
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.