Hallo Freunde der Sonne,
in diesem Beitrag, geht es darum, einen MariaDB-Cluster mit Galera-Unterstützung und Pacemaker aufzubauen.
Im Beispiel findet die Installation in LXC/LXD-Containern statt.
MariaDB – GaleraCluster & Pacemaker (Ubuntu 22.04)
Quellen
- How to Setup MariaDB Galera Cluster on Ubuntu 20.04 (howtoforge.com)
- MariaDB Galera Cluster with Corosync/Pacemaker VIP | FromDual
Grundaufbau
Erstellt werden soll ein Aktiv-Aktiv-Cluster aus zwei MariaDB-Server mit Ubuntu 22.04 LTS Linux als Unterbau.
Zur Synchronisation wird die Galera-Erweiterung verwendet, für die Cluster-IP wird Pacemaker eingesetzt.
Die Überwachung des Clusters basiert auf der Erreichbarkeit der IP des jeweiligen Gegenübers (ja ist verbesserungswürdig).
Installation MariaDB & Galera
Die nun geschilderten Arbeiten müssen auf beiden Servern ausgeführt werden,
selbstverständlich mit wechselndem Servernamen und IP.
Zuerst wird das Galera-Repo von MariaDB eingebunden, ich habe die Version 10.9 verwendet.
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup chmod ugo+x mariadb_repo_setup ./mariadb_repo_setup
Danach wird die Installation des eigentlichen Datenbankservers initialisiert.
apt install mariadb-server mariadb-backup systemctl enable mariadb systemctl start mariadb
Danach sollte die Standardkonfiguration des Datenbankservers vorgenommen werden.
mysql_secure_installation
Nun passen wir die Konfigurationsdateien an.
Für den Server nano /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] ... bind-address = 0.0.0.0 character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
Danach konfigurieren wir den Cluster mittels nano /etc/mysql/mariadb.conf.d/60-galera.cnf
[galera] # Mandatory settings wsrep_on = ON wsrep_cluster_name = "clustername" wsrep_cluster_address = gcomm://10.1.128.67,10.1.128.158 binlog_format = row default_storage_engine = InnoDB innodb_autoinc_lock_mode = 2 wsrep_provider = /usr/lib/galera/libgalera_smm.so # Allow server to accept connections on all interfaces. bind-address = 0.0.0.0 # Optional settings #wsrep_slave_threads = 1 #innodb_flush_log_at_trx_commit = 0 wsrep_node_address="10.1.128.67" wsrep_node_name="server1"
Nachdem beide Server vorkonfiguriert wurden und der Datenbankdienst neugestartet wurde, kann der Galera-Cluster gebaut werden.
systemctl restart mariadb
Cluster-Initialisierung:
galera_new_cluster
Über folgende Abfragen kann die Node-Anzahl im Cluster festgestellt werden:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Danach kann durch das verteilte Anlegen und Löschen die korrekte Cluster-Funktion überprüft werden.
Installation Pacemaker-Cluster
Auch hier müssen die Arbeiten wieder auf beiden Servern durchgeführt werden.
Da sich die Beispielumgebung in einem Container befindet, der nach jedem Neustart die Netzwerkkonfiguration neu erstellt bekommt,
sollte die Cluster-Reaktivierung unter /etc/crontab verzögert bereitgestellt werden:
@reboot root sleep 10 && pcs node unstandby 10.1.128.67
Vorher könnte man den Cluster aber erst einmal einrichten, hierzu installieren wir die nötigen Komponenten:
apt-get install pacemaker pcs systemctl enable pcsd systemctl enable corosync
Finden & Setzen des Cluster-Sync-Users:
grep hacluster /etc/passwd passwd hacluster
Starten und konfigurieren des Clusters mit der IP: 10.1.128.10
systemctl start pcsd pcs host auth mariadb1 mariadb2 pcs cluster setup galera-cluster --start mariadb1 mariadb2 --force pcs status pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=10.1.128.10 cidr_netmask=32 op monitor interval=5s crm_verify -L -V pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore systemctl start pcsd systemctl start corosync pcs status pcs status resources
Zur Kontrolle kann man die Logs abfragen:
pcs status # Status des Pacemaker systemctl status pcsd --no-pager # Dienststatus journalctl -xe -u pcsd --no-pager # Pacemaker-Logs journalctl -xeu corosync.service # Corosync-Logs crm_verify -L -V # Status der virtuellen IP pcs status resources # Status der virtuellen IP in Pacemaker
Im Idealfalle testet man durch Neustarts und Reaktivierung der Nodes die korrekte Funktion,
in den Containern die ich installiert hatte – lief es erst Rund, nachdem jedes Node einmal den Gegenüber entfernt und hinzugefügt hatte.
pcs cluster destroy node 10.1.128.67 pcs cluster destroy pcs cluster node add 10.1.128.67 --start --enable crm_node -R pcmk-1 reboot pcs cluster node remove 10.1.128.67 pcs cluster node add 10.1.128.67 --start --enable reboot pcs cluster node add 10.1.128.67 --start --enable pcs cluster recover pcs cluster unstandby 10.1.128.67 reboot pcs cluster unstandby 10.1.128.67 # --> /etc/crontab
Über den StandBy-Befehl, kann ein Cluster auch einfach zwischen seinen Nodes umschalten (geht natürlich auch über Stop, ist aber freundlicher).
pcs cluster standby 10.1.128.67 pcs cluster unstandby 10.1.128.67