Es gibt verschiedene Gründe, einen Load Balancer zwischen Ihrer Anwendung und Ihrer Datenbank hinzuzufügen. Wenn Sie viel Datenverkehr haben (und Sie den Datenverkehr zwischen verschiedenen Datenbankknoten ausgleichen möchten) oder Sie den Load Balancer als einzelnen Endpunkt verwenden möchten (im Falle eines Failovers bewältigt dieser Load Balancer dieses Problem, indem er den Datenverkehr an die verfügbarer/fehlerfreier Knoten.) Es könnte auch sein, dass Sie unterschiedliche Ports zum Schreiben und Lesen von Daten aus Ihrer Datenbank verwenden möchten.
In all diesen Fällen ist ein Load Balancer für Sie nützlich, und wenn Sie einen MariaDB-Cluster haben, ist eine Option dafür die Verwendung von MaxScale, einem Datenbank-Proxy für MariaDB-Datenbanken.
In diesem Blog zeigen wir Ihnen, wie Sie es manuell installieren und konfigurieren und wie ClusterControl Ihnen bei dieser Aufgabe helfen kann. Für dieses Beispiel verwenden wir einen MariaDB-Replikationscluster mit 1 Master- und 1 Slave-Knoten und CentOS8 als Betriebssystem.
So installieren Sie MaxScale
Wir gehen davon aus, dass Sie Ihre MariaDB-Datenbank am Laufen haben und auch einen Computer (virtuell oder physisch), um MaxScale zu installieren. Wir empfehlen Ihnen, einen anderen Host zu verwenden, damit MaxScale im Falle eines Master-Ausfalls auf den Slave-Knoten umschalten kann, andernfalls kann MaxScale keine Maßnahmen ergreifen, wenn der Server, auf dem es ausgeführt wird, ausfällt.
Es gibt verschiedene Möglichkeiten, MaxScale zu installieren, in diesem Fall verwenden wir die MariaDB-Repositories. Um es zum MaxScale-Server hinzuzufügen, müssen Sie Folgendes ausführen:
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Installieren Sie jetzt das MaxScale-Paket:
$ yum install maxscale
Jetzt haben Sie Ihren MaxScale-Knoten installiert, bevor Sie beginnen, müssen Sie ihn konfigurieren.
Wie man MaxScale konfiguriert
Da MaxScale Aufgaben wie Authentifizierung, Überwachung und mehr ausführt, müssen Sie einen Datenbankbenutzer mit bestimmten Berechtigungen erstellen:
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
Beachten Sie, dass die MariaDB-Versionen 10.2.2 bis 10.2.10 außerdem Folgendes erfordern:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Jetzt haben Sie den Datenbankbenutzer bereit, sehen wir uns die Konfigurationsdateien an. Bei der Installation von MaxScale wird die Datei maxscale.cnf unter /etc/ angelegt. Es gibt mehrere Variablen und verschiedene Möglichkeiten, sie zu konfigurieren, also sehen wir uns ein Beispiel an:
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
In dieser Konfiguration haben wir 2 Datenbankknoten, 192.168.100.126 (Master) und 192.168.100.127 (Slave), wie Sie im Abschnitt Serverdefinition sehen können.
Wir haben auch 2 verschiedene Dienste, einen für Nur-Lesen, wo es den Slave-Knoten gibt, und einen für Lesen-Schreiben, wo es den Master-Knoten gibt.
Schließlich haben wir 2 Zuhörer, einen für jeden Dienst. Der schreibgeschützte Listener, der Port 4008 überwacht, und der Read-Write-Listener, der Port 4006 überwacht.
Dies ist eine grundlegende Konfigurationsdatei. Wenn Sie etwas Spezifischeres benötigen, können Sie der offiziellen MariaDB-Dokumentation folgen.
Jetzt können Sie es starten, also führen Sie einfach Folgendes aus:
$ systemctl start maxscale.service
Und überprüfe es:
$ maxctrl list services
ff $ maxctrl list servers
Hier finden Sie eine Liste der maxctrl-Befehle, oder Sie können sogar maxadmin verwenden zu verwalten.
Jetzt testen wir die Verbindung. Dazu können Sie versuchen, über die IP-Adresse von MaxScale und den Port, den Sie testen möchten, auf Ihre Datenbank zuzugreifen. In unserem Fall sollte der Datenverkehr auf Port 4006 an Server1 gesendet werden und der Datenverkehr auf Port 4008 an Server2.
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
Es funktioniert!
So stellen Sie MaxScale mit ClusterControl bereit
Lassen Sie uns nun sehen, wie Sie ClusterControl verwenden können, um diese Aufgabe zu vereinfachen. Dazu gehen wir davon aus, dass Sie Ihren MariaDB-Cluster zu ClusterControl hinzugefügt haben.
Gehen Sie zu ClusterControl -> Wählen Sie den MariaDB-Cluster -> Cluster-Aktionen -> Load Balancer hinzufügen -> MaxScale.
Hier können Sie einen neuen MaxScale-Knoten bereitstellen oder auch einen vorhandenen importieren ein. Wenn Sie es bereitstellen, müssen Sie die IP-Adresse oder den Hostnamen, die Administrator- und Benutzer-MaxScale-Anmeldeinformationen, die Anzahl der Threads und Ports (Schreib- und Lesezugriff) hinzufügen. Sie können auch angeben, welchen Datenbankknoten Sie der MaxScale-Konfiguration hinzufügen möchten.
Sie können die Aufgabe im Abschnitt ClusterControl-Aktivität überwachen. Wenn es fertig ist, haben Sie einen neuen MaxScale-Knoten in Ihrem MariaDB-Cluster.
Und Ausführen der MaxScale-Befehle über die ClusterControl-Benutzeroberfläche, ohne dass auf die Server über SSH.
Das sieht einfacher aus, als es manuell bereitzustellen, oder?
Fazit
Einen Load Balancer zu haben ist eine gute Lösung, wenn Sie Ihren Datenverkehr ausgleichen oder aufteilen möchten, oder sogar für Failover-Aktionen, und MaxScale als MariaDB-Produkt ist eine gute Option für MariaDB-Datenbanken.
Die Installation ist einfach, aber die Konfiguration und Verwendung könnte schwierig sein, wenn es etwas Neues für Sie ist. In diesem Fall können Sie ClusterControl verwenden, um es einfacher bereitzustellen, zu konfigurieren und zu verwalten.