Die Ein­rich­tung eines MariaDB-Clusters mit Galera Cluster steigert die Aus­fall­si­cher­heit und ver­ein­facht die Ska­lie­rung deiner Datenbank spürbar. In unserem Guide zeigen wir dir, wie du einen Galera-Cluster auf Ubuntu 20.04 aufsetzt.

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 folgende Be­din­gun­gen erfüllt sein:

  • Mehrere Server: Du benötigst min­des­tens drei Server oder VMs, um einen stabilen Cluster zu bilden. Alle Systeme sollten im selben Netzwerk kom­mu­ni­zie­ren.
  • Root-Rechte: Du brauchst Root-Zugriff oder ad­mi­nis­tra­ti­ve Be­rech­ti­gun­gen auf allen be­tei­lig­ten Servern.

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

Ein MariaDB-Galera-Cluster ist eine ef­fi­zi­en­te Da­ten­bank­lö­sung, die Hoch­ver­füg­bar­keit, Da­ten­in­te­gri­tät und Ska­lier­bar­keit für an­spruchs­vol­le Projekte ga­ran­tiert. In dieser Anleitung begleiten wir dich durch die Kon­fi­gu­ra­ti­on eines MariaDB-Galera-Clusters auf Ubuntu 20.04. Stelle vorab sicher, dass min­des­tens drei Server für den Cluster be­reit­ste­hen.

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

Bringe dein Ubuntu-System zuerst auf den aktuellen Stand. Das ist wichtig, um neueste Pakete und Si­cher­heits­up­dates zu nutzen.

Öffne dein Terminal und ak­tua­li­sie­re die Pa­ket­quel­len mit diesem Befehl:

sudo apt update
shell

In­stal­lie­re im Anschluss alle ver­füg­ba­ren Updates:

sudo apt upgrade -y
shell

Zudem ist es ratsam, veraltete oder nicht mehr genutzte Pakete zu löschen, um das System sauber zu halten:

sudo apt autoremove -y
shell

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

In­stal­lie­re nun MariaDB auf jedem deiner Server. Seit der Version 10.1 sind die Galera-Pakete direkt im MariaDB-Server enthalten.

sudo apt install mariadb-server
shell

Starte nach der In­stal­la­ti­on den MariaDB-Dienst:

sudo systemctl start mariadb
shell

Mit diesem Kommando sorgst du dafür, dass MariaDB bei jedem Sys­tem­start au­to­ma­tisch mit­ge­la­den wird:

sudo systemctl enable mariadb
shell

Prüfe kurz, ob der Dienst aktiv ist:

sudo systemctl status mariadb
shell

Kümmere dich nun um die grund­le­gen­den Si­cher­heits­ein­stel­lun­gen. Nutze dafür den Ein­rich­tungs­as­sis­ten­ten:

sudo mysql_secure_installation
shell

Der Assistent führt dich durch wichtige Schritte, wie das Festlegen eines Root-Passworts sowie das Entfernen anonymer User und 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

Zuerst wirst du nach dem aktuellen Root-Passwort gefragt. Wenn du MariaDB unter Ubuntu 20.04 neu in­stal­lierst, drücke einfach Enter und vergib danach ein neues, sicheres Passwort.

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

Lege auf jedem Knoten eine cnf-Datei im Ver­zeich­nis /etc/mysql/conf.d an, um die spe­zi­fi­schen Galera-Parameter zu de­fi­nie­ren.

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

Diese Datei steuert all­ge­mei­ne Datenbank-Optionen wie das binäre Pro­to­koll­for­mat und die Standard-Speicher-Engine. Zudem enthält sie die Kon­fi­gu­ra­ti­on für den Cluster-Verbund inklusive Name und Adresse.

Füge für den ersten Knoten folgende Zeilen 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: Hierzu zählen binlog_format=ROW für das binäre Pro­to­koll­for­mat sowie default-storage-engine=innodb für die Standard-Engine.
  • Galera-Provider-Kon­fi­gu­ra­ti­on: Mit wsrep_on=ON wird die Re­pli­ka­ti­on aktiviert und über wsrep_provider=/usr/lib/galera/libgalera_smm.so der Pfad zur Bi­blio­thek angegeben.
  • Galera-Cluster-Kon­fi­gu­ra­ti­on: Definiert den Clus­ter­na­men (wsrep_cluster_name) und die Adressen (wsrep_cluster_address) aller be­tei­lig­ten Knoten-IPs.
  • Galera-Syn­chro­ni­sa­ti­on: Legt die Methode für den State Snapshot Transfer (SST) fest, etwa wsrep_sst_method=rsync.
  • Galera-Knoten-Kon­fi­gu­ra­ti­on: Bestimmt die IP-Adresse des aktuellen Knotens (wsrep_node_address) sowie dessen Namen (wsrep_node_name).

Speichere die Datei und wie­der­ho­le den Vorgang 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

Kon­fi­gu­rie­re ab­schlie­ßend den dritten 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_3-ip-address"
wsrep_node_name="node_3"
shell

Schritt 4: Firewall-Ein­stel­lun­gen anpassen

Damit die Knoten rei­bungs­los kom­mu­ni­zie­ren können, musst du die Firewall-Regeln ent­spre­chend anpassen.

Gib folgende Ports in deiner Firewall frei:

  • Port 3306: Der Stan­dard­port für MariaDB-Abfragen und die generelle Da­ten­bank­kom­mu­ni­ka­ti­on.
  • Galera-Ports: Galera benötigt zu­sätz­li­che Ports für den internen Austausch. Stan­dard­mä­ßig sind das 4567, 4568 sowie 4444 für den State Snapshot Transfer (SST).

Die Ein­stel­lun­gen auf deinem Ubuntu-Server nimmst du mit diesem Befehl vor:

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

Schritt 5: Galera-Cluster MariaDB starten

Stoppe den MariaDB-Dienst, falls dieser gerade aktiv ist:

sudo systemctl stop mariadb
shell

Dieser Befehl startet den MariaDB-Server und initiiert den neuen Cluster auf dem ersten Knoten:

sudo galera_new_cluster
shell

Prüfe die Anzahl der aktiven Knoten im Verbund:

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

Du solltest folgende Rück­mel­dung sehen:

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

Der erste Knoten läuft damit er­folg­reich.

Aktiviere nun den zweiten Knoten:

systemctl start mariadb
shell

Kon­trol­lie­re erneut die Knoten-Anzahl:

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

In der Konsole erscheint:

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

Starte zum Abschluss den dritten Knoten:

systemctl start mariadb
shell

Prüfe auch hier den Status:

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

Nun sollten insgesamt drei Nodes im Cluster re­gis­triert sein:

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

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

Ver­ge­wis­se­re dich, dass du dich mit jedem Knoten verbinden kannst. Nutze den MariaDB-Client und melde dich mit ent­spre­chen­den Rechten an.

mysql -u root -p
shell

Erstelle auf einem der Knoten eine neue Test­da­ten­bank:

CREATE DATABASE test_db;
sql

Logge dich bei den anderen Knoten ein und prüfe, ob die Datenbank dort ebenfalls vorhanden ist:

SHOW DATABASES;
sql

Die Test­da­ten­bank sollte nun in der Übersicht auf­tau­chen:

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

Lege eine neue Tabelle innerhalb der Test­da­ten­bank an:

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

Füge Bei­spiel­da­ten in die Spalte name ein:

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

Überprüfe auf den rest­li­chen Knoten, ob die Tabelle und die Daten korrekt syn­chro­ni­siert wurden:

USE test_db;
SELECT * FROM test_table;
sql

Die Ausgabe zeigt die Liste der Einträge inklusive Namen und IDs:

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

So ak­tua­li­sierst du einen Eintrag in der Tabelle:

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

Und so löschst du einen Datensatz:

DELETE FROM test_table WHERE name = 'Bob';
sql

Kon­trol­lie­re ab­schlie­ßend auf den anderen Knoten, ob alle Än­de­run­gen und Lösch­vor­gän­ge re­pli­ziert wurden:

SELECT * FROM test_table;
sql

Die Ak­tua­li­sie­run­gen werden er­folg­reich auf jedem Knoten angezeigt:

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