DOKK Library

CheatSheet RabbitMQ v1.02

Authors Peter Dreuw

License CC-BY-SA-3.0

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