MariaDB Galera Cluster

Mit der Galera Erweiterung auf der MariaDB Datenbank lässt sich ganz einfach ein active/active Cluster aufbauen wo man auf alle Server schreiben und lesen kann.

Das einzige was man dazu beachten sollten ist, dass es mindestens drei Datenbank Server für ein stabiles Setup braucht.

Die Installation auf CentOS/RedHat 8 ist einfach und lässt sich im Grundsatz auch auf andere Distributionen wie Ubuntu abbilden.

Installation

Zuerst werden auf allen Servern die entsprechenden Pakete installiert, jedoch noch nicht gestartet!

dnf install mariadb-server-galera mariadb

Konfiguration auf dem ersten Node

Die Konfiguration auf dem ersten node unterscheidet sich darin, dass man den Cluster zuerst initialisieren („bootstrappen“) muss.

Zuerst wird die Konfiguration in der Datei /etc/my.cnf.d/galera.cnf angepasst:

wsrep_cluster_address="gcomm://"

Beim ersten Node kann die Liste nach "gcomm://" leer sein. Bei allen weiteren Nodes müssen da alle IP Adressen der Cluster Server eingetragen werden.

Nun wird der Cluster zum ersten Mal initialisiert und gestartet:

galera_new_cluster
systemctl --now enable mariadb

Konfiguration auf allen anderen Nodes

Nun werden die anderen Nodes konfiguriert.

In der Datei /etc/my.cnf.d/galera.cnf wird wirderum die Variable wsrep_cluster_address angepasst, dieses Mal werden da jedoch die IP Adressen der Cluster Server eingetragen:

wsrep_cluster_address="gcomm://192.168.1.10,192.168.1.20,192.168.1.30"

Das wars schon. Jetzt kann auch hier mariadb gestartet werden:

systemctl --now enable mariadb

Test des Clusters

Als erstes kann nun der Status des Clusters überprüft werden:

mysql -u root -e "SHOW STATUS LIKE 'wsrep_%'"
mysql -u root -e "SHOW STATUS LIKE 'wsrep_cluster_size'"

Dies zeigt die vitalen Werte des Clusters an.

Als nächstes kommt ein simpler Schriebtest, indem eine Datenbank- und Tabelle erzeugt und mit Werten gefüllt wird.

Auf einem beliebigen Server im Cluster:

mysql -u root -e 'CREATE DATABASE galeratest;'
mysql -u root -e 'CREATE TABLE galeratest.zeugs ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), anzahl INT, farbe VARCHAR(25), PRIMARY KEY(id));'
mysql -u root -e 'INSERT INTO galeratest.zeugs (name, anzahl, farbe) VALUES ("papier", 2, "blau");'

Auf eine, anderen Server wird nun ein zweiter Eintrag angelegt:

mysql -u root -e 'INSERT INTO galeratest.zeugs (name, anzahl, farbe) VALUES ("papier", 5, "weiss");'

Nun kann man mit einer SELECT Query auf allen Servern die Änderung sehen:

# mysql -u root -e 'SELECT * FROM galeratest.zeugs;'
+----+--------+--------+-------+
| id | name   | anzahl | farbe |
+----+--------+--------+-------+
|  2 | papier |      2 | blau  |
|  4 | papier |      5 | weiss |
+----+--------+--------+-------+

Troubleshooting

Alle Server gestoppt

Wenn alle Server gestoppt sind, muss man beim ersten den Cluster mit galera_new_cluster den Cluster neu initialisieren, bevor man mariadb wieder startet (was ansonsten fehlschlägt).

Referenzen

Published by

Steven Varco

Steven ist ein Redhat RHCE-Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.