Galera MariaDB-Cluster: Setup-Guide für Ubuntu 20.04
Die Einrichtung eines MariaDB-Clusters mit Galera Cluster steigert die Ausfallsicherheit und vereinfacht die Skalierung 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 Voraussetzungen
Um einen MariaDB-Galera-Cluster auf Ubuntu 20.04 zu installieren, müssen folgende Bedingungen erfüllt sein:
- Mehrere Server: Du benötigst mindestens drei Server oder VMs, um einen stabilen Cluster zu bilden. Alle Systeme sollten im selben Netzwerk kommunizieren.
- Root-Rechte: Du brauchst Root-Zugriff oder administrative Berechtigungen auf allen beteiligten Servern.
Schritt-für-Schritt-Anleitung: Galera-Cluster MariaDB auf Ubuntu 20.04
Ein MariaDB-Galera-Cluster ist eine effiziente Datenbanklösung, die Hochverfügbarkeit, Datenintegrität und Skalierbarkeit für anspruchsvolle Projekte garantiert. In dieser Anleitung begleiten wir dich durch die Konfiguration eines MariaDB-Galera-Clusters auf Ubuntu 20.04. Stelle vorab sicher, dass mindestens drei Server für den Cluster bereitstehen.
Schritt 1: Pakete aktualisieren
Bringe dein Ubuntu-System zuerst auf den aktuellen Stand. Das ist wichtig, um neueste Pakete und Sicherheitsupdates zu nutzen.
Öffne dein Terminal und aktualisiere die Paketquellen mit diesem Befehl:
sudo apt updateshellInstalliere im Anschluss alle verfügbaren Updates:
sudo apt upgrade -yshellZudem ist es ratsam, veraltete oder nicht mehr genutzte Pakete zu löschen, um das System sauber zu halten:
sudo apt autoremove -yshellSchritt 2: MariaDB auf den Servern installieren
Installiere nun MariaDB auf jedem deiner Server. Seit der Version 10.1 sind die Galera-Pakete direkt im MariaDB-Server enthalten.
sudo apt install mariadb-servershellStarte nach der Installation den MariaDB-Dienst:
sudo systemctl start mariadbshellMit diesem Kommando sorgst du dafür, dass MariaDB bei jedem Systemstart automatisch mitgeladen wird:
sudo systemctl enable mariadbshellPrüfe kurz, ob der Dienst aktiv ist:
sudo systemctl status mariadbshellKümmere dich nun um die grundlegenden Sicherheitseinstellungen. Nutze dafür den Einrichtungsassistenten:
sudo mysql_secure_installationshellDer Assistent führt dich durch wichtige Schritte, wie das Festlegen eines Root-Passworts sowie das Entfernen anonymer User und der Testdatenbank.
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] YshellZuerst wirst du nach dem aktuellen Root-Passwort gefragt. Wenn du MariaDB unter Ubuntu 20.04 neu installierst, drücke einfach Enter und vergib danach ein neues, sicheres Passwort.
Schritt 3: Galera-Cluster MariaDB Nodes konfigurieren
Lege auf jedem Knoten eine cnf-Datei im Verzeichnis /etc/mysql/conf.d an, um die spezifischen Galera-Parameter zu definieren.
nano /etc/mysql/conf.d/galera.cnfshellDiese Datei steuert allgemeine Datenbank-Optionen wie das binäre Protokollformat und die Standard-Speicher-Engine. Zudem enthält sie die Konfiguration 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- Allgemeine Datenbankeinstellungen: Hierzu zählen
binlog_format=ROWfür das binäre Protokollformat sowiedefault-storage-engine=innodbfür die Standard-Engine. - Galera-Provider-Konfiguration: Mit
wsrep_on=ONwird die Replikation aktiviert und überwsrep_provider=/usr/lib/galera/libgalera_smm.soder Pfad zur Bibliothek angegeben. - Galera-Cluster-Konfiguration: Definiert den Clusternamen (
wsrep_cluster_name) und die Adressen (wsrep_cluster_address) aller beteiligten Knoten-IPs. - Galera-Synchronisation: Legt die Methode für den State Snapshot Transfer (SST) fest, etwa
wsrep_sst_method=rsync. - Galera-Knoten-Konfiguration: Bestimmt die IP-Adresse des aktuellen Knotens (
wsrep_node_address) sowie dessen Namen (wsrep_node_name).
Speichere die Datei und wiederhole 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"shellKonfiguriere abschließ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"shellSchritt 4: Firewall-Einstellungen anpassen
Damit die Knoten reibungslos kommunizieren können, musst du die Firewall-Regeln entsprechend anpassen.
Gib folgende Ports in deiner Firewall frei:
- Port 3306: Der Standardport für MariaDB-Abfragen und die generelle Datenbankkommunikation.
- Galera-Ports: Galera benötigt zusätzliche Ports für den internen Austausch. Standardmäßig sind das 4567, 4568 sowie 4444 für den State Snapshot Transfer (SST).
Die Einstellungen auf deinem Ubuntu-Server nimmst du mit diesem Befehl vor:
sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udpshellSchritt 5: Galera-Cluster MariaDB starten
Stoppe den MariaDB-Dienst, falls dieser gerade aktiv ist:
sudo systemctl stop mariadbshellDieser Befehl startet den MariaDB-Server und initiiert den neuen Cluster auf dem ersten Knoten:
sudo galera_new_clustershellPrüfe die Anzahl der aktiven Knoten im Verbund:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellDu solltest folgende Rückmeldung sehen:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+shellDer erste Knoten läuft damit erfolgreich.
Aktiviere nun den zweiten Knoten:
systemctl start mariadbshellKontrolliere erneut die Knoten-Anzahl:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellIn der Konsole erscheint:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+shellStarte zum Abschluss den dritten Knoten:
systemctl start mariadbshellPrüfe auch hier den Status:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"shellNun sollten insgesamt drei Nodes im Cluster registriert sein:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 3 |
+--------------------------+------------ -+shellSchritt 6: Replikation testen
Vergewissere dich, dass du dich mit jedem Knoten verbinden kannst. Nutze den MariaDB-Client und melde dich mit entsprechenden Rechten an.
mysql -u root -pshellErstelle auf einem der Knoten eine neue Testdatenbank:
CREATE DATABASE test_db;sqlLogge dich bei den anderen Knoten ein und prüfe, ob die Datenbank dort ebenfalls vorhanden ist:
SHOW DATABASES;sqlDie Testdatenbank sollte nun in der Übersicht auftauchen:
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
| sys |
+------------------------------+sqlLege eine neue Tabelle innerhalb der Testdatenbank an:
USE test_db;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);sqlFüge Beispieldaten in die Spalte name ein:
INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');sqlÜberprüfe auf den restlichen Knoten, ob die Tabelle und die Daten korrekt synchronisiert wurden:
USE test_db;
SELECT * FROM test_table;sqlDie Ausgabe zeigt die Liste der Einträge inklusive Namen und IDs:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+----+----------+sqlSo aktualisierst du einen Eintrag in der Tabelle:
UPDATE test_table SET name = 'David' WHERE name = 'Alice';sqlUnd so löschst du einen Datensatz:
DELETE FROM test_table WHERE name = 'Bob';sqlKontrolliere abschließend auf den anderen Knoten, ob alle Änderungen und Löschvorgänge repliziert wurden:
SELECT * FROM test_table;sqlDie Aktualisierungen werden erfolgreich auf jedem Knoten angezeigt:
+----+------------+
| id | name |
+----+-----------+
| 1 | David |
| 3 | Charlie |
+----+-----------+sql