Comment supprimer automatiquement un nœud mort du cluster RabbitMQ

11

Je prévois de créer un cluster RabbitMQ à l'aide d'Ansible sur AWS VPC avec l'équilibreur de charge interne Amazon comme interface pour pointer les connexions vers celui-ci.

Une suggestion sur la façon de supprimer un nœud mort du cluster RabbitMQ en fonction de la règle de mise à l'échelle automatique où les nœuds peuvent monter et descendre, ou si vous utilisez des instances ponctuelles?

Lorsqu'un nœud tombe en panne, RabbitMQ ne le supprime pas automatiquement de la liste de réplication, je peux le voir Node not runningdans l'interface de gestion.

J'ai réussi à joindre au cluster une instance mise à l'échelle automatiquement via Ansible et les données utilisateur.

Schéma de l'infrastructure

Berlin
la source
@ Pierre.Vriens, j'ai changé pour seulement 1 question, merci.
Berlin
Merci! Vous n'avez pas détruit les 4 autres (ou plus) questions que j'espère. Peut-être les garder comme question de suivi, dans la mesure où ils sont toujours pertinents?
Pierre.Vriens
Oui, les questions sont toujours d'actualité, mais celle-ci est la plus importante. Je posterai une autre question plus tard :) merci!
Berlin
1
@Berlin J'ai dessiné un diagramme qui représente ce que je pense que vous décrivez, si vous vouliez dire autre chose, faites-le moi savoir et je m'adapterai.
Richard Slater
1
Hé @ Pierre.Vriens - Cela ne me dérange pas d'avoir eu quelques minutes et je voulais clarifier mon hypothèse, théoriquement, je pourrais l'ajouter à ma réponse, et je peux très bien le faire.
Richard Slater

Réponses:

4

Pensez à utiliser le plugin rabbitmq / rabbitmq-autocluster :

Un plugin RabbitMQ qui regroupe automatiquement les nœuds à l'aide d'un certain nombre de mécanismes de découverte par les pairs:

  • Consul ,
  • etcd2
  • Enregistrements DNS A
  • Balises AWS EC2
  • Groupes de mise à l'échelle automatique AWS

Il y a pas mal de configuration à brancher pour obtenir cette configuration, y compris la définition de stratégies IAM et l'ajout de balises EC2 aux instances que vous souhaitez faire partie de votre cluster.

Si vous deviez utiliser AWS Autoscaling Groups, vous ajouteriez les éléments suivants à votre rabbitmq.config:

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

Si vous n'utilisez pas AWS Autoscaling Groups, vous pouvez toujours obtenir le résultat souhaité en utilisant des balises sur vos instances 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, "..."}
  ]}
].

Cela dit, je recommande fortement d'utiliser Consul by HashiCorp comme mécanisme de découverte de services, à long terme, vous obtenez beaucoup plus de flexibilité en termes de découplage de vos parties de votre système les unes des autres.

Richard Slater
la source
merci pour l'explication détaillée et le diagramme, donc AFAIK rabbitmq/rabbitmq-autocluster pluginsaura également supprimer le noeud de la liste de réplication une fois que le noeud est en panne, encore une chose si je peux demander, je pensais commencer par le 2-nodecluster, suggérez-vous de commencer par le 3-nodecluster comme vous le décrivez dans votre diagramme avec la politique `rabbitmqctl set_policy ha-all" "'{" ha-mode ":" all "," ha-sync-mode ":" automatic "}' '? ou devrais-je l'afficher dans une autre question?
Berlin
1
Peut-être une autre question car la mise en forme dans les commentaires n'est pas si simple à utiliser. J'ai toujours conseillé aux clients lors de l'adoption du cloud d'utiliser un plus grand nombre de petites instances plutôt que l'inverse. En effet, un échec est prévu dans le cloud, si vous avez un cluster à 2 nœuds et 1 échoue, vous avez perdu 50% de votre capacité, tandis que si vous avez un cluster à 3 nœuds et 1 échoue, vous ne perdez que 33%.
Richard Slater
J'ai configuré mon cluster à l'aide rabbitmq/rabbitmq-autocluster pluginet cela fonctionne plutôt bien mais lorsque le nœud tombe en panne, RabbitMQ ne le supprime pas de la liste de réplication, une idée pourquoi?
Berlin
1
Avez-vous activé l'option de configuration Cluster Cleanup?
Richard Slater
merci, https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settingsje l'ai trouvé , je vais essayer ça.
Berlin