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.
Quelques recommandations d’utilisation
- Les commandes CREATE USER / ALTER USER / DROP USER et GRANT / REVOKE fonctionnement en mode Galera Cluster.
- Les logs ne fonctionnent qu’en mode fichier (log_output=FILE).
- Toutes les tables doivent posséder des clés. Pas de DELETE sans clé !
- La commande FLUSH_PRIVILEGES ne fonctionne pas en mode Galera Cluster.
- Éviter les trop grosses transactions.
- Ne pas utiliser mysql_dump pour les sauvegardes / restaurations et privilégier la commande mariadb-backup.