MariaDB : mise en œuvre de Galera Cluster sur Ubuntu Server LTS

En vue d’un audit sur MariaDB, j’ai monté une plate forme de test constituée de trois machines sur Ubuntu Server LTS. Du coup, j’ai créé une machine virtuelle sous VirtualBox que j’ai clonée. Un cluster Galera en mode multi-maîtres est composé de trois machines minimum pour des raisons liées à une tolérance de pannes maximale. Ce composant n’est pas prévu pour fonctionner nativement sur les plates-formes Windows.

Quelques optimisations post-installation

Comme à mon habitude, après avoir activé le compte root à l’aide des commandes sudo passwd root et su – pour me connecter en tant que root, j’ai procédé à quelques petits réglages, notamment en désactivant quelques services inutiles et en désinstallant des paquets encombrants.

apt update && apt dist-upgrade -y
systemctl disable atd ModemManager unattended-upgrades
systemctl disable iscsid.socket
#Si pas de LVM
systemctl disable lvm2-monitor.service lvm2-lvmpolld.socket
apt remove apparmor apport cloud* snapd ufw

Installation de MariaDB

Sur Linux (Fedora Server, Ubuntu Server ou AlmaLinux), j’installe toujours MariaDB à partir des dépôts de l’éditeur, qui nous fournit désormais un script :

curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | bash

En fait, le script ajoute le fichier /etc/apt/sources.list.d/mariadb.list.

Pour installer  la dernière version, à l’heure où j’écris ce billet :

apt update && apt install mariadb-server-10.7

Pour connaître la version la plus récente dans les dépôts, tapez sous Ubuntu :

apt search mariadb-server

Les fichiers de configuration de MariaDB

Il y a deux fichiers à éditer. Dans le fichier /etc/mysql/mariadb.conf.d/50-server.cnf, changez la valeur de la directive bind-address comme suit:

bind-address=0.0.0.0

Le fichier /etc/mysql/mariadb.conf.d/60-galera.cnf concerne la configuration de Galera Cluster à proprement parler.

[galera]
wsrep_on = ON
wsrep_cluster_name = "DSFC MariaDB Galera Cluster"
wsrep_cluster_address = gcomm://192.168.1.53,192.168.1.54,192.168.1.55
binlog_format = ROW
default_storage_engine = InnoDB
innodb_autoinc_lock_mode = 2
bind-address = 0.0.0.0

# Optional settings
#wsrep_slave_threads = 1
#innodb_flush_log_at_trx_commit = 0
#innodb_doublewrite=ON
#wsrep_log_conflicts=ON
query_cache_size = 0
wsrep_auto_increment_control = ON
wsrep_max_ws_rows = 1M
wsrep_max_ws_size = 2G
wsrep_provider = /usr/lib/libgalera_smm.so
wsrep_mode="REQUIRED_PRIMARY_KEY,REPLICATE_MYISAM,REPLICATE_ARIA"

Après avoir cloné la machine installée et configurée, en ayant pris soin de renommer les deux machines clonées à l’aide de la commande hostnamectl set-hostname, vous devez arrêter le service mariadb sur les trois machines :

systemctl stop mariadb

Puis, sur l’une d’entre elles, vous devez créer le cluster :

galera_new_cluster.

Redémarrez alors le service mariadb sur les deux autre machines :

systemctl start mariadb

Connexion en mode root à partir d’un des postes du réseau local

Connectez-vous en local à l’un des serveurs à l’aide l’interpréteur de mysql :

CREATE USER 'root'@'192.168.1.%' IDENTIFIED BY 'root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%';

Quand je crée une base de données sur l’une des trois machines, je peux voir qu’elle est automatiquement répliquée à l’identique sur les deux autres, comme le montre l’exemple ci-dessous.

Mise en œuvre de Galera Cluster sur Ubuntu Server

Quelques recommandations d’utilisation

Documentation

MariaDB  / Formation MariaDB