MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

Einführung in die Verwaltung von MaxScale mit maxctrl für MariaDB-Cluster

MariaDB Cluster besteht aus MariaDB Server mit Galera Cluster und MariaDB MaxScale. Als Multi-Master-Replikationslösung kann jeder MariaDB-Server mit Galera-Cluster als Primärserver betrieben werden. Dies bedeutet, dass Änderungen, die an einem beliebigen Knoten im Cluster vorgenommen werden, auf jeden anderen Knoten im Cluster repliziert werden, wobei eine zertifizierungsbasierte Replikation und eine globale Reihenfolge von Transaktionen für die InnoDB-Speicher-Engine verwendet werden. MariaDB MaxScale ist ein Datenbank-Proxy, der auf dem MariaDB-Server sitzt und die Hochverfügbarkeit, Skalierbarkeit und Sicherheit erweitert und gleichzeitig die Anwendungsentwicklung vereinfacht, indem er von der zugrunde liegenden Datenbankinfrastruktur entkoppelt wird.

In dieser Blogserie werden wir uns die MaxScale-Verwaltung mit maxctrl für unseren MariaDB-Cluster ansehen. In diesem ersten Teil der Blog-Serie behandeln wir die Einführung und einige Grundlagen des Befehlszeilenprogramms maxctrl. Unser Setup besteht aus einem MaxScale-Server und einer 3-Knoten-MariaDB 10.4 mit Galera 4, wie im folgenden Diagramm dargestellt:

Unser MariaDB-Cluster wurde von ClusterControl bereitgestellt und verwaltet, während unser MaxScale-Host dies tut ein neuer Host im Cluster und wurde nicht von ClusterControl für die Zwecke dieser exemplarischen Vorgehensweise bereitgestellt.

MaxScale-Installation

Die Installation von MaxScale ist ziemlich einfach. Wählen Sie das richtige Betriebssystem auf der MariaDB-Downloadseite für MaxScale und laden Sie es herunter. Das folgende Beispiel zeigt, wie man MaxScale auf einem CentOS 8-Host installiert:

$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale

Nachdem der Daemon gestartet wurde, werden MaxScale-Komponenten standardmäßig auf den folgenden Ports ausgeführt:

  • 0.0.0.0:4006 – Standard-Lese-Schreib-Splitting-Listener.
  • 0.0.0.0:4008 – Standard-Round-Robin-Listener.
  • 127.0.0.1:8989 - MaxScale-Rest-API.

Die oben genannten Ports sind veränderbar. Es ist üblich, dass ein eigenständiger MaxScale-Server in der Produktion mit Lese-/Schreibzugriff auf Port 3306 und Round-Robin auf Port 3307 ausgeführt wird. Diese Konfiguration werden wir in diesem Blogbeitrag bereitstellen.

Wichtige Dateien und Verzeichnisstruktur

Sobald das Paket installiert ist, erhalten Sie die folgenden Dienstprogramme/Programme:

  • maxscale - Die MaxScale selbst.
  • maxctrl - Der Befehlszeilen-Verwaltungsclient für MaxScale, der die MaxScale-REST-API für die Kommunikation verwendet.
  • maxadmin - Der veraltete Verwaltungs- und Überwachungsclient von MaxScale. Verwenden Sie stattdessen maxctrl.
  • maxkeys - Dieses Dienstprogramm schreibt in die Datei .secrets im angegebenen Verzeichnis den AES-Verschlüsselungsschlüssel und den Init-Vektor, die vom Dienstprogramm maxpasswd verwendet werden, wenn Passwörter verschlüsselt werden, die in der MariaDB MaxScale-Konfigurationsdatei verwendet werden.
  • maxpasswd - Dieses Dienstprogramm erstellt ein verschlüsseltes Passwort unter Verwendung einer .secrets-Datei, die zuvor mit maxkeys erstellt wurde.

MaxScale lädt alle Konfigurationsoptionen von den folgenden Orten in der angegebenen Reihenfolge:

  1. /etc/maxscale.cnf
  2. /etc/maxscale.cnf.d/*.cnf
  3. /var/lib/maxscale/maxscale.cnf.d/*.cnf

Weitere Informationen zur MaxScale-Konfiguration finden Sie im MaxScale-Konfigurationsleitfaden.

Sobald MaxScale initialisiert ist, sind die Standarddateien und Verzeichnisstrukturen:

  • MaxScale-Datenverzeichnis:/var/lib/maxscale
  • MaxScale-PID-Datei:/var/run/maxscale/maxscale.pid
  • MaxScale-Protokolldatei:/var/log/maxscale/maxscale.log
  • MaxScale-Dokumentation:/usr/share/maxscale

MaxCtrl - Die CLI

Nach dem Start können wir den MaxCtrl-Befehlszeilenclient verwenden, um MaxScale zu verwalten, indem die MaxScale-REST-API Port 8989 auf dem lokalen Host überwacht. Die Standardanmeldeinformationen für die REST-API lauten „admin:mariadb“. Die von der REST-API verwendeten Benutzer sind die gleichen, die von der MaxAdmin-Netzwerkschnittstelle verwendet werden. Das bedeutet, dass alle Benutzer, die für die MaxAdmin-Netzwerkschnittstelle erstellt wurden, mit der MaxScale-REST-API und MaxCtrl arbeiten sollten.

Wir können das Dienstprogramm maxctrl im interaktiven Modus verwenden, ähnlich dem mysql-Client. Geben Sie einfach "maxctrl" ein und Sie gelangen in den interaktiven Modus (wo sich die Eingabeaufforderung von der Shell-Eingabeaufforderung in die maxctrl-Eingabeaufforderung geändert hat), genau wie im folgenden Screenshot:

Alternativ können wir denselben Befehl direkt in der Shell-Eingabeaufforderung ausführen, zum Beispiel:

MaxCtrl-Befehlsoptionen hängen von der mitgelieferten MaxScale-Version ab. Zum Zeitpunkt des Schreibens dieses Artikels ist die MaxScale-Version 2.4 und Sie sollten in dieser Dokumentation nachsehen, um eine vollständige Liste der Befehle zu erhalten. MaxCtrl verwendet die MaxScale REST API-Schnittstelle, die hier ausführlich erklärt wird.

Hinzufügen von MariaDB-Servern zu MaxScale

Wenn wir unser MaxScale zum ersten Mal starten, wird es eine Konfigurationsdatei unter /etc/maxscale.cnf mit einigen Standardparametern und Beispielen generieren. Wir werden diese Konfiguration nicht verwenden und stattdessen unsere eigene erstellen. Erstellen Sie eine Sicherungskopie dieser Datei, da wir sie später leeren möchten:

$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file

Starte MaxScale neu, um alles neu zu starten:

$ systemctl restart maxscale

Der Begriff "Server" in MaxScale bedeutet im Wesentlichen den Backend-MariaDB-Server, wie in diesem Fall alle 3 Knoten unseres MariaDB-Clusters. Verwenden Sie die folgenden Befehle, um alle 3 MariaDB-Cluster-Server zur MaxScale-Laufzeit hinzuzufügen:

$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306

Um die hinzugefügten Server zu überprüfen, verwenden Sie den list-Befehl:

$ maxctrl list servers

Und Sie sollten die folgende Ausgabe sehen:

Monitoring in MaxScale hinzufügen

Als Nächstes konfigurieren Sie den Überwachungsdienst für die MaxScale-Nutzung. MaxScale unterstützt je nach Datenbanktyp eine Reihe von Überwachungsmodulen, nämlich:

  • MariaDB-Monitor
  • Galera-Monitor
  • Clustrix-Monitor
  • ColumnStore-Monitor
  • Aurora-Monitor

In diesem Setup verwenden wir das Galera Monitor-Modul namens "galeramon". Zuerst müssen wir einen Datenbankbenutzer erstellen, der von MaxScale auf einem der Server im MariaDB-Cluster verwendet werden soll. In diesem Beispiel haben wir mariadbgalera1, 192.168.0.221 ausgewählt, um die folgenden Anweisungen auszuführen:

MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';

Wobei 192.168.0.220 die IP-Adresse unseres MaxScale-Servers ist.

Es ist nicht sicher, das Benutzerkennwort maxscale_monitor im Klartext zu speichern. Es wird dringend empfohlen, das Passwort stattdessen in einem verschlüsselten Format zu speichern. Um dies zu erreichen, müssen wir einen geheimen Schlüssel speziell für diese MaxScale-Instanz generieren. Verwenden Sie das Dienstprogramm "maxkeys", um den geheimen Schlüssel zu generieren, der von MaxScale für Verschlüsselungs- und Entschlüsselungszwecke verwendet wird:

$ maxkeys
Generating .secrets file in /var/lib/maxscale.

Jetzt können wir das Dienstprogramm maxpasswd verwenden, um den verschlüsselten Wert unseres Passworts zu generieren:

$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB

Wir werden stattdessen immer den obigen Wert verwenden, wenn wir unsere Überwachungs-Benutzerdaten in MaxScale speichern. Jetzt können wir den Galera-Überwachungsdienst mit maxctrl:

zu MaxScale hinzufügen
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB

Überprüfen Sie mit dem folgenden Befehl:

Hinzufügen von Diensten zu MaxScale

Service ist im Wesentlichen, wie MaxScale die Abfragen an die Backend-Server weiterleiten soll. MaxScale 2.4 unterstützt mehrere Dienste (oder Router), nämlich:

  • Avrorouter
  • Binlogrouter
  • Katze
  • CLI
  • HintRouter
  • Readconnroute
  • Readwritesplit
  • SchemaRouter
  • SmartRouter

Für unseren MariaDB-Cluster benötigen wir nur zwei Routing-Dienste – Read-Write-Split und Round-Robin-Load-Balancing. Bei der Lese-Schreib-Aufteilung werden Schreibanfragen nur an einen einzigen MariaDB-Server weitergeleitet, bis der Server nicht erreichbar ist, wo MaxScale die Schreibanfragen dann an den nächsten verfügbaren Knoten weiterleitet. Beim Round-Robin-Balancing werden die Abfragen im Round-Robin-Verfahren an alle Backend-Knoten weitergeleitet.

Erstellen Sie einen Routing-Service für Round-Robin (oder Multi-Master):

maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3

Erstellen Sie einen weiteren Routing-Dienst für die Aufteilung von Lese- und Schreibvorgängen (oder Single-Master):

maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3

Bestätigen mit:

Alle erfolgreich erstellten Komponenten von MaxCtrl generieren ihre eigene Konfigurationsdatei unter / var/lib/maxscale/maxscale.cnf.d. Zu diesem Zeitpunkt sieht das Verzeichnis wie folgt aus:

$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale  532 Jul  5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul  5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale  477 Jul  5 16:00 Round-Robin-Service.cnf

Zuhörer zu MaxScale hinzufügen

Listener stellen die Ports dar, die der Dienst auf eingehende Verbindungen hört. Es kann sich um eine Port- oder UNIX-Socket-Datei handeln, und der Komponententyp muss „Listener“ sein. Üblicherweise sind Zuhörer an Dienste gebunden. In unserem Setup erstellen wir zwei Listener – Read-Write Listener auf Port 3306 und Round-Robin Listener auf Port 3307:

maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth

Überprüfen Sie dies mit den folgenden Befehlen:

An diesem Punkt ist unser MaxScale nun bereit, die Abfragen auszugleichen unser MariaDB-Cluster. Senden Sie die Abfragen von den Anwendungen an den MaxScale-Host auf Port 3306, wo die Schreibabfragen immer denselben Datenbankknoten treffen, während die Leseabfragen an die beiden anderen Knoten gesendet werden. Dies wird auch als Single-Writer-Setup bezeichnet. Wenn Sie ein Multi-Writer-Setup verwenden möchten, bei dem Schreibvorgänge basierend auf Round-Robin-Balancing-Algorithmen an alle Backend-MariaDB-Knoten weitergeleitet werden. Sie können das Balancing weiter verfeinern, indem Sie Priorität und Gewichtung verwenden.

Wenn Sie die Konfigurationsoptionen über maxctrl ändern, haben alle erfolgreich erstellten Komponenten ihre eigene Konfigurationsdatei in /var/lib/maxscale/maxscale.cnf.d, wie in der folgenden Ausgabe gezeigt:

$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale  532 Jul  5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale  250 Jul  5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale  259 Jul  5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul  5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale  261 Jul  5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale  477 Jul  5 16:06 Round-Robin-Service.cnf

Die obigen Konfigurationsoptionen können direkt an Ihre Bedürfnisse angepasst werden, aber es erfordert einen Neustart des MaxScale-Dienstes, um die neuen Änderungen zu laden. Wenn Sie noch einmal neu anfangen möchten, können Sie alles unter diesem Verzeichnis löschen und MaxScale neu starten.

In der nächsten Folge werden wir uns die Verwaltungs- und Überwachungsbefehle von MaxCtrl für unseren MariaDB-Cluster ansehen.