Kürzlich habe auch ich es einmal getan, vermutlich habt Ihr es auch bereits einmal getan oder Ihr wollt es tun und deshalb auf dieser Seite gelandet. Sollte letzteres der Fall sein, fühle ich mich geehrt euch hierbei die wichtigsten Schritte zu zeigen.
Einen Mariadb (galera) Cluster aufsetzen ist eigentlich ganz einfach.

Voraussetzungen

Als erstes werden wir das MariaDB Repository einbinden. Das richtige Repository für eure Distro der Wahl, könnt Ihr auf MariaDB Seite auswählen. Ich benutze mit aller Vorliebe RHEL-basierende Derivate und verwende in diesem Howto CentOS 7.6. Sobald Ihr euch durch den Assistenten gewühlt habt, wird euch der richtige Repo-Schnipsel angezeigt.

Mit "vi /etc/yum.repos.d/mariadb" erstellt Ihr ein neues Configfile. Für CentOS könnt Ihr folgenden Inhalt eintragen:

# MariaDB 10.3 CentOS repository list - created 2019-05-30 18:12 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Anschließend können alle benötigten Pakete installiert werden.

Pakete installieren

Ihr müsst folgende Pakete installieren:

yum install MariaDB-server galera MariaDB-client MariaDB-shared MariaDB-backup MariaDB-common

Konfiguration

Für den Cluster benötigt Ihr natürlich mindestens zwei Server, vermutlich sind auch beide bereits parat und mit den Paketen versorgt 😉 . Bevor wir nun beide konfigurieren, schalten wir den MariaDB Dienst auf beiden Servern mit "systemctl stop mariadb" erst einmal aus. Achja und aktivieren den Start des Dienstes bei Systemstart 🙂 mit "systemctl enable mariadb".

Wir konfigurieren die Server nun einmal mit folgender Config unterhalb "/etc/my.cnf.d/server.cnf" Folgender Inhalt muss dort aufgenommen werden.

[mysqld]
datadir=/srv/database/
#
# * Galera-related settings
#
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="db-cluster-01"
wsrep_cluster_address="gcomm://IP-NODE-01,IP-NODE-02"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
innodb_doublewrite=1
innodb_flush_log_at_trx_commit=0
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="IP-NODE-01"
wsrep_node_name="NODE-NAME"
#
# Allow server to accept connections on all interfaces.
#
bind-address=0.0.0.0
#
# Optional setting
#wsrep_slave_threads=1
#innodb_flush_log_at_trx_commit=0

Mit dieser Konfiguration ist der Grundstein für den Cluster gesetzt. Diese Konfiguration muss natürlich auf beiden Nodes hinterlegt und angepasst werden.

Cluster initialisieren

Nun muss der Cluster initialisiert werden. Dazu verwendet man den Befehl mysqld --wsrep-new-cluster bzw. galera_new_cluster. Dies sorgt dafür, das der Cluster beim Start nicht nach einem exisitieren Cluster aus der Konfiguration sucht. Dies darf zum Start des Systems verwendet werden.
Die zweite Node kann nun einfach via systemctl start mariadbgestartet werden.

Neustarten des Cluster

Müssen die Clusternodes neugestartet werden, so ist es immens wichtig, dass nur eine Node zur Zeit neugestartet wird. Denn so ist sichergestellt, dass der Datenbestand immer konsitent ist.
Sollte es dennoch mal passieren, dass beide Nodes zeitgleich ausfallen, kann der Cluster nicht mehr automatisch gestartet werden. Sollten mal beide Nodes zeitgleich "getötet" werden, muss der Cluster mit galera_recovery gestartet werden. Vorher muss analysiert werden, welche der Nodes die aktuellere ist.
Dies lässt sich über die grastate.dat im mysql-Verzeichnis herausfinden. Die mit der höheren seqno ist am ehesten zu wählen.
Sollte dort -1 stehen, muss man beide myslq-server mit der Option wsrep_recover starten. MariaDB wird dann die seqno wieder herstellen und
anschließend in die errorlog schreiben. Danach wird der Server wieder beendet und nicht gestartet.