Das Ein­rich­ten eines MariaDB-Clusters mit Galera Cluster ver­bes­sert die Aus­fall­si­cher­heit und ver­ein­facht die Ska­lie­rung Ihrer Datenbank. In unserem Tutorial zeigen wir Ihnen, wie Sie einen Galera-Cluster auf Ubuntu 20.04 in­stal­lie­ren.

Galera-Cluster MariaDB: Das sind die Vor­aus­set­zun­gen

Um einen MariaDB-Galera-Cluster auf Ubuntu 20.04 zu in­stal­lie­ren, müssen Sie die folgenden Vor­aus­set­zun­gen erfüllen:

  • Mehrere Server: Es sind min­des­tens drei Server oder virtuelle Maschinen er­for­der­lich, um einen Cluster auf­zu­bau­en. Alle Server sollten auf demselben Netzwerk sein.
  • Root-Rechte: Sie benötigen Root-Zugriff oder zumindest ad­mi­nis­tra­ti­ve Rechte auf den Servern.

Schritt-für-Schritt-Anleitung: Galera-Cluster MariaDB auf Ubuntu 20.04

Ein MariaDB-Galera-Cluster ist eine prak­ti­sche Da­ten­bank­lö­sung, die hohe Ver­füg­bar­keit, Da­ten­in­te­gri­tät und Ska­lier­bar­keit für an­spruchs­vol­le An­wen­dun­gen bietet. In dieser Schritt-für-Schritt-Anleitung führen wir Sie durch den Prozess der Ein­rich­tung eines MariaDB-Galera-Clusters auf Ubuntu 20.04. Bevor Sie beginnen, stellen Sie sicher, dass Sie min­des­tens drei Server oder virtuelle Maschinen zur Verfügung haben, um den Cluster auf­zu­bau­en.

Schritt 1: Pakete ak­tua­li­sie­ren

Sie sollten zuerst Ihr Ubuntu-System auf den neuesten Stand bringen. Dies ist es­sen­zi­ell, damit Sie aktuelle Pakete und Si­cher­heits­up­dates haben.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um die Pa­ket­quel­len zu ak­tua­li­sie­ren:

sudo apt update
shell

In­stal­lie­ren Sie alle ver­füg­ba­ren Updates:

sudo apt upgrade -y
shell

Es ist emp­feh­lens­wert, dass Sie auch veraltete oder un­ge­nutz­te Pakete entfernen, um die Server zu be­rei­ni­gen:

sudo apt autoremove -y
shell

Schritt 2: MariaDB auf den Servern in­stal­lie­ren

In­stal­lie­ren Sie nun MariaDB auf jedem Ihrer Server. Seit Version 10.1 sind auch die Galera-Pakete neben MariaDB-Server enthalten.

sudo apt install mariadb-server
shell

Nach der In­stal­la­ti­on können Sie den MariaDB-Dienst starten:

sudo systemctl start mariadb
shell

Mit dem folgenden Kommando stellen Sie ein, dass MariaDB bei jedem Neustart des Systems au­to­ma­tisch aktiviert wird:

sudo systemctl enable mariadb
shell

Prüfen Sie, ob MariaDB läuft:

sudo systemctl status mariadb
shell

Sie sollten außerdem einige grund­le­gen­de Si­cher­heits­ein­stel­lun­gen vornehmen und die Datenbank kon­fi­gu­rie­ren. Starten Sie dazu den Ein­rich­tungs­as­sis­ten­ten:

sudo mysql_secure_installation
shell

Der Assistent führt Sie durch die Schritte, etwa das Setzen eines Root-Passworts, das Entfernen anonymer User oder das Entfernen der Test­da­ten­bank.

Enter current password for root (enter for none): 
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
shell

Das Skript fragt zunächst nach dem aktuellen Root-Passwort. Wenn Sie zum ersten Mal MariaDB unter Ubuntu 20.04 in­stal­lie­ren, drücken Sie einfach die Ein­ga­be­tas­te und geben Sie dann ein neues Passwort ein.

Schritt 3: Galera-Cluster MariaDB Nodes kon­fi­gu­rie­ren

Erstellen Sie eine cnf-Datei im Ver­zeich­nis /etc/mysql/conf.d auf jedem Knoten, um die Galera-spe­zi­fi­schen Ein­stel­lun­gen fest­zu­le­gen.

nano /etc/mysql/conf.d/galera.cnf
shell

Die Datei be­inhal­tet all­ge­mei­ne Da­ten­bank­ein­stel­lun­gen, wie das binäre Pro­to­koll­for­mat und die Standard-Speicher-Engine. Zudem enthält sie Kon­fi­gu­ra­tio­nen für den Galera-Cluster, ein­schließ­lich des Cluster-Namens und der Cluster-Adresse.

Fügen Sie folgende Zeilen für den ersten Knoten ein:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell
  • All­ge­mei­ne Da­ten­bank­ein­stel­lun­gen: Dazu gehören Ein­stel­lun­gen wie binlog_format=ROW für das Format der binären Pro­to­kol­le und default-storage-engine=innodb für die Standard-Speicher-Engine.
  • Galera-Provider-Kon­fi­gu­ra­ti­on: Ein­stel­lun­gen wie wsrep_on=ON dienen dazu, die Galera-Re­pli­ka­ti­on zu ak­ti­vie­ren und wsrep_provider=/usr/lib/galera/libgalera_smm.so, um den Pfad zur Galera-Bi­blio­thek anzugeben.
  • Galera-Cluster-Kon­fi­gu­ra­ti­on: Diese umfasst den Cluster-Namen (wsrep_cluster_name) und die Cluster-Adresse (wsrep_cluster_address), die die IP-Adressen oder Hostnamen der Knoten im Cluster enthält.
  • Galera-Syn­chro­ni­sa­ti­on: Kon­fi­gu­riert die Methode für den State Snapshot Transfer (SST), z. B. wsrep_sst_method=rsync.
  • Galera-Knoten-Kon­fi­gu­ra­ti­on: Definiert die IP-Adresse oder den Hostnamen des aktuellen Knotens (wsrep_node_address) sowie den Namen des Knotens (wsrep_node_name).

Nachdem Sie die Datei ge­spei­chert haben, erstellen Sie eine für den zweiten Knoten:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shell

Fahren Sie nun mit dem letzten Knoten fort:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shell

Schritt 4: Firewall auf Servern ändern

Da die Knoten mit­ein­an­der über bestimmte Ports kom­mu­ni­zie­ren, müssen Sie die Firewall-Ein­stel­lun­gen anpassen.

Öffnen Sie die nach­fol­gen­den Ports in Ihrer Firewall:

  • Port 3306: Dies ist der Stan­dard­port für MariaDB. Er wird für die Da­ten­bank­kom­mu­ni­ka­ti­on und -anfragen verwendet.
  • Galera-Ports: Zu­sätz­lich zum Stan­dard­port 3306 benutzt Galera auch andere Ports für die interne Kom­mu­ni­ka­ti­on zwischen den Knoten. Der Stan­dard­be­reich für Galera-Ports liegt in der Regel bei 4567, 4568 und 4444 für den State Snapshot Transfer (SST).

Sie können die Firewall-Ein­stel­lun­gen auf Ihrem Ubuntu-Server mit dem folgenden Befehl festlegen:

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shell

Schritt 5: Galera-Cluster MariaDB starten

Beenden Sie den MariaDB-Dienst, falls er bereits läuft:

sudo systemctl stop mariadb
shell

Dieser Befehl startet den MariaDB-Server und in­itia­li­siert einen neuen Galera-Cluster auf dem ersten Knoten:

sudo galera_new_cluster
shell

Prüfen Sie die Anzahl der Knoten im Cluster:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Sie sollten folgende Ausgabe erhalten:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 1              |
+--------------------------+------------ -+
shell

Der erste Knoten wurde er­folg­reich gestartet.

Ak­ti­vie­ren Sie den zweiten Knoten:

systemctl start mariadb
shell

Kon­trol­lie­ren Sie, ob sich die Anzahl der Knoten erhöht hat:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

In der Konsole sehen wir:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 2               |
+--------------------------+--------------+
shell

Nun starten wir den dritten Knoten:

systemctl start mariadb
shell

Schauen Sie, ob der Knoten ord­nungs­ge­mäß läuft:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Es sollten sich jetzt drei Nodes im Cluster befinden:

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 3              |
+--------------------------+------------ -+
shell

Schritt 6: Re­pli­ka­ti­on testen

Stellen Sie sicher, dass Sie eine Ver­bin­dung zu jedem Knoten im Cluster her­stel­len können. Verwenden Sie den MariaDB-Client, um sich als Root-User oder als eine andere Be­nut­ze­rin bzw. ein anderer Benutzer mit aus­rei­chen­den Rechten an­zu­mel­den.

mysql -u root -p
shell

Erstellen Sie eine neue Test­da­ten­bank auf einem der Knoten im Cluster:

CREATE DATABASE test_db;
sql

Melden Sie sich bei den anderen Knoten an und über­prü­fen Sie, ob die Test­da­ten­bank vorhanden ist:

SHOW DATABASES;
sql

Die Test­da­ten­bank sollte in der Liste der Da­ten­ban­ken er­schei­nen:

+-------------------------------+
| Database                        |
+-------------------------------+
| information_schema   |
| mysql                              |
| performance_schema |
| test_db                          | 
| sys                                  |
+------------------------------+
sql

Fügen Sie eine neue Test­ta­bel­le in der Test­da­ten­bank hinzu:

USE test_db;
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
sql

Geben Sie einige Testdaten in die Spalte name der Test­ta­bel­le ein:

INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
sql

Kon­trol­lie­ren Sie auf den anderen Knoten, ob die Test­ta­bel­le und die ein­ge­füg­ten Daten über­nom­men wurden:

USE test_db;
SELECT * FROM test_table;
sql

Die Ausgabe zeigt uns die Liste der Personen mit ihren Namen und der ID an:

+----+-----------+
| id | name    |
+----+-----------+
| 1  | Alice     |
| 2  | Bob       |
| 3  | Charlie |
+----+----------+
sql

So ak­tua­li­sie­ren Sie einen Datensatz in der Test­ta­bel­le:

UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sql

Probieren Sie, einen Datensatz zu löschen:

DELETE FROM test_table WHERE name = 'Bob';
sql

Über­prü­fen Sie auf den anderen Knoten, ob die Ak­tua­li­sie­run­gen und Lö­schun­gen re­pli­ziert wurden:

SELECT * FROM test_table;
sql

Die Än­de­run­gen er­schei­nen er­folg­reich auf jedem Knoten:

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
sql
Zum Hauptmenü