Erfordert ClusterControl 1.6 oder höher. Gilt für MySQL-basierte Instanzen/Cluster.
In einigen Fällen möchten Sie möglicherweise mehrere Instanzen von MySQL auf einem einzigen Computer ausführen. Vielleicht möchten Sie verschiedenen Benutzern Zugriff auf ihre eigenen MySQL-Server gewähren, die sie selbst verwalten, oder Sie möchten eine neue MySQL-Version testen, während Sie eine bestehende Produktionsumgebung ungestört halten.
Es ist möglich, eine andere MySQL-Server-Binärdatei pro Instanz zu verwenden oder dieselbe Binärdatei für mehrere Instanzen zu verwenden (oder eine Kombination der beiden Ansätze). Sie könnten beispielsweise einen Server mit MySQL 5.6 und einen mit MySQL 5.7 betreiben, um zu sehen, wie die verschiedenen Versionen mit einer bestimmten Arbeitslast umgehen. Oder Sie führen mehrere Instanzen der neuesten MySQL-Version aus, von denen jede einen anderen Satz von Datenbanken verwaltet.
Unabhängig davon, ob Sie unterschiedliche Server-Binärdateien verwenden oder nicht, muss jede Instanz, die Sie ausführen, mit eindeutigen Werten für mehrere Betriebsparameter konfiguriert werden. Dadurch wird das Konfliktpotenzial zwischen Instanzen eliminiert. Sie können MySQL Sandbox verwenden, um mehrere MySQL-Instanzen zu erstellen. Oder Sie können mysqld_multi verwenden, das in MySQL verfügbar ist, um eine beliebige Anzahl separater mysqld-Prozesse zu starten oder zu stoppen, die auf verschiedenen TCP/IP-Ports und UNIX-Sockets laufen.
In diesem Blogbeitrag zeigen wir Ihnen, wie Sie ClusterControl konfigurieren, um mehrere MySQL-Instanzen zu überwachen, die auf einem Host ausgeführt werden.
ClusterControl-Einschränkung
Zum Zeitpunkt des Schreibens unterstützt ClusterControl nicht die Überwachung mehrerer Instanzen auf einem Host pro Cluster/Servergruppe. Es setzt die folgenden Best Practices voraus:
- Nur eine MySQL-Instanz pro Host (physischer Server oder virtuelle Maschine).
- MySQL-Datenredundanz sollte auf N+1-Server konfiguriert werden.
- Alle MySQL-Instanzen laufen mit einheitlicher Konfiguration über die Cluster/Server-Gruppe hinweg, z. B. Listening Port, Error Log, Datadir, Basedir, Socket sind identisch.
In Bezug auf die oben genannten Punkte geht ClusterControl davon aus, dass in einer Cluster/Server-Gruppe:
- MySQL-Instanzen werden einheitlich über einen Cluster konfiguriert; derselbe Port, derselbe Ort der Protokolle, des Basis-/Datenverzeichnisses und anderer kritischer Konfigurationen.
- Es überwacht, verwaltet und stellt nur eine MySQL-Instanz pro Host bereit.
- Der MySQL-Client muss auf dem Host installiert und im ausführbaren Pfad für den entsprechenden Betriebssystembenutzer verfügbar sein.
- Der MySQL ist an eine IP-Adresse gebunden, die vom ClusterControl-Knoten erreichbar ist.
- Es überwacht weiterhin die Host-Statistiken, z. B. CPU/RAM/Festplatte/Netzwerk für jede MySQL-Instanz einzeln. In einer Umgebung mit mehreren Instanzen pro Host sollten Sie mit redundanten Hoststatistiken rechnen, da derselbe Host mehrmals überwacht wird.
Mit den obigen Annahmen funktionieren die folgenden ClusterControl-Funktionen nicht für einen Host mit mehreren Instanzen:
Backup - Percona Xtrabackup unterstützt nicht mehrere Instanzen pro Host und mysqldump, das von ClusterControl ausgeführt wird, verbindet sich nur mit dem Standard-Socket.
Prozessverwaltung – ClusterControl verwendet den Standard „pgrep -f mysqld_safe“, um zu prüfen, ob MySQL auf diesem Host läuft. Bei mehreren MySQL-Instanzen ist dies ein falsch positiver Ansatz. Daher funktioniert die automatische Wiederherstellung für Knoten/Cluster nicht.
Konfigurationsverwaltung - ClusterControl stellt das standardmäßige MySQL-Konfigurationsverzeichnis bereit. Es befindet sich normalerweise unter /etc/ und /etc/mysql.
Problemumgehung
Die Überwachung mehrerer MySQL-Instanzen auf einer Maschine ist mit ClusterControl mit einem einfachen Workaround weiterhin möglich. Jede MySQL-Instanz muss als einzelne Entität pro Servergruppe behandelt werden.
In diesem Beispiel haben wir 3 MySQL-Instanzen auf einem einzelnen Host, der mit MySQL Sandbox erstellt wurde:
ClusterControl überwacht mehrere Instanzen auf demselben HostWir haben unsere MySQL-Instanzen mit den folgenden Befehlen erstellt:
$ su - sandbox
$ make_multiple_sandbox mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz
Standardmäßig erstellt MySQL Sandbox MySQL-Instanzen, die auf 127.0.0.1 lauschen. Jeder Knoten muss entsprechend konfiguriert werden, damit er alle verfügbaren IP-Adressen abhört. Hier ist die Zusammenfassung unserer MySQL-Instanzen im Host:
[[email protected] multi_msb_mysql-5_7_23]$ cat default_connection.json
{
"node1":
{
"host": "master",
"port": "15024",
"socket": "/tmp/mysql_sandbox15024.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node2":
{
"host": "master",
"port": "15025",
"socket": "/tmp/mysql_sandbox15025.sock",
"username": "[email protected]%",
"password": "msandbox"
}
,
"node3":
{
"host": "master",
"port": "15026",
"socket": "/tmp/mysql_sandbox15026.sock",
"username": "[email protected]%",
"password": "msandbox"
}
}
Der nächste Schritt besteht darin, die Konfiguration der neu erstellten Instanzen zu ändern. Gehen Sie für jeden von ihnen zu my.cnf und hash die bind_address-Variable:
[[email protected] multi_msb_mysql-5_7_23]$ ps -ef | grep mysqld_safe
sandbox 13086 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node1/my.sandbox.cnf
sandbox 13805 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node2/my.sandbox.cnf
sandbox 14065 1 0 08:58 pts/0 00:00:00 /bin/sh bin/mysqld_safe --defaults-file=/home/sandbox/sandboxes/multi_msb_mysql-5_7_23/node3/my.sandbox.cnf
[[email protected] multi_msb_mysql-5_7_23]$ vi my.cnf
#bind_address = 127.0.0.1
Installieren Sie dann mysql auf Ihrem Master-Knoten und starten Sie alle Instanzen mit dem Skript „restart_all“ neu.
[[email protected] multi_msb_mysql-5_7_23]$ yum install mysql
[[email protected] multi_msb_mysql-5_7_23]$ ./restart_all
# executing "stop" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "stop" on node 1
executing "stop" on node 2
executing "stop" on node 3
# executing "start" on /home/sandbox/sandboxes/multi_msb_mysql-5_7_23
executing "start" on node 1
. sandbox server started
executing "start" on node 2
. sandbox server started
executing "start" on node 3
. sandbox server started
Von ClusterControl aus müssen wir für jede Instanz einen „Import“ durchführen, da wir sie in einer anderen Gruppe isolieren müssen, damit es funktioniert.
ClusterControl importiert vorhandenen ServerGeben Sie für node1 die folgenden Informationen in ClusterControl> Import ein:
ClusterControl importiert vorhandenen ServerStellen Sie sicher, dass Sie die richtigen Ports (für verschiedene Instanzen unterschiedlich) und den richtigen Host (für alle Instanzen gleich) angeben.
Sie können den Fortschritt überwachen, indem Sie im oberen Menü auf das Aktivitäts-/Auftragssymbol klicken.
ClusterControl importiert vorhandene ServerdetailsSie sehen node1 in der Benutzeroberfläche, sobald ClusterControl den Job beendet hat. Wiederholen Sie die gleichen Schritte, um zwei weitere Knoten mit den Ports 15025 und 15026 hinzuzufügen. Sobald sie hinzugefügt wurden, sollten Sie etwas wie das Folgende sehen:
ClusterControl-DashboardLos geht's. Wir haben gerade unsere bestehenden MySQL-Instanzen zur Überwachung in ClusterControl hinzugefügt. Viel Spaß beim Überwachen!
PS.:Um mit ClusterControl zu beginnen, klicken Sie hier!