La mise en place d’un cluster MariaDB avec Galera Cluster améliore la ré­si­lience et simplifie la mise à l’échelle de votre base de données. Dans notre tutoriel, nous vous montrons comment installer et con­fi­gu­rer un cluster Galera sur Ubuntu 20.04.

Galera Cluster MariaDB : voici les con­di­tions préa­lables requises

Pour installer un cluster MariaDB Galera sur Ubuntu 20.04, vous devez remplir les con­di­tions suivantes :

  • Plusieurs serveurs : il faut au moins trois serveurs ou machines vir­tuelles pour créer un cluster. Tous les serveurs doivent être sur le même réseau.
  • Accès root : vous devez avoir un accès root ou au moins des droits ad­mi­nis­tra­tifs sur les serveurs.

Ins­truc­tions étape par étape : Galera Cluster MariaDB sur Ubuntu 20.04

Un cluster MariaDB Galera est une solution de base de données pratique qui offre une haute dis­po­ni­bi­lité, une intégrité des données et une évo­lu­ti­vité pour les ap­pli­ca­tions exi­geantes. Dans ce guide étape par étape, nous vous guidons à travers le processus de mise en place d’un cluster MariaDB Galera sur Ubuntu 20.04. Avant de commencer, assurez-vous que vous disposez d’au moins trois serveurs ou machines vir­tuelles pour mettre en place le cluster.

Étape 1 : mettre à jour les paquets

Vous devez d’abord mettre à jour votre système Ubuntu. Cette étape est es­sen­tielle pour que vous puissiez disposer des paquets et des mises à jour de sécurité les plus récents.

Ouvrez un terminal et exécutez la commande suivante pour mettre à jour les sources de paquets :

sudo apt update
shell

Installez toutes les mises à jour dis­po­nibles :

sudo apt upgrade -y
shell

Il est re­com­mandé de supprimer également les paquets obsolètes ou inu­ti­li­sés afin de nettoyer les serveurs :

sudo apt autoremove -y
shell

Étape 2 : installer MariaDB sur les serveurs

Installez main­te­nant MariaDB sur chacun de vos serveurs. Depuis la version 10.1, les paquets Galera aussi sont inclus à côté des serveurs MariaDB.

sudo apt install mariadb-server
shell

Après l’ins­tal­la­tion, vous pouvez démarrer le service MariaDB :

sudo systemctl start mariadb
shell

Avec la commande suivante, vous réglez l’ac­ti­va­tion au­to­ma­tique de MariaDB à chaque re­dé­mar­rage du système :

sudo systemctl enable mariadb
shell

Vérifiez que MariaDB fonc­tionne :

sudo systemctl status mariadb
shell

Vous devez également effectuer quelques réglages de sécurité de base et con­fi­gu­rer la base de données. Pour ce faire, lancez l’assistant d’ins­tal­la­tion :

sudo mysql_secure_installation
shell

L’assistant vous guide à travers les étapes, comme la dé­fi­ni­tion d’un mot de passe root, la sup­pres­sion des uti­li­sa­teurs anonymes ou la sup­pres­sion de la base de données de test.

Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
shell

Le script demande d’abord le mot de passe root actuel. Si c’est la première fois que vous installez MariaDB sous Ubuntu 20.04, appuyez sim­ple­ment sur la touche [Entrée], puis saisissez un nouveau mot de passe.

Étape 3 : con­fi­gu­rer les nœuds MariaDB du cluster Galera

Créez un fichier cnf dans le ré­per­toire /etc/mysql/conf.d sur chaque nœud pour définir les pa­ra­mètres spé­ci­fiques à Galera.

nano /etc/mysql/conf.d/galera.cnf
shell

Ce fichier doit contenir les pa­ra­mètres généraux de la base de données, tels que le format du protocole binaire et le moteur de stockage par défaut. De plus, il inclut les con­fi­gu­ra­tions spé­ci­fiques au cluster Galera, comme le nom et l’adresse du cluster.

Ajoutez les lignes suivantes pour le premier nœud :

[mysqld]
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="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_1-ip-address"
wsrep_node_name="node_1"
shell
  • Pa­ra­mètres généraux de la base de données : incluent des pa­ra­mètres tels que binlog_format=ROW pour le format des journaux binaires et default-storage-engine=innodb pour le moteur de stockage par défaut.
  • Con­fi­gu­ra­tion du four­nis­seur Galera : pa­ra­mètres comme wsrep_on=ON pour activer la ré­pli­ca­tion Galera et wsrep_provider=/usr/lib/galera/libgalera_smm.so pour indiquer le chemin vers la bi­blio­thèque Galera.
  • Con­fi­gu­ra­tion du cluster Galera : comprend le nom du cluster (wsrep_cluster_name) et l’adresse du cluster (wsrep_cluster_address), qui contient les adresses IP ou les noms d’hôtes des nœuds du cluster.
  • Syn­chro­ni­sa­tion Galera : configure la méthode pour le transfert d’ins­tan­tané d’état (SST), par exemple wsrep_sst_method=rsync.
  • Con­fi­gu­ra­tion du nœud Galera : définit l’adresse IP ou le nom d’hôte du nœud actuel (wsrep_node_address) ainsi que le nom du nœud (wsrep_node_name).

Après avoir en­re­gis­tré le fichier, créez-en un pour le deuxième nœud :

[mysqld]
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="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_2-ip-address"
wsrep_node_name="node_2"
shell

Continuez main­te­nant avec le dernier nœud :

[mysqld]
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="galera_cluster"
wsrep_cluster_address="gcomm://node_1-ip-address,node_2-ip-address,node_3-ip-address"
# Galera Synchronization Configuration
wsrep_sst_method=rsync
# Galera Node Configuration
wsrep_node_address="node_3-ip-address"
wsrep_node_name="node_3"
shell

Étape 4 : modifier le pare-feu sur les serveurs

Comme les nœuds com­mu­ni­quent entre eux via des ports spé­ci­fiques, vous devez ajuster les pa­ra­mètres du pare-feu.

Ouvrez les ports suivants dans votre pare-feu :

  • Port 3306 : il s’agit du port par défaut pour MariaDB. Il est utilisé pour la com­mu­ni­ca­tion et les requêtes de la base de données.
  • Ports Galera : en plus du port standard 3306, Galera utilise également d’autres ports pour la com­mu­ni­ca­tion interne entre les nœuds. Les ports standard pour Galera sont gé­né­ra­le­ment 4567 pour la ré­pli­ca­tion, 4568 pour la com­mu­ni­ca­tion de secours, et 4444 pour le transfert d’ins­tan­ta­nés d’état (SST).

Vous pouvez définir les pa­ra­mètres du pare-feu sur votre serveur Ubuntu en utilisant la commande suivante :

sudo ufw allow 3306,4567,4568,4444/tcp
sudo ufw allow 4567/udp
shell

Étape 5 : démarrer le cluster Galera MariaDB

Arrêtez le service MariaDB s’il est déjà en cours d’exécution :

sudo systemctl stop mariadb
shell

Cette commande démarre le serveur MariaDB et ini­tia­lise un nouveau cluster Galera sur le premier nœud :

sudo galera_new_cluster
shell

Vérifier le nombre de nœuds dans le cluster :

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Vous devriez obtenir la sortie suivante après l’exécution de la commande :

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 1              |
+--------------------------+------------ -+
shell

Le premier nœud a été lancé avec succès. Activez main­te­nant le deuxième nœud :

systemctl start mariadb
shell

Vérifiez si le nombre de nœuds a augmenté :

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Dans la console, on peut alors voir :

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 2               |
+--------------------------+--------------+
shell

Nous démarrons main­te­nant le troisième nœud :

systemctl start mariadb
shell

Vérifiez à nouveau si le nœud fonc­tionne cor­rec­te­ment :

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shell

Il devrait main­te­nant y avoir trois nœuds dans le cluster :

+---------------------------+-------------+
| Variable_name        | Value       |
+--------------------------+--------------+
| wsrep_cluster_size | 3              |
+--------------------------+------------ -+
shell

Étape 6 : tester la ré­pli­ca­tion

Assurez-vous que vous pouvez vous connecter à chaque nœud du cluster. Utilisez MariaDB-Client pour vous connecter en tant qu’uti­li­sa­teur root ou en tant qu’autre uti­li­sa­teur disposant de suf­fi­sam­ment de droits.

mysql -u root -p
shell

Créez une nouvelle base de données de test sur l’un des nœuds du cluster :

CREATE DATABASE test_db;
sql

Connectez-vous aux autres nœuds et vérifiez la présence de la base de données de test :

SHOW DATABASES;
sql

La base de données de test devrait ap­pa­raître dans la liste des bases de données :

+-------------------------------+
| Database                        |
+-------------------------------+
| information_schema   |
| mysql                              |
| performance_schema |
| test_db                          | 
| sys                                  |
+------------------------------+
sql

Ajoutez une nouvelle table de test dans la base de données de test :

USE test_db;
CREATE TABLE test_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50)
);
sql

Saisissez quelques données de test dans la colonne name de la table de test :

INSERT INTO test_table (name) VALUES ('Alice'), ('Jacques'), ('Charles');
sql

Vérifiez sur les autres nœuds que la table de test et les données insérées ont bien été reprises :

USE test_db;
SELECT * FROM test_table;
sql

La sortie nous montre la liste des personnes avec leur nom et leur ID :

+----+-----------+
| id | name    |
+----+-----------+
| 1  | Alice     |
| 2  | Jacques       |
| 3  | Charles |
+----+----------+
sql

Voici comment mettre à jour un en­re­gis­tre­ment dans la table de test :

UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sql

Essayez de supprimer un en­re­gis­tre­ment :

DELETE FROM test_table WHERE name = 'Jacques';
sql

Vérifiez sur les autres nœuds que les mises à jour et les sup­pres­sions ont été ré­pli­quées :

SELECT * FROM test_table;
sql

Les mo­di­fi­ca­tions ap­pa­rais­sent avec succès sur chaque nœud :

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charles  |
+----+-----------+
sql
Aller au menu principal