Ready, Steady, Cluster! Wir setzen einen MySQL Galera Cluster auf.
Die Welt der Cluster-Lösungen im MySQL-Universum ist unübersichtlich und manchmal ein wenig (zu?) komplex. Neben dem Oracle MySQL InnoDB Cluster (über den wir schon häufiger an dieser Stelle gesprochen haben), gibt den Galera Cluster der Firma Codership, den MariaDB Galera Cluster und z. B. den Percona XtraDB Cluster. Gerade die zuletzt genannten Produkte von MariaDB und Percona) basieren letztendlich auf der Replikationsbibliothek unseres Partners Codership [1,2]. Wir zeigen Ihnen heute, wie schnell und einfach sich ein Cluster aufsetzen lässt.
Ready?
Wir nutzen für unsere Laborumgebung einfach drei Ubtunu-Linux-Server.
Hintergrundinformation: Wir nutzen hier eine Docker-Desktop-Umgebung und nutzen das Image „ubuntu:latest“ für unsere Systeme. Für den restlichen Verlauf unseres Testszenarios dürfen Sie aber annehmen, dass es sich einfach um „normale“ physikalische Linux-Server handelt.
Für die spätere Transparenz in unserem „Setup“, die Namen und IPs unserer Server (Container)
- galera1: 172.19.0.2
- galera2: 172.19.0.3
- galera3: 172.19.0.4
Im ersten Schritt kümmern wir uns darum, dass wir die entsprechenden Software-Pakete von Codership auf unseren Server nutzen, bzw. installieren können. Dazu binden wir deren Repository ein:
apt-key adv --keyserver keyserver.ubuntu.com --recv 8DA84635 echo "deb https://releases.galeracluster.com/galera-4.17/ubuntu jammy main" > /etc/apt/sources.list.d/galera.list echo "deb https://releases.galeracluster.com/mysql-wsrep-8.0.35-26.16/ubuntu jammy main" >> /etc/apt/sources.list.d/galera.list echo "# Prefer the Codership repository" > /etc/apt/preferences.d/galera.pref echo "Package: *" >> /etc/apt/preferences.d/galera.pref echo "Pin: origin releases.galeracluster.com " >> /etc/apt/preferences.d/galera.pref echo "Pin-Priority: 1001" >> /etc/apt/preferences.d/galera.pref apt-get update
Im Anschluss daran installieren wir die benötigten Komponenten:
apt install galera-4 mysql-wsrep-8.0
Steady?
Nachdem die Software nun sauber installiert wurde, müssen wir einige wenige zusätzliche Einträge an der MySQL-Konfiguration vornehmen. Im Wesentlichen kümmern wir uns um die folgenden Dinge:
- Verwendung der Storage-Engine „InnoDB“ und korrekte Nutzung des Binary-Logs
- Einbinden der Replikations-Plugins
- Beschreibung des Cluster-Setups; welche Knoten sind beteiligt
Die in unserem Fall von der Installation bereitgestellte Konfigurationsdatei, ist um alle Kommentarzeilen erleichtert, sehr übersichtlich und sieht auf allen Systemen vor dem Eingriff wie folgt aus:
bash> cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v '^#' [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log
Wir nehmen nun die folgenden Einträge zusätzlich auf. Bestimmte Teile (wie z. B. die IPs und/oder Hostnamen) müssen dabei systemspezifisch angepasst werden:
# add my.cnf 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="test_cluster" wsrep_cluster_address="gcomm://172.19.0.2,172.19.0.3,172.19.0.4" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="172.19.0.2" wsrep_node_name="galera1"
Cluster?
Nun ist es an der Zeit, den Cluster in Betrieb zu bringen. Der erste Knoten in einem Cluster muss stets speziell gestartet werden. Schließlich möchte sich jeder Knoten, der in einem Cluster gestartet wird, mit dem Cluster verbinden. Der erste Knoten kann dies naturgemäß nicht. Von daher muss er sich seiner speziellen Rolle bewusst sein. Dafür liefern die verschiedenen Distributionen eine spezielle Variante für das Binary des MySQL Servers. In unserem Fall ist dies:
/usr/bin/mysqld_bootstrap
Letztendlich sorgt dieses Binary (eigentlich ein Shell-Skript) nur dafür, dass dem MySQL-Dienst beim Start ein weiteres Argument übergeben wird (unten fett dargestellt).
root@galera1> mysqld --wsrep-new-cluster –-user=mysql –-datadir=…
Wir starten den ersten Cluster-Knoten und überprüfen die „Größe“ unseres „test_clusters“ über die entsprechend bereitgestellten Umgebungsvariablen des Servers:
root@galera1:/# mysqld --user=mysql --wsrep-new-cluster & root@galera1:/# mysql -uroot -proot --execute="show global status like '%wsrep%clus%size%'" +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Nun starten wir, ohne weitere spezielle Argumente (--wsrep-new-cluster), die anderen Knoten wie üblich und prüfen erneut die „Größe“ des Clusters.
root@galera2:/# mysqld --user=mysql & root@galera3:/# mysqld --user=mysql & root@galera3:/# mysql -uroot -proot --execute="show global status like '%wsrep%clus%size%'" +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Cluster!
Der Aufbau des Clusters war erfolgreich. In Summe hat die Installation und Konfiguration (unter unseren Laborbedingungen) keine zehn Minuten gedauert. Dies sind auch Erfahrungen, die in der Praxis durchaus realistisch seien können. Aber natürlich kann auch hier der Teufel im Detail stecken. In produktiven Umgebungen stellen sich oft Fragen, die im Labor erst einmal keine Rolle spielen. So hat unser Cluster beispielsweise den zweiten und dritten Knoten über die „rsync“-Methode (sst_method; SST = State Snapshot Transfer) mit Daten versorgt. Bei Datenbanken, die bereits längere Zeit aktiv waren und die erst später „geclustert“ werden sollen, sind andere Methoden ggf. effizienter (mysqldump, clone, …). Um hier die „richtigen“ Entscheidungen zu treffen, ist immer eine Analyse der Ausgangslage notwendig.
An dieser Stelle wollten wir lediglich aufzeigen, welche Schritte im besten Fall notwendig sind, um ein Cluster bereitzustellen.
Weitere Informationen finden Sie auf der Webseite unseres Partners Codership [3]
Sie haben Fragen, ob der Einsatz eines Galera Clusters für ihren Einsatzzweck sinnvoll ist? Sprechen Sie mit uns über Ihr Anliegen. Wir beleuchten gerne mit Ihnen die unterschiedlichen Aspekte von Architektur, Performance, Lizenzierung, Betriebskonzept usw. mit Ihnen im Detail auf Basis Ihrer Anforderungen.
Principal Consultant bei ORDIX
Bei Updates im Blog, informieren wir per E-Mail.
Kommentare