So entfernen Sie automatisch einen toten Knoten aus dem RabbitMQ-Cluster

11

Ich plane, einen RabbitMQ-Cluster mit Ansible unter AWS VPC mit dem internen Load Balancer von Amazon als Frontend zu erstellen, um Verbindungen zu diesem Cluster herzustellen.

Irgendwelche Vorschläge, wie ein toter Knoten aus dem RabbitMQ-Cluster entfernt werden kann, basierend auf der Autoscaling-Regel, bei der Knoten auf und ab gehen können, oder wenn Sie Spot-Instanzen verwenden?

Wenn ein Knoten ausfällt, entfernt RabbitMQ ihn nicht automatisch aus der Replikationsliste, wie ich Node not runningin der Verwaltungsoberfläche sehen kann.

Ich habe es geschafft, eine skalierte Instanz automatisch über Ansible und Benutzerdaten mit dem Cluster zu verbinden.

Diagramm der Infrastruktur

Berlin
quelle
@ Pierre.Vriens, ich habe nur 1 Frage geändert, danke.
Berlin
Merci! Sie haben die anderen 4 (oder so) Fragen, die ich hoffe, nicht zerstört. Vielleicht behalten Sie sie als Folgefrage, soweit sie noch relevant sind?
Pierre.Vriens
Ja, die Fragen sind immer noch relevant, aber diese ist die wichtigste. Ich werde später eine weitere Frage stellen :) danke!
Berlin
1
@Berlin Ich habe ein Diagramm gezeichnet, das darstellt, was ich denke, dass Sie beschreiben. Wenn Sie etwas anderes gemeint haben, lassen Sie es mich bitte wissen und ich werde mich anpassen.
Richard Slater
1
Hey @ Pierre.Vriens - Es macht mir nichts aus, dass ich ein paar Minuten Zeit hatte und meine Annahme klären wollte. Theoretisch könnte ich sie meiner Antwort hinzufügen, und das könnte ich auch tun.
Richard Slater

Antworten:

4

Erwägen Sie die Verwendung des Rabbitmq / Rabbitmq-Autocluster- Plugins:

Ein RabbitMQ-Plugin, das Knoten mithilfe einer Reihe von Peer-Erkennungsmechanismen automatisch gruppiert:

  • Konsul ,
  • etcd2
  • DNS A-Einträge
  • AWS EC2-Tags
  • AWS-Autoscaling-Gruppen

Es ist einiges an Konfiguration erforderlich, um dieses Setup zu erhalten, einschließlich des Festlegens von IAM-Richtlinien und des Hinzufügens von EC2-Tags zu den Instanzen, an denen Sie teilnehmen möchten.

Wenn Sie AWS Autoscaling Groups verwenden würden, würden Sie Folgendes zu Ihrem hinzufügen rabbitmq.config:

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

Wenn Sie keine AWS-Autoscaling-Gruppen verwenden, können Sie dennoch das gewünschte Ergebnis mithilfe von Tags auf Ihren EC2-Instanzen erzielen:

[
  {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, "..."}
  ]}
].

Nach alledem empfehle ich dringend, Consul von HashiCorp als Service Discovery-Mechanismus zu verwenden. Auf lange Sicht erhalten Sie erheblich mehr Flexibilität bei der Entkopplung Ihrer Teile Ihres Systems voneinander.

Richard Slater
quelle
Vielen Dank für die ausführliche Erklärung und das Diagramm, damit AFAIK rabbitmq/rabbitmq-autocluster pluginauch weiß, dass der Knoten aus der Replikationsliste entfernt werden muss, sobald der Knoten ausgefallen ist. Wenn ich noch fragen darf, dachte ich, ich möchte mit dem 2-nodeCluster beginnen. Schlagen Sie vor, mit dem 3-nodeCluster zu beginnen wie Sie in Ihrem Diagramm mit der Richtlinie `rabbitmqctl set_policy ha-all" "{" ha-mode ":" all "," ha-sync-mode ": "omatic"} '`beschreiben? oder soll ich es in einer anderen frage posten?
Berlin
1
Möglicherweise eine andere Frage, da die Formatierung in Kommentaren nicht so einfach zu verwenden ist. Ich habe Kunden bei der Einführung der Cloud immer empfohlen, eine größere Anzahl kleiner Instanzen anstelle der umgekehrten zu verwenden. Dies liegt daran, dass in der Cloud ein Fehler erwartet wird. Wenn Sie einen 2-Knoten-Cluster haben und 1 ausfällt, haben Sie 50% Ihrer Kapazität verloren. Wenn Sie einen 3-Knoten-Cluster haben und 1 ausfällt, verlieren Sie nur 33%.
Richard Slater
Ich habe meinen Cluster mit konfiguriert rabbitmq/rabbitmq-autocluster pluginund es funktioniert ziemlich gut, aber wenn der Knoten ausfällt, entfernt RabbitMQ ihn nicht aus der Replikationsliste. Irgendeine Idee warum?
Berlin
1
Haben Sie die Konfigurationsoption für die Clusterbereinigung aktiviert?
Richard Slater
danke, fand es https://github.com/aweber/rabbitmq-autocluster/wiki/General-Settings, ich werde das versuchen.
Berlin