Plaintext
CheatSheet
RabbitMQ
Das CLI: rabbitmqctl PlugIns steuern
Das CLI zu RabbitMQ unterstützt unter anderem folgende RabbitMQ durch Plugins erweitern:
Parameter:
--erlang-cookie
rabbitmq-plugins enable plugin
übergibt ein Erlangcookie anstelle der im Dateisystem
schaltet “plugin” ein
abgelegten Cookiedatei (Siehe: Cluster).
-n <name>@<knoten> rabbitmq-plugins disable plugin
führt den Befehl nicht auf dem lokalen Knoten aus, schaltet “plugin” aus
sondern auf <name>@<knoten>. Hierzu muss für das
CLI das Erlang-Cookie des Knotens gesetzt sein. Diese rabbitmq-plugins list
Option ist unabhängig von einem Clusterbetrieb des listet eingeschaltete PlugIns.
RabbitMQ und funktioniert auf Basis der
Erlang-Runtime.
Hinweis: rabbitmq-plugins unterstützt den Parameter -v
--dry-run für “verbose” und --offline, der die Ausführung auf einem
CheatSheet führt den Befehl nicht aus, sondern gibt nur eine inaktiven Node erlaubt.
RabbitMQ Information hierzu aus.
v1.02 -q | --quiet
Nützliche PlugIns
unterdrückt Ausgaben bei Befehlsausführung. managment administratives WebUI für RabbitMQ.
Erstellt am: 28. April 2020 Installation & Inbetriebnahme
shovel verbindet zwei Messagebroker wie Consumer und
RabbitMQ benötigt zum Betrieb eine Erlang /
Producer.
Autor(en): Peter Dreuw OTP-Installation. Diese muss den der jeweiligen Version
<peter.dreuw@credativ.de> benötigten Mindest-Versionsstand haben. In den meisten
Fällen wird man die Erlang/OTP-Pakete sowie RabbitMQ shovel_management WebUI zum Shovel-PlugIn.
credativ GmbH mit den Paketen aus der Betriebssystemdistribution
Trompeterallee 108 einsetzen. Vergl. federation verbindet Messagebroker ober WAN-Grenzen
41189 Mönchengladbach https://www.rabbitmq.com/which-erlang.html oder Versionsgrenzen.
Tel. +49 2166 9901-0 RabbitMQ Konfigdatei
www.credativ.de federation_management WebUI zum Federation-PlugIn.
Die rabbitmq.conf und rabbitmq-env.conf finden sich
bei den meisten Linux-Distributionen unter /etc/rabbitmq,
lager Konfigurierbares Logging (ab RabbitMQ Vers. 3.7 im
möglich ist auch $RABBITMQ_HOME/etc/rabbitmq. Unter
Einführung Core integriert)
Windows meist %APPDATA%\rabbitmq.
RabbitMQ ist eine von Pivotal Software gepflegte Open rabbitmq.conf ist ab Version 3.7 im sysctl-Format. Ältere
Source Software unter der Mozilla Public License. RabbitMQ Versionen beinhalten einen gültigen Erlangausdruck (Listen Alle “offiziellen” PlugIn-Namen beginnen mit “rabbitmq_”.
wurde in Erlang geschrieben und wird als Message und Tupel). Ein kommentiertes Muster zum alten So wird z.B. aus federation_management aus der o.g.
Orientated Middleware bzw. Message Broker eingesetzt. Es Konfigurationsformat findet sich unter Liste rabbitmq_federation_management. Weitere offizielle
kann als Single-Server oder im Cluster mit verschiedenen https://github.com/rabbitmq/rabbitmq-server/ PlugIns: LDAP, http-auth, SASL, AMPQ1.0, MQTT,
Netzwerkstrukturen eingesetzt werden. blob/v3.6.x/docs/rabbitmq.config.example STOMP, WebSTOMP, WebMQTT oder Queue-Sharding.
1 ©credativ GmbH 2018, Lizenz: Creative Commons CC-BY-SA 3.0
CheatSheet
RabbitMQ
Netzwerkports Erlang-Cookie Der Befehl muss auf einem aktiven Knoten des Clusters
4369 Erlang peer discovery (nur Clusterbetrieb) Das Cookie ist eine simple Textdatei mit einem geheimen ausgeführt werden. <name>@<knoten> muss offline
Inhalt in ASCII, etwa ein Hash etc. Dieser Inhalt ist das sein. Mit dem Parameter --offline kann der Befehl
5672, 5671 AMQP Clients ohne und mit TLS Shared Secret zwischen allen in das Cluster eingebundene auch auf dem Knoten eines insges. offline stehenden
Erlang Knoten. Clusters ausgeführt werden. Dies ist nötig, wenn dieser
25672 Knoten-zu-Knoten- und Knoten der letzte valide eines Clusters war, aber nicht
CLI-zu-Knoten-Kommunikation • Unter Unix unter startet, weil die anderen Knoten nicht erreichbar sind.
/var/librabbitmq/.erlang-cookie oder
35672-35682 CLI-Tools
$HOME/.erlang.cookie zu finden. rabbitmqctl update_cluster_nodes <name>@<knoten>
15672 WebUI des Clusters (nur: Management PlugIn aktualisiert den lokalen Knoten durch den Clusterinhalt
• Unter Windows unter von <name>@<knoten>. Dieser muss Teil des
enabled) %HOMEDRIVE%%HOMEPATH%\.erlang.cookie oder Clusters sein, in dem auch der lokale Knoten ist.
61613,61614 STOMP (nur: STOMP PlugIn enabled) %USERPROFILE%\.erlang.cookie abgelegt.
rabbitmqctl force_boot
1883, 8883 MQTT ohne und mit TLS (nur: MQTT PlugIn • Alternativ per Umgebunsvariable befiehlt dem lokalen Knoten, zu starten, obwohl dieser
enabled) RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS = ggf. nicht starten würde, da dieser davon ausgeht,
”-setcookie cookie-value” setzen (unsicher). nicht der letzte Knoten des Clusters gewesen zu sein.
15674 WebSTOMP (nur mit PlugIns) Damit gehen alle Änderungen in der Cluster-
Nodes in Cluster
Datenbank verloren, die nach dem Shutdown des
15675 WebMQTT (nur mit PlugIns) Knoten können durch direkt durch DNS oder per
lokalen Knotens passiert sind.
Konfiguration, per Plugin durch AWS Instance Directory,
Cluster Consul, etcd, Kubernetes oder manuell durch das CLI zu rabbitmq sync_queue [-p vhost] queue
Verteilte RabbitMQ-Systeme einem Cluster zusammen geführt werden. erzwingt die Synchronisation der Queue “queue”, ggf.
Alle Knoten müssen für alle Knoten per DNS oder auf Vhost “vhost”. Während die Synchronisation läuft,
Über Federation- oder Shovel-Plugin sind verteilte Systeme
/etc/hosts auflösbare FQDN haben. werden Producer und Consumer belockiert. der Befehl
möglich. Diese sind Unabhängig in Version,
Benutzerdefinitionen/-rechten, tolerieren hohe funktioniert nur auf Queues die auf mehr als einen
rabbitmqctl join_cluster <name>@<knoten> [--ram] Knoten gespiegelt sind.
Netzwerklatenzen, können verschiedene Topologien abbilden. fügt den lokalen Knoten in das Cluster, bei dem
Dieser Ansatz erhöht die Verfügbarkeit gegenüber der <name>@<knoten> ein Mitgliedsknoten ist. Dieser rabbitmq purge_queue [-p vhost] queue
Konsistenz (CAP-Theorem). Befehl funktioniert nur, wenn die Applikation gestoppt löscht den Inhalt einer Queue.
Die Steuerung ist sehr individuel, daher hier der Verweis auf ist (siehe: rabbitmqctl stop_app). Durch das
die Dokumentation zu Shovel- und Federation-Plugin. Einfügen wird die lokale Datenbank verworfen und die Knotenausfall-Behandlung
Server-Cluster des Clusters übernomnmen. Die Option --ram weist RabbitMQ ist im Clusterbetrieb empfindlich für
Im RabbitMQ-Cluster muss jeder Knoten den gleichen den lokalen Knoten an, als RAM-Only Knoten zu Netzwerklatenzen oder auch kurzes Einfrieren von Knoten.
Major/Minor-Versiosstand von RabbitMQ (und oft Erlang) arbeiten. Es wird keine lokale Datenbank persistiert. Dies sollte unbedingt vermieden werden. In der
haben. Für alle Knoten muss ein identisches Erlang-Cookie rabbitmqctl cluster_status Default-Konfiguration führt dieses zu einer
gesetzt sein. Alle Knoten des Clusters haben eine identische listet alle aktuellen Knoten im Cluster auf. Netzwerkpartitionierung, einer sog. “Split-Brain”-Situation.
Benutzer- und Datenbasis, auch wenn nicht alle Knoten alle Dies kann vermieden werden. RabbitMQ kennt folgende
Daten lokal speichern müssen. Der Cluster stellt sich wie ein rabbitmqctl forget_cluster_node [--offline] Konfigurationsmöglichkeiten hierzu für den Wert
logischer Broker dar. Dieser Ansatz erhöht die Konsistenz <name>@<knoten> “cluster_partition_handling”. Siehe
gegenüber der Verfügbarkeit (CAP-Theorem). entfernt Knoten <name>@<knoten> aus dem Cluster. http://www.rabbitmq.com/partitions.html:
2 ©credativ GmbH 2018, Lizenz: Creative Commons CC-BY-SA 3.0
CheatSheet
RabbitMQ
ignore laufendem Erlang-System. Wird benötigt, wenn man entfernbar ist oder die lokale Datenbank defekt ist.
der Default-Zustand. Knoten arbeiten weiter, obwohl RabbitMQ vorher für Konfigurationsänderungen Dieser Befehl sollte als letzter Ausweg gesehen werden.
sie den oder die anderen Knoten nicht mehr erreichen gestoppt hat.
rabbitmqctl node_health_check
können. Split-Brain ist meist die Folge.
rabbitmqctl stop_app prüft den Knoten auf Probleme, testet ob RabbitMQ
autoheal hält den RabbitMQ-Knoten an ohne die läuft und keine Alarme gesetzt sind.
sorgt für eine automatische Kompensation eines Erlang-Runtime zu beenden oder den Knoten aus Statusabfrage
kurzzeitigen Netzwerkausfall. Hierbei wird Datenverlust einem Cluster zu entfernen. Die anderen Clusterknoten rabbitmqctl status
auf einem der Teile in Kauf genommen und mit der werden über das Anhalten informiert. zeigt den aktuellen Status des Exchange Brokers an.
Majorittät weiter gearbeitet.
rabbitmqctl stop [pidfile] rabbitmqctl list_queues [-p vhost] [--offline |
pause_minority beendet die Erlang-Runtime incl. RabbitMQ. Optional --online | --local] [selektor ...]
der Knoten hält an und verweigert Verbindungen, wenn kann eine entsprechende PID-Datei angegeben werden. listet Queues auf. Parameter --offline gibt nur nicht
er die Hälfte oder weniger Knoten des Clusters Dieser Befehl blockiert nicht. verfügbare Queues aus, --online nur verfügbare,
erreichen kann. Die Knoten die Mehr als die Hälfte --local nur die auf dem lokalen Knoten. Details zu
sehen, arbeiten weiter. Klassisches Quorum, rabbitmqctl shutdown Selektor siehe Man-Page.
funktioniert optimal bei einer ungeraden Anzahl an ähnlich stop, jedoch blockiert die Ausführung bis der
Knoten ab drei Stück. Bei zwei Knoten wird ein “Split Erlangknoten herunter gefahren ist. Es muss kein rabbitmqctl list_exchanges [-p vhost]
Brain” verhindert, allerdings ist der Cluster in der Zeit PID-File im Dateisystem vorhanden sein. Exitcode6=0, selektor...
der Partitionierung nicht verfügbar. Angehaltene wenn RabbitMQ nicht lief. gibt Informationen zu Exchanges aus. Details zu
Knoten sollten automatisch wieder in den Cluster Selektor siehe Man-Page.
rabbitmqctl wait pid_file | rabbitmqctl wait
integriert werden, sobald sie wieder verfügbar sind. In rabbitmqctl list_bindings [-p vhost] selektor...
--pid pid
dieser Einstellung wird Konsistenz über Verfügbarkeit gibt Informationen zu Bindungen aus. Details zu
wartet, bis die pid-Datei angelegt wurde und der
gestellt. Selektor siehe Man-Page.
Prozess mit der PID aus dem pid-File oder dem
pause_if_all_down Parameter --pid läuft. Hilfreich für DevOps-Scripts. rabbitmqctl list_connections [-p vhost]
der Knoten hält an, wenn er keinen anderen Knoten selektor...
rabbitmqctl rotate_logs
mehr erreichen kann. Diese Einstellung sollte gibt Informationen zu TCP-Verbindungen aus. Details
ab Version 3.7, sorgt for Logrotation. Vor Version 3.7
sinnvollerweise mit der Einstellung für recover und zu Selektor siehe Man-Page.
über die Konfiguration vom lager-Plugin. Wird nicht
ggf. einer Knotenliste konfiguriert werden.
im Zusammenhan mit Tools wie Logrotate benötigt, da rabbitmqctl list_channels selektor...
dies automatisch erkannt wird. gibt Informationen zu aktuellen Kanälen aus. Details
Diese Einstellungen sollten auf allen Knoten grundsätzlich
zu Selektor siehe Man-Page.
identisch sein. Lediglich bei “pause_if_all_down” können bei rabbitmqctl reset
Bedarf die Knotenlisten abweichen. Diese Einstellung kann setzt den lokalen Knoten zurück. Damit wird der rabbitmqctl list_consumers
nur in der RabbitMQ-Konfigdatei geändert werden und Knoten auch aus einem Cluster entfernt. Alle Daten in listet alle Konsumenten auf.
erfordern einen geordneten Neustart aller Knoten. der lokalen Datenbank werden gelöscht. Der Knoten rabbitmqctl environment
Betrieb muss vorher per stop_app gestoppt werden. listet alle Umgebungsvariablen auf.
Starten und Stoppen rabbitmqctl force_reset rabbitmqctl report
rabbitmqctl start_app analog zu reset, allerdings wird der Knoten direkt generiert einen vollständigen Report des RabbitMQ
startet RabbitMQ auf dem lokalen Knoten bei bereits zurückgesetzt, auch wenn er nicht aus einem Cluster und der Erlang-Runtime.
3 ©credativ GmbH 2018, Lizenz: Creative Commons CC-BY-SA 3.0
CheatSheet
RabbitMQ
Benutzerverwaltung rabbitmqctl set_permissions [-p vhost] user conf Updates
Die folgenden Befehle ändern von der Konsole aus direkt die write read
Solobetrieb
Usereinträge in der RabbitMQ - internen Benutzerdatenbank. Setzt Berechtigungen für “user” auf “vhost” (default:
Die Benutzerdatenbank wird im Clusterbetrieb repliziert. VHost “/”). conf, write und read sind RegEx, die die Updates eines einzelnen RabbitMQ, der nicht im
Externe Authentifizierungs- systeme wie LDAP etc. werden Resourcen matchen, für die dem User das jeweilige Cluster-Betrieb arbeitet, können in-place durchgeführt
nicht geändert. Der Default-User und -Passwort ist guest. Recht eingeräumt werden soll. werden, wenn der RabbitMQ nicht läuft. Hierbei sollten keine
Dieser hat zunächst Admin-Rechte! großen Versionssprünge ausgeführt werden. Ein
rabbitmqctl clear_permissions [-p vhost] user
Versionsschema von <major.minor.patchlevel> angelegt
Benutzer per CLI verwalten entfernt die Berechtigungen für User auf dem VHost
bedeutet dies, dass Patchlevel in aller Regel beliebig
rabbitmqctl list_users (default “/”)
installiert werden können, bei Minor- und Major-Versions-
zeigt alle in RabbitMQ verwalteten Benutzer an. rabbitmqctl list_permissions [-p vhost] wechseln aber auf jeden Fall mit Vorsicht vorgegangen
rabbitmqctl add_user <username> <password> zeigt die vergebenen Berechtigungen auf dem VHost werden muss. Bei Minor- oder Major-Versionswechseln sollte
legt Benutzer mit (optionalem Passwort) an. an. sicherheitshalber keine Minor-Version ausgelassen werden.
Hierzu geben die Changelogs entsprechend Auskunft.
rabbitmqctl list_user_permissions user
rabbitmqctl delete_user <username>
zeigt alle Berechtigungebn für User an. Ferner ist ein Cold-Backup des Systems obligatorisch. Zu
löscht angegebenen User. Beachten ist auch, dass zum RabbitMQ auch ggf. die
rabbitmqctl set_topic_permissions conf write passende Erlang/OTP-Version mit aktualisiert werden muss.
rabbitmqctl change_passwort <username> read
Wichtig: Keinesfalls sollte man einfach ein Paket mit neuerer
<neues_pwd> Setzt Berechtigungen für User auf der Exchange auf
ändert Passwort für angegeben User. Version aus einem Upstream-Repository über die bestehende
VHost (default: “/”). Write und Read sind RegEx die
Installation installieren. Bei Serverneustarts ist zu beachten,
den Routing Key der Topics matchen.
rabbitmqctl clear_passwort <username> dass nicht-persistente Queues und Messages verloren gehen.
entfernt Passwort für angegeben User. rabbitmqctl clear_topic_permissions [-p vhost] Mehr Informationen siehe
user [exchange] https://www.rabbitmq.com/upgrade.html
rabbitmqctl set_user_tags <username> [tag ...]
Entfernt die User-Berechtigungen auf VHost (default:
setzt Tag für User. “Tag” kann folgende Werte
“/”) auf der angegebenen Exchange oder auf allen Clusterbetrieb
annehmen: “Admin”, “Monitoring”, “Management”,
Exchanges.
“None” sein. Eine leere Angabe löscht alle Tags des Im Clusterbetrieb können nur Patchlevel (s.o.) problemlos
Users. rabbitmqctl list_topic_permissions [-p vhost] geupdatet werden. Clusterupgrades können wahlweise über
Zeigt die vergebenen Topic Permissions auf VHost. ein Zurückbauen des Clusters auf einen einzelnen Knoten -
VHosts verwalten also zurückbauen auf Solobetrieb - und Update wie im
Crash Recovery
rabbitmqctl add_vhost <name> Solobetrieb mit anschließendem Ergänzen neuer, aktueller
legt einen neuen virtuellen Host-Kontext an. Im Falle eines fatalen Ausfalls eines Clusters oder und leerer Knoten zum Cluster erfolgen. Rolling Upgrades
Einzel-Systems kann es passieren, dass die interne datenbank sind zumeist nicht zielführend.
rabbitmqctl delete_vhost <name> defekt ist. In den meisten Fällen kann die Erlang-Runtime die
entfernt einen virtuellen Host-Kontext. eingesetzte Mnesia-Datenbank selbstständig reparieren. Alternativ kann ein Blue-Green-Deployment mit Neubau
Sollte es hier dennoch probleme geben, hilft möglicherweise eines Clusters neuerer Version und Übertragung der Daten
rabbitmqctl list_vhosts [<wert>] dieses Kapitel weiter: http://erlang.org/doc/apps/ per Federation-Plugin oder Shovel-Plugin von Alt nach Neu
listet virtuelle Hosts. <wert> ist die optinale Angabe, mnesia/Mnesia_chap7.html#id85020 erfolgen. Mehr hierzu siehe:
welche Informationen über die VHosts ausgegeben Warnung: Grundsätzlich sollte jedoch in diesem Fall vor https://content.pivotal.io/rabbitmq/
werden soll. Zulässige Werte sind “name” und Experimenten vom Offline-System eine Sicherungskopie bzw. blue-green-application-deployments-with-rabbitmq
“tracing” vorhanden sein oder ggf. ein Experte hinzugezogen werden.
4 ©credativ GmbH 2018, Lizenz: Creative Commons CC-BY-SA 3.0