Wie man einen MySQL 8 Cluster mit drei Knoten auf Debian 10 einrichtet
MySQL ist ein freies, quelloffenes und relationales Datenbankmanagementsystem. Es wird verwendet, um Daten für verschiedene Zwecke zu speichern, darunter Data Warehousing, E-Commerce und Logging-Anwendungen. MySQL Cluster ist eine Technologie, die Skalierbarkeit und Verfügbarkeit zu geringen Kosten bietet.
In diesem Tutorial werden wir einen Masterknoten verwenden, um die Konfiguration des Clusters zu speichern und zwei Datenknoten, um die Daten des Clusters zu speichern. Die IP-Adresse jedes Knotens ist unten dargestellt:
- Master oder Manager Node – 104.245.33.61
- Datenknoten1 – 104.245.32.195
- Datenknoten2 – 69.87.218.169
Voraussetzungen
- Drei Server, auf denen Debian 10 läuft, einer für den Managerknoten und die anderen sind Datenknoten.
- Ein root-Passwort wird auf jedem Server eingerichtet.
Erste Schritte
Zuerst musst du alle Server auf die neueste Version aktualisieren. Du kannst alle mit dem folgenden Befehl aktualisieren:
apt-get update -y
Sobald alle Server aktualisiert sind, kannst du mit dem nächsten Schritt fortfahren.
MySQL Cluster Manager installieren und einrichten
Zuerst musst du das MySQL Cluster Management Paket auf dem Master Node installieren. Standardmäßig ist dieses Paket nicht im Standard-Repository von Debian 10 enthalten. Daher musst du es von der offiziellen MySQL Webseite herunterladen.
Du kannst es mit dem folgenden Befehl herunterladen:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Nachdem du die deb-Datei heruntergeladen hast, installiere sie mit dem folgenden Befehl:
dpkg -i mysql-cluster-community-management-server_8.0.24-1debian10_amd64.deb
Sobald die Installation abgeschlossen ist, erstelle ein Verzeichnis zum Speichern der Clusterkonfiguration mit dem folgenden Befehl:
mkdir /var/lib/mysql-cluster
Als nächstes erstellst du eine neue Konfigurationsdatei mit dem folgenden Befehl:
nano /var/lib/mysql-cluster/config.ini
Füge die folgenden Zeilen hinzu:
[ndbd default] NoOfReplicas=2 # Number of replicas [ndb_mgmd] # Management process options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager datadir=/var/lib/mysql-cluster [ndbd] hostname=104.245.32.195 #IP of the first data node NodeId=2 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [ndbd] hostname=69.87.218.169 #IP of the second data node NodeId=3 # Node ID for this data node datadir=/usr/local/mysql/data # Remote directory for the data files [mysqld] # SQL node options: hostname=104.245.33.61 #IP of the MySQL Cluster Manager
Speichere und schließe die Datei, wenn du fertig bist und starte den Clustermanager mit dem folgenden Befehl:
ndb_mgmd -f /var/lib/mysql-cluster/config.ini
Du solltest die folgende Ausgabe erhalten:
MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 2021-05-10 08:23:05 [MgmtSrvr] INFO -- The default config directory '/usr/mysql-cluster' does not exist. Trying to create it... 2021-05-10 08:23:05 [MgmtSrvr] INFO -- Sucessfully created config directory
Beende nun den laufenden Server mit dem folgenden Befehl:
pkill -f ndb_mgmd
Als nächstes erstellst du eine systemd-Dienstdatei für den MySQL Cluster Manager, um den Dienst zu verwalten:
nano /etc/systemd/system/ndb_mgmd.service
Füge die folgenden Zeilen hinzu:
[Unit] Description=MySQL NDB Cluster Management Server After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Speichere und schließe die Datei und lade den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reload
Starte als nächstes den Cluster Manager und aktiviere ihn mit dem folgenden Befehl, damit er beim Neustart des Systems gestartet wird:
systemctl start ndb_mgmd systemctl enable ndb_mgmd
Du kannst nun den Status des Dienstes mit dem folgenden Befehl überprüfen:
systemctl status ndb_mgmd
Du solltest die folgende Ausgabe erhalten:
? ndb_mgmd.service - MySQL NDB Cluster Management Server Loaded: loaded (/etc/systemd/system/ndb_mgmd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:23:53 UTC; 6s ago Process: 984 ExecStart=/usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini (code=exited, status=0/SUCCESS) Main PID: 985 (ndb_mgmd) Tasks: 12 (limit: 2359) Memory: 6.5M CGroup: /system.slice/ndb_mgmd.service ??985 /usr/sbin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini May 10 08:23:53 master systemd[1]: Starting MySQL NDB Cluster Management Server... May 10 08:23:53 master ndb_mgmd[984]: MySQL Cluster Management Server mysql-8.0.24 ndb-8.0.24 May 10 08:23:53 master systemd[1]: Started MySQL NDB Cluster Management Server.
Sobald du fertig bist, kannst du mit dem nächsten Schritt fortfahren.
Datenknoten installieren und konfigurieren
Als nächstes werden wir das Data Node Paket auf anderen Servern installieren und konfigurieren, damit es mit dem MySQL Cluster Manager kommunizieren kann.
Als erstes installierst du die benötigten Abhängigkeiten auf beiden Datenknoten mit dem folgenden Befehl:
apt-get install libclass-methodmaker-perl -y
Sobald alle Abhängigkeiten installiert sind, lade die neueste Version der MySQL Data Nodes deb-Datei mit dem folgenden Befehl herunter:
wget https://cdn.mysql.com//Downloads/MySQL-Cluster-8.0/mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Sobald der Download abgeschlossen ist, installiere die heruntergeladene Datei mit dem folgenden Befehl:
dpkg -i mysql-cluster-community-data-node_8.0.24-1debian10_amd64.deb
Standardmäßig speichern die Data Nodes alle Konfigurationen in der Datei /etc/my.cnf.
Erstelle also eine neue /etc/my.cnf Datei auf beiden Datenknoten mit dem folgenden Befehl:
nano /etc/my.cnf
Füge die Cluster-IP wie unten gezeigt hinzu:
[mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Speichere und schließe die Datei und erstelle dann ein Datenverzeichnis auf beiden Datenknoten:
mkdir -p /usr/local/mysql/data
Starte nun die Datenknoten mit dem folgenden Kommando:
ndbd
Du solltest die folgende Ausgabe erhalten:
2021-05-10 08:27:13 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' 2021-05-10 08:27:13 [ndbd] INFO -- Angel allocated nodeid: 2
Als nächstes beende den laufenden ndbd Prozess mit dem folgenden Befehl:
pkill -f ndbd
Erstelle als nächstes eine systemd Service Datei für ndbd auf beiden Datenknoten mit dem folgenden Befehl:
nano /etc/systemd/system/ndbd.service
Füge die folgenden Zeilen hinzu:
[Unit] Description=MySQL NDB Data Node Daemon After=network.target auditd.service [Service] Type=forking ExecStart=/usr/sbin/ndbd ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target
Speichere und schließe die Datei und lade dann den systemd-Daemon mit dem folgenden Befehl neu:
systemctl daemon-reload
Starte als nächstes den ndbd-Dienst und sorge dafür, dass er beim Neustart des Systems mit folgendem Befehl gestartet wird:
systemctl start ndbd systemctl enable ndbd
Du kannst den Status des ndbd-Dienstes auch mit dem folgenden Befehl überprüfen:
systemctl status ndbd
Du solltest die folgende Ausgabe erhalten:
? ndbd.service - MySQL NDB Data Node Daemon Loaded: loaded (/etc/systemd/system/ndbd.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:28:28 UTC; 12s ago Process: 740 ExecStart=/usr/sbin/ndbd (code=exited, status=0/SUCCESS) Main PID: 741 (ndbd) Tasks: 46 (limit: 2359) Memory: 827.1M CGroup: /system.slice/ndbd.service ??741 /usr/sbin/ndbd ??742 /usr/sbin/ndbd May 10 08:28:28 data1 systemd[1]: Starting MySQL NDB Data Node Daemon... May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel connected to '104.245.33.61:1186' May 10 08:28:28 data1 ndbd[740]: 2021-05-10 08:28:28 [ndbd] INFO -- Angel allocated nodeid: 2 May 10 08:28:28 data1 systemd[1]: Started MySQL NDB Data Node Daemon.
MySQL Server installieren und konfigurieren
Als nächstes werden wir die MySQL Server und Client Pakete herunterladen und auf dem MySQL Cluster Manager Node installieren.
Lade zuerst die neueste Version des MySQL Cluster Bundles mit dem folgenden Befehl herunter:
wget https://cdn.mysql.com/Downloads/MySQL-Cluster-8.0/mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar
Als nächstes entpackst du die heruntergeladene Datei mit dem folgenden Befehl in das /opt Verzeichnis:
tar -xvf mysql-cluster_8.0.24-1debian10_amd64.deb-bundle.tar -C /opt
Dann wechselst du in das Verzeichnis /opt und installierst die benötigten Abhängigkeiten mit dem folgenden Befehl:
cd /opt apt-get install libaio1 libmecab2 libnuma1 psmisc -y
Schlussendlich installierst du die MySQL Common deb Datei mit dem folgenden Befehl:
dpkg -i mysql-common*
Als nächstes installierst du die MySQL Client Pakete mit dem folgenden Befehl:
dpkg -i mysql-cluster-community-client_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-core_8.0.24-1debian10_amd64.deb mysql-cluster-community-client-plugins_8.0.24-1debian10_amd64.deb dpkg -i mysql-client_8.0.24-1debian10_amd64.deb dpkg -i mysql-cluster-community-server*
Wenn du einen Fehler bei den Abhängigkeiten bekommst, führe den folgenden Befehl aus:
apt-get install -f
Als nächstes installierst du das MySQL Server-Paket mit dem folgenden Befehl:
dpkg -i mysql-server_8.0.24-1debian10_amd64.deb
Während der Installation wirst du aufgefordert, ein MySQL root Passwort zu setzen.
Nach der Installation des MySQL Servers musst du die MySQL Hauptkonfigurationsdatei bearbeiten und die Cluster IP definieren:
nano /etc/mysql/my.cnf
Füge die folgenden Zeilen hinzu:
[mysqld] # Options for mysqld process: ndbcluster # run NDB storage engine [mysql_cluster] # Options for NDB Cluster processes: ndb-connectstring=104.245.33.61 #IP of the MySQL Cluster Manager
Speichere und schließe die Datei, wenn du fertig bist. Als nächstes musst du den MySQL-Dienst neu starten und aktivieren, dass er beim Neustart des Systems gestartet wird:
systemctl restart mysql systemctl enable mysql
Du kannst den Status des MySQL-Servers mit dem folgenden Befehl überprüfen:
systemctl status mysql
Du solltest die folgende Ausgabe sehen:
? mysql.service - MySQL Cluster Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2021-05-10 08:35:04 UTC; 7s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 1950 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 1985 (mysqld) Status: "Server is operational" Tasks: 47 (limit: 2359) Memory: 372.0M CGroup: /system.slice/mysql.service ??1985 /usr/sbin/mysqld May 10 08:35:01 master systemd[1]: Starting MySQL Cluster Community Server... May 10 08:35:04 master systemd[1]: Started MySQL Cluster Community Server.
Wenn du damit fertig bist, kannst du mit dem nächsten Schritt fortfahren.
MySQL Cluster testen
Nun haben wir den Drei-Knoten-MySQL-Cluster erfolgreich installiert und konfiguriert. Als nächstes musst du überprüfen, ob er funktioniert oder nicht.
Logge dich zuerst in den MySQL Cluster Manager Node ein und melde dich mit dem folgenden Befehl bei MySQL an:
mysql -u root -p
Gib dein MySQL Root-Passwort ein und überprüfe dann die Cluster-Informationen mit dem folgenden Befehl:
mysql> SHOW ENGINE NDB STATUS \G
Wenn alles in Ordnung ist, solltest du die folgende Ausgabe erhalten:
*************************** 1. row *************************** Type: ndbclus Name: connection Status: cluster_node_id=4, connected_host=104.245.33.61, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0 *************************** 2. row *************************** Type: ndbclus Name: NdbTransaction Status: created=2, free=2, sizeof=392 *************************** 3. row *************************** Type: ndbclus Name: NdbOperation Status: created=4, free=4, sizeof=944 *************************** 4. row *************************** Type: ndbclus Name: NdbIndexScanOperation Status: created=0, free=0, sizeof=1152 *************************** 5. row *************************** Type: ndbclus Name: NdbIndexOperation Status: created=0, free=0, sizeof=952 *************************** 6. row *************************** Type: ndbclus Name: NdbRecAttr Status: created=0, free=0, sizeof=88 *************************** 7. row *************************** Type: ndbclus Name: NdbApiSignal Status: created=16, free=16, sizeof=144 *************************** 8. row *************************** Type: ndbclus Name: NdbLabel Status: created=0, free=0, sizeof=200 *************************** 9. row *************************** Type: ndbclus Name: NdbBranch Status: created=0, free=0, sizeof=32 *************************** 10. row *************************** Type: ndbclus Name: NdbSubroutine Status: created=0, free=0, sizeof=72 *************************** 11. row *************************** Type: ndbclus Name: NdbCall Status: created=0, free=0, sizeof=24 *************************** 12. row *************************** Type: ndbclus Name: NdbBlob Status: created=0, free=0, sizeof=592 *************************** 13. row *************************** Type: ndbclus Name: NdbReceiver Status: created=0, free=0, sizeof=128 *************************** 14. row *************************** Type: ndbclus Name: NdbLockHandle Status: created=0, free=0, sizeof=48 *************************** 15. row *************************** Type: ndbclus Name: binlog Status: latest_epoch=897648164875, latest_trans_epoch=820338753551, latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0, latest_applied_binlog_epoch=0 15 rows in set (0.00 sec)
Verlasse nun die MySQL-Shell mit folgendem Kommando:
mysql> exit
Nun führen wir einen weiteren Test durch, um zu bestätigen, dass der Cluster richtig funktioniert.
Verbinde dich mit der Cluster Management Konsole mit dem folgenden Befehl:
ndb_mgm
Du solltest die folgende Ausgabe sehen:
-- NDB Cluster -- Management Client -- ndb_mgm>
Führe nun den folgenden Befehl aus, um alle Datenbestände zu überprüfen:
ndb_mgm> SHOW
Du solltest die folgende Ausgabe erhalten:
Connected to Management Server at: 104.245.33.61:1186 Cluster Configuration --------------------- [ndbd(NDB)] 2 node(s) id=2 @104.245.32.195 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0, *) id=3 @69.87.218.169 (mysql-8.0.24 ndb-8.0.24, Nodegroup: 0) [ndb_mgmd(MGM)] 1 node(s) id=1 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24) [mysqld(API)] 1 node(s) id=4 @104.245.33.61 (mysql-8.0.24 ndb-8.0.24)
Um den Status des ersten Datenknotens zu überprüfen, führe den folgenden Befehl aus:
ndb_mgm> 2 STATUS
Du solltest die folgende Ausgabe sehen:
Node 2: started (mysql-8.0.24 ndb-8.0.24)
Um den Status des zweiten Datenknotens zu überprüfen, führe den folgenden Befehl aus:
ndb_mgm> 3 STATUS
Du solltest die folgende Ausgabe sehen:
Node 3: started (mysql-8.0.24 ndb-8.0.24)
Fazit
Glückwunsch! Du hast erfolgreich einen MySQL Cluster mit drei Knoten auf einem Debian 10 Server installiert und eingerichtet. Du kannst dieses Setup nun in der Produktionsumgebung verwenden, um Skalierbarkeit und Verfügbarkeit zu erreichen.