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.

Das könnte dich auch interessieren …