Über den MySQL-Router haben wir hier bereits an mehreren Stellen berichtet ([1] & [2]). Er spielt bei MySQL-Hochverfügbarkeits-Lösungen (z. B. dem InnoDB-Cluster) eine zentrale Rolle. Seit der Version MySQL 8.0.17 wurde der Router um eine REST API erweitert. Über diese Schnittstelle lässt sich der Zustand und die ordnungsgemäße Funktionsweise überprüfen. In diesem Beitrag stellen wir ihnen den Funktionsumfang der jetzt aktuellen Version 8.0.29 vor.
Eine entspannte Umgebung schaffen: Die Testumgebung
Für diesen Beitrag nutzen wir ein minimales InnoDB-Cluster-Setup, welches wir in einer Docker-Umgebung aufgebaut haben. Anders als in produktiven Umgebungen besteht unser Setup nur aus drei Containern, auf denen sich neben den obligatorischen drei MySQL-Instanzen (Knoten) auch der Router und eine MySQL Shell (jeweils auf einem der drei Knoten) befinden.
In der Praxis könnte das Setup eines InnoDB-Clusters (inkl. einer Router-Instanz) wie folgt aussehen:
In unserem Fall besteht der InnoDB-Cluster aus den folgenden drei Knoten (Ausgabe der MySQL Shell an einigen Stellen gekürzt):
Relaxt ans Ziel kommen: Der Aufbau des Routers
Der Router wurde ohne jegliche weitere Änderungen auf unseren Knoten „mysql3“ installiert bzw. „gebootstrapt“ („Bootstrapping“ entspricht einem Prozess, der ein komplexes System initialisiert). In der aktuellen Version wird hierbei bereits per Default ein Webserver mit der entsprechenden REST API gestartet.
# Bootstrapping des Routers:
bash mysql3> mysqlrouter --bootstrap admin:admin@mysql1 --user=mysql -d /opt/mysql/router
Ab diesem Moment kann die REST API grundlegend abgefragt werden. Detailinformationen können jedoch NICHT ohne eine Authentifizierung erlangt werden. Hierfür müssen dem Cluster noch User-Accounts hinzugefügt werden.
# Abfrage der zur Verfügung stehenden „Pfade“:
Immer schön locker bleiben: Authentifizieren Sie sich
Ohne einen zuvor definierten User würde ein Zugriff auf einen der oben aufgeführten Pfade zu einem Berechtigungsfehler im Browser führen. Der einfachste Weg einen User-Account für die REST API zu generieren, ist die Nutzung eines MySQL-Shell-Plugins, welches von Frédéric Descamps zur Verfügung gestellt wird (https://github.com/lefred/mysqlshell-plugins/). Die genaue Installation des Plugins wird auf seiner GitHub-Seite erklärt. Durch die Nutzung des Plugins können wir dedizierte User ohne sonstigen Datenbankzugriff erstellen und verwalten.
Natürlich gibt es auch die Möglichkeit, den User „klassisch“ über den MySQL-Client zu erzeugen. Hierzu wird ein Datenbank-User-Account erzeugt, der dann über SQL-Kommandos in die Meta-Tabellen des InnoDB-Cluster (Schema: mysql_innodb_cluster_metadata) kopiert wird. Ein Beispiel kann dem Blog-Beitrag von Ivan Ma entnommen werden. [3]
Einfach mal genießen: Der Zugriff auf die API.
Nachdem der User eingerichtet wurde, kann auf die REST API zugegriffen werden. Im ersten Schritt schauen wir uns die Metadaten unseres Routing-Services an: https://localhost:8443/api/20190715/metadata/.
Natürlich kann man anhand der obenstehenden Pfadliste unterschiedlichste Details zu den verfügbaren Routen anschauen. Wir schauen uns exemplarisch die Zielsysteme (DB-Knoten) unseres Routers für die lediglich lesenden Zugriffe (bootstrap_ro) an: https://localhost:8443/api/20190715/routes/bootstrap_ro/destinations
Wie wir erkennen können, sind dort die beiden Knoten hinterlegt, die wir auch über das Cluster-Status-Kommando gesehen haben.
Alternativ haben wir auch Zugriff über Informationen zu den gerade bestehenden Verbindungen über eine „Route“:
https://localhost:8443/api/20190715/routes/bootstrap_ro/connections
Die Liste beinhaltet eine Reihe von aktiven Verbindungen, die wir zu Testzwecken aufgebaut haben. Dabei ist anhand des Feldes „destinationAddress“ (172.19.0.2 und 172.19.0.4) zu erkennen, dass beide RO-Zielsysteme (RO = read only) abwechselnd verwendet werden (Round Robin-Verfahren).
Alles entspannt? Das Fazit:
Die REST API bietet eine schöne Möglichkeit, um sich über den Zustand des Router-Setups zu informieren bzw. die Nutzung dieses Dienstes zu monitoren. Dieser Service bietet damit eine hervorragende Möglichkeit, um auch in Fehlersituationen weitere Informationen zu bekommen. Der Aufwand für die Einrichtung ist überschaubar und schnell erledigt.
Sie haben Fragen zum Betrieb von hochkritischen MySQL-Umgebungen? Sprechen Sie uns an.
Quellen
Seminarempfehlungen
MYSQL ADMINISTRATION DB-MY-01
Zum SeminarRESTFUL APIS ENTWERFEN RESTFUL-1A
Zum Seminar