# Galera Cluster: MariaDB-Cluster auf Ubuntu 20.04 einrichten

Das Einrichten eines **MariaDB-Clusters mit Galera Cluster** verbessert die Ausfallsicherheit und vereinfacht die Skalierung Ihrer Datenbank. In unserem Tutorial zeigen wir Ihnen, wie Sie einen Galera-Cluster auf Ubuntu 20.04 installieren.

## Galera-Cluster MariaDB: Das sind die Voraussetzungen

Um einen MariaDB-Galera-Cluster auf **Ubuntu 20.04** zu installieren, müssen Sie die folgenden Voraussetzungen erfüllen:

- **Mehrere Server**: Es sind mindestens drei Server oder virtuelle Maschinen erforderlich, um einen Cluster aufzubauen. Alle Server sollten auf demselben Netzwerk sein.
- **Root-Rechte**: Sie benötigen Root-Zugriff oder zumindest administrative Rechte auf den Servern.

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

Ein MariaDB-Galera-Cluster ist eine praktische **Datenbanklösung**, die hohe Verfügbarkeit, Datenintegrität und Skalierbarkeit für anspruchsvolle Anwendungen bietet. In dieser Schritt-für-Schritt-Anleitung führen wir Sie durch den Prozess der Einrichtung eines MariaDB-Galera-Clusters auf Ubuntu 20.04. Bevor Sie beginnen, stellen Sie sicher, dass Sie mindestens drei Server oder virtuelle Maschinen zur Verfügung haben, um den Cluster aufzubauen.

### Schritt 1: Pakete aktualisieren

Sie sollten zuerst Ihr Ubuntu-System auf den neuesten Stand bringen. Dies ist essenziell, damit Sie **aktuelle Pakete und Sicherheitsupdates** haben.

Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um die Paketquellen zu aktualisieren:

```shell
sudo apt update
```

Installieren Sie alle verfügbaren Updates:

```shell
sudo apt upgrade -y
```

Es ist empfehlenswert, dass Sie auch **veraltete oder ungenutzte Pakete entfernen**, um die Server zu bereinigen:

```shell
sudo apt autoremove -y
```

### Schritt 2: MariaDB auf den Servern installieren

Installieren Sie nun MariaDB auf jedem Ihrer Server. Seit **Version 10.1** sind auch die Galera-Pakete neben MariaDB-Server enthalten.

```shell
sudo apt install mariadb-server
```

Nach der Installation können Sie den MariaDB-Dienst starten:

```shell
sudo systemctl start mariadb
```

Mit dem folgenden Kommando stellen Sie ein, dass MariaDB bei jedem Neustart des Systems automatisch aktiviert wird:

```shell
sudo systemctl enable mariadb
```

Prüfen Sie, ob MariaDB läuft:

```shell
sudo systemctl status mariadb
```

Sie sollten außerdem einige grundlegende Sicherheitseinstellungen vornehmen und die Datenbank konfigurieren. Starten Sie dazu den **Einrichtungsassistenten**:

```shell
sudo mysql_secure_installation
```

Der Assistent führt Sie durch die Schritte, etwa das Setzen eines Root-Passworts, das Entfernen anonymer User oder das Entfernen der Testdatenbank.

```shell
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
```

Das Skript fragt zunächst nach dem aktuellen **Root-Passwort**. Wenn Sie zum ersten Mal [MariaDB unter Ubuntu 20.04 installieren](https://www.ionos.com/de-ch/digitalguide/hosting/hosting-technik/mariadb-installieren-ubuntu-2004/), drücken Sie einfach die Eingabetaste und geben Sie dann ein neues Passwort ein.

### Schritt 3: Galera-Cluster MariaDB Nodes konfigurieren

Erstellen Sie eine `cnf`-Datei im Verzeichnis `/etc/mysql/conf.d` auf jedem Knoten, um die Galera-spezifischen Einstellungen festzulegen.

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

Die Datei beinhaltet allgemeine Datenbankeinstellungen, wie das binäre Protokollformat und die **Standard-Speicher-Engine**. Zudem enthält sie Konfigurationen für den Galera-Cluster, einschließlich des Cluster-Namens und der Cluster-Adresse.

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

```shell
[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"
```

- **Allgemeine Datenbankeinstellungen**: Dazu gehören Einstellungen wie `binlog_format=ROW` für das Format der binären Protokolle und `default-storage-engine=innodb` für die Standard-Speicher-Engine.
- **Galera-Provider-Konfiguration**: Einstellungen wie `wsrep_on=ON` dienen dazu, die Galera-Replikation zu aktivieren und `wsrep_provider=/usr/lib/galera/libgalera_smm.so`, um den Pfad zur Galera-Bibliothek anzugeben.
- **Galera-Cluster-Konfiguration**: 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-Synchronisation**: Konfiguriert die Methode für den State Snapshot Transfer (SST), z. B. `wsrep_sst_method=rsync`.
- **Galera-Knoten-Konfiguration**: 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 gespeichert haben, erstellen Sie eine für den zweiten Knoten:

```shell
[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"
```

Fahren Sie nun mit dem letzten Knoten fort:

```shell
[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"
```

### Schritt 4: Firewall auf Servern ändern

Da die Knoten miteinander über bestimmte Ports kommunizieren, müssen Sie die **Firewall-Einstellungen** anpassen.

Öffnen Sie die nachfolgenden **Ports** in Ihrer Firewall:

- **Port 3306**: Dies ist der Standardport für MariaDB. Er wird für die Datenbankkommunikation und -anfragen verwendet.
- **Galera-Ports**: Zusätzlich zum Standardport 3306 benutzt Galera auch andere Ports für die interne Kommunikation zwischen den Knoten. Der Standardbereich 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-Einstellungen auf Ihrem Ubuntu-Server mit dem folgenden Befehl festlegen:

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

### Schritt 5: Galera-Cluster MariaDB starten

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

```shell
sudo systemctl stop mariadb
```

Dieser Befehl startet den **MariaDB-Server** und initialisiert einen neuen Galera-Cluster auf dem ersten Knoten:

```shell
sudo galera_new_cluster
```

Prüfen Sie die Anzahl der Knoten im Cluster:

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

Sie sollten folgende Ausgabe erhalten:

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

Der erste Knoten wurde erfolgreich gestartet.

Aktivieren Sie den zweiten Knoten:

```shell
systemctl start mariadb
```

Kontrollieren Sie, ob sich die Anzahl der Knoten erhöht hat:

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

In der Konsole sehen wir:

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

Nun starten wir den dritten Knoten:

```shell
systemctl start mariadb
```

Schauen Sie, ob der Knoten ordnungsgemäß läuft:

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

Es sollten sich jetzt drei Nodes im Cluster befinden:

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

### Schritt 6: Replikation testen

Stellen Sie sicher, dass Sie eine Verbindung zu jedem Knoten im Cluster herstellen können. Verwenden Sie den **MariaDB-Client**, um sich als Root-User oder als eine andere Benutzerin bzw. ein anderer Benutzer mit ausreichenden Rechten anzumelden.

```shell
mysql -u root -p
```

Erstellen Sie eine neue Testdatenbank auf einem der Knoten im Cluster:

```sql
CREATE DATABASE test_db;
```

Melden Sie sich bei den anderen Knoten an und überprüfen Sie, ob die Testdatenbank vorhanden ist:

```sql
SHOW DATABASES;
```

Die Testdatenbank sollte in der Liste der Datenbanken erscheinen:

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

Fügen Sie eine neue Testtabelle in der Testdatenbank hinzu:

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

Geben Sie einige Testdaten in die Spalte `name` der Testtabelle ein:

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

Kontrollieren Sie auf den anderen Knoten, ob die Testtabelle und die eingefügten Daten übernommen wurden:

```sql
USE test_db;
SELECT * FROM test_table;
```

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

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

So aktualisieren Sie einen Datensatz in der Testtabelle:

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

Probieren Sie, einen Datensatz zu löschen:

```sql
DELETE FROM test_table WHERE name = 'Bob';
```

Überprüfen Sie auf den anderen Knoten, ob die Aktualisierungen und Löschungen repliziert wurden:

```sql
SELECT * FROM test_table;
```

Die Änderungen erscheinen erfolgreich auf jedem Knoten:

```sql
+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charlie  |
+----+-----------+
```


This is a markdown version of: [https://www.ionos.com/de-ch/digitalguide/hosting/hosting-technik/galera-cluster-mariadb-auf-ubuntu-2004/](https://www.ionos.com/de-ch/digitalguide/hosting/hosting-technik/galera-cluster-mariadb-auf-ubuntu-2004/) for AI/LLM consumption.