Créer son cluster Galera
Réseau high speed (Gbps minimum) non routé, latence minimale, disques SSD — c'est la base. Chaque nœud est master : réplication multi-master synchrone. On ne load-balance pas les écritures, uniquement les lectures.
Résolution de noms
2 solutions : DNS ou /etc/hosts. Même fichier sur tous les nœuds.
Ports firewall
Ouvrir entre tous les nœuds :
| Port | Proto | Usage |
|---|---|---|
| 3306 | TCP | MySQL client |
| 4444 | TCP | SST (State Snapshot Transfer) |
| 4567 | TCP+UDP | Galera replication |
| 4568 | TCP | IST (Incremental State Transfer) |
Configuration MariaDB
Installer le package galera, puis créer /etc/mysql/mariadb.conf.d/60-galera.cnf sur chaque nœud :
[mysqld]
binlog_format=ROW
bind-address=10.0.0.1
default_storage_engine=innodb
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
wsrep_on=ON
wsrep_provider=/usr/lib/libgalera_smm.so
wsrep_cluster_name="MyCluster"
wsrep_cluster_address="gcomm://node1,node2,node3"
wsrep_node_address="10.0.0.1"
wsrep_sst_method=rsync
wsrep_node_address n'est pas obligatoire mais évite que Galera devine la mauvaise IP. Adapter bind-address et wsrep_node_address sur chaque nœud.
Bootstrap
On initialise le cluster depuis node1 :
On vérifie que le cluster est bien démarré :
SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 1 |
+--------------------+-------+
Puis on démarre les autres nœuds :
wsrep_cluster_size doit passer à 3.
InnoDB uniquement
Galera fonctionne uniquement en InnoDB. MyISAM est encore expérimental — à éviter en production.
Troubleshooting
Reset d'un nœud
Si un nœud est trop désynchronisé, on le recrée de 0 :
Tout est re-importé depuis le nœud primary actuel via SST.
Cluster arrêté proprement — safe_to_bootstrap
Si tous les nœuds sont arrêtés proprement (ex: maintenance), Galera refuse de redémarrer sans savoir quel nœud a les données les plus récentes.
# Identifier le dernier nœud arrêté (seqno le plus élevé)
node1$ cat /var/lib/mysql/grastate.dat
# safe_to_bootstrap: 0 ← si tous les nœuds ont 0, en forcer un
node1$ sed -i 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/' /var/lib/mysql/grastate.dat
node1$ galera_new_cluster
Puis redémarrer les autres nœuds normalement.
Toutes les infos sur le site Galera.