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:
sudo apt update
shellInstallieren Sie alle verfügbaren Updates:
sudo apt upgrade -y
shellEs ist empfehlenswert, dass Sie auch veraltete oder ungenutzte Pakete entfernen, um die Server zu bereinigen:
sudo apt autoremove -y
shellSchritt 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.
sudo apt install mariadb-server
shellNach der Installation können Sie den MariaDB-Dienst starten:
sudo systemctl start mariadb
shellMit dem folgenden Kommando stellen Sie ein, dass MariaDB bei jedem Neustart des Systems automatisch aktiviert wird:
sudo systemctl enable mariadb
shellPrüfen Sie, ob MariaDB läuft:
sudo systemctl status mariadb
shellSie sollten außerdem einige grundlegende Sicherheitseinstellungen vornehmen und die Datenbank konfigurieren. Starten Sie dazu den Einrichtungsassistenten:
sudo mysql_secure_installation
shellDer Assistent führt Sie durch die Schritte, etwa das Setzen eines Root-Passworts, das Entfernen anonymer User oder das Entfernen 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] Y
shellDas Skript fragt zunächst nach dem aktuellen Root-Passwort. Wenn Sie zum ersten Mal MariaDB unter Ubuntu 20.04 installieren, 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.
nano /etc/mysql/conf.d/galera.cnf
shellDie 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:
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
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: Dazu gehören Einstellungen wie
binlog_format=ROW
für das Format der binären Protokolle unddefault-storage-engine=innodb
für die Standard-Speicher-Engine. -
Galera-Provider-Konfiguration: Einstellungen wie
wsrep_on=ON
dienen dazu, die Galera-Replikation zu aktivieren undwsrep_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:
[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"
shellFahren 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"
shellSchritt 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:
sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shellSchritt 5: Galera-Cluster MariaDB starten
Beenden Sie den MariaDB-Dienst, falls er bereits läuft:
sudo systemctl stop mariadb
shellDieser Befehl startet den MariaDB-Server und initialisiert einen neuen Galera-Cluster auf dem ersten Knoten:
sudo galera_new_cluster
shellPrüfen Sie die Anzahl der Knoten im Cluster:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellSie sollten folgende Ausgabe erhalten:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+
shellDer erste Knoten wurde erfolgreich gestartet.
Aktivieren Sie den zweiten Knoten:
systemctl start mariadb
shellKontrollieren Sie, ob sich die Anzahl der Knoten erhöht hat:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellIn der Konsole sehen wir:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+
shellNun starten wir den dritten Knoten:
systemctl start mariadb
shellSchauen Sie, ob der Knoten ordnungsgemäß läuft:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellEs sollten sich jetzt drei Nodes im Cluster befinden:
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 3 |
+--------------------------+------------ -+
shellSchritt 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.
mysql -u root -p
shellErstellen Sie eine neue Testdatenbank auf einem der Knoten im Cluster:
CREATE DATABASE test_db;
sqlMelden Sie sich bei den anderen Knoten an und überprüfen Sie, ob die Testdatenbank vorhanden ist:
SHOW DATABASES;
sqlDie Testdatenbank sollte in der Liste der Datenbanken erscheinen:
+-------------------------------+
| Database |
+-------------------------------+
| information_schema |
| mysql |
| performance_schema |
| test_db |
| sys |
+------------------------------+
sqlFügen Sie eine neue Testtabelle in der Testdatenbank hinzu:
USE test_db;
CREATE TABLE test_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50)
);
sqlGeben Sie einige Testdaten in die Spalte name
der Testtabelle ein:
INSERT INTO test_table (name) VALUES ('Alice'), ('Bob'), ('Charlie');
sqlKontrollieren Sie auf den anderen Knoten, ob die Testtabelle und die eingefügten Daten übernommen wurden:
USE test_db;
SELECT * FROM test_table;
sqlDie Ausgabe zeigt uns die Liste der Personen mit ihren Namen und der ID an:
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
+----+----------+
sqlSo aktualisieren Sie einen Datensatz in der Testtabelle:
UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sqlProbieren Sie, einen Datensatz zu löschen:
DELETE FROM test_table WHERE name = 'Bob';
sqlÜberprüfen Sie auf den anderen Knoten, ob die Aktualisierungen und Löschungen repliziert wurden:
SELECT * FROM test_table;
sqlDie Änderungen erscheinen erfolgreich auf jedem Knoten:
+----+------------+
| id | name |
+----+-----------+
| 1 | David |
| 3 | Charlie |
+----+-----------+
sql