Wie einrichten autoskalierender RabbitMQ-Cluster, AWS
Ich versuche, Weg von SQS zu RabbitMQ für den messaging-Dienst. Ich bin auf der Suche nach Aufbau eine stabile, hohe Verfügbarkeit queuing-Dienst. Jetzt werde ich mit cluster.
Aktuellen Implementierung ,
Ich habe drei EC2-Maschinen mit RabbitMQ mit dem management plugin installiert, ein AMI , und dann habe ich explizit auf die einzelnen von der Maschine, und fügen Sie
sudo rabbitmqctl join_cluster rabbit@<hostnameOfParentMachine>
Mit HA-Eigenschaft auf all gesetzt und die Synchronisation funktioniert. Und einen load balancer auf top es mit einem DNS zugewiesen. Bisher funktioniert diese Sache.
Erwartet Umsetzung: Erstellen Sie eine autoskalierender Cluster-Umgebung, wo die Maschinen, die nach Oben/nach Unten hat sich anzuschließen/zu Entfernen, die cluster dynamisch. Was ist der beste Weg, dies zu erreichen? Bitte helfen Sie.
- autoskalierender basiert auf? cloudwatch?
- Ja . Aber dann die skalierte Instanz dem cluster beitreten automatisch.
- Seien Sie vorsichtig - Erlang in Cluster-Modus ist nicht tolerant zu Netzwerk-Partitionen (inklusive Mikro-Partitionen), und kann einige Probleme verursachen; ich habe regelmäßig micro-Partitionen auf AWS was bringen würde mein cluster nach unten. Ich würde empfehlen, läuft eine Inszenierung, cluster für eine Weile, bevor es für die Produktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich eine ähnliche Konfiguration vor 2 Jahren.
Entschied ich mich für amazon VPC, standardmäßig in meinem design hatte zwei RabbitMQ Instanzen immer läuft, und konfiguriert im cluster (sogenannte master-Knoten).
Der rabbitmq-cluster war hinter ein interne amazon load balancer.
Erstellte ich ein AMI mit RabbitMQ-und Verwaltungs-plug-in konfiguriert (genannt "master-AMI"), und dann konfigurierte ich die autoskalierender Regeln.
wenn ein autoskalierender alarm ausgelöst wird eine neue master-AMI gestartet wird.
AMI führt den follow-Skript das erste mal ausgeführt wird:
Des Skripts verwendet die HTTP-API "http://internal-myloadbalamcer-xxx.com:15672/api/nodes" zu finden-Knoten, dann wählen Sie ein und bindet die neue AMI auf den cluster.
Als HA-Politik, die ich beschlossen, dies zu nutzen:
Gut, die Verknüpfung ist "ziemlich" einfach, das problem ist, zu entscheiden, wenn Sie können, entfernen Sie den Knoten aus dem cluster.
Sie können nicht entfernen einen Knoten basierend auf autoskalierender Regel, denn Sie können Nachrichten in den Warteschlangen, die Sie haben zu konsumieren.
Beschloss ich, führen Sie ein Skript regelmäßig ausführen, um die beiden master-Knoten-Instanzen:
Dies ist weitgehend das, was ich getan, hoffe es hilft.
[BEARBEITEN]
Bearbeitete ich die Antwort, da gibt es dieses plugin, das helfen kann:
Schlage ich vor, dies zu sehen: https://github.com/rabbitmq/rabbitmq-autocluster
Das plugin wurde verschoben, um die offizielle RabbitMQ-repository und kann easly lösen diese Art von Problemen
Wir hatten vor kurzem ähnliches problem.
Wir haben versucht, zu verwenden https://github.com/rabbitmq/rabbitmq-autocluster, fand es aber zu kompliziert für unseren Anwendungsfall.
Ich erstellt terraform-Konfiguration zu drehen X RabbitMQ Knoten auf der Y-Subnetze (availability zones) mit Autoskalierender Gruppe.
TL;DR https://github.com/ulamlabs/rabbitmq-aws-cluster
Die Konfiguration erstellt IAM-Rolle zu ermöglichen, Knoten zu autodiscover alle anderen Knoten in der Autoskalierender Gruppe.