Galera Cluster : comment configurer un cluster Galera MariaDB sur Ubuntu 20.04 ?

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

Galera Cluster MariaDB : voici les conditions préalables requises

Pour installer un cluster MariaDB Galera sur Ubuntu 20.04, vous devez remplir les conditions suivantes :

  • Plusieurs serveurs : il faut au moins trois serveurs ou machines virtuelles 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 administratifs sur les serveurs.

Instructions é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 disponibilité, une intégrité des données et une évolutivité pour les applications exigeantes. 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 virtuelles 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 essentielle 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 disponibles :

sudo apt upgrade -y
shell

Il est recommandé de supprimer également les paquets obsolètes ou inutilisés afin de nettoyer les serveurs :

sudo apt autoremove -y
shell

Étape 2 : installer MariaDB sur les serveurs

Installez maintenant 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’installation, vous pouvez démarrer le service MariaDB :

sudo systemctl start mariadb
shell

Avec la commande suivante, vous réglez l’activation automatique de MariaDB à chaque redémarrage du système :

sudo systemctl enable mariadb
shell

Vérifiez que MariaDB fonctionne :

sudo systemctl status mariadb
shell

Vous devez également effectuer quelques réglages de sécurité de base et configurer la base de données. Pour ce faire, lancez l’assistant d’installation :

sudo mysql_secure_installation
shell

L’assistant vous guide à travers les étapes, comme la définition d’un mot de passe root, la suppression des utilisateurs anonymes ou la suppression 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 simplement sur la touche [Entrée], puis saisissez un nouveau mot de passe.

Étape 3 : configurer les nœuds MariaDB du cluster Galera

Créez un fichier cnf dans le répertoire /etc/mysql/conf.d sur chaque nœud pour définir les paramètres spécifiques à Galera.

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

Ce fichier doit contenir les paramè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 configurations spécifiques 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
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
  • Paramètres généraux de la base de données : incluent des paramè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.
  • Configuration du fournisseur Galera : paramètres comme wsrep_on=ON pour activer la réplication Galera et wsrep_provider=/usr/lib/galera/libgalera_smm.so pour indiquer le chemin vers la bibliothèque Galera.
  • Configuration 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.
  • Synchronisation Galera : configure la méthode pour le transfert d’instantané d’état (SST), par exemple wsrep_sst_method=rsync.
  • Configuration 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 enregistré 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 maintenant 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 communiquent entre eux via des ports spécifiques, vous devez ajuster les paramè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 communication 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 communication interne entre les nœuds. Les ports standard pour Galera sont généralement 4567 pour la réplication, 4568 pour la communication de secours, et 4444 pour le transfert d’instantanés d’état (SST).

Vous pouvez définir les paramè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 initialise 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 maintenant 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 maintenant le troisième nœud :

systemctl start mariadb
shell

Vérifiez à nouveau si le nœud fonctionne correctement :

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

Il devrait maintenant y avoir trois nœuds dans le cluster :

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

Étape 6 : tester la réplication

Assurez-vous que vous pouvez vous connecter à chaque nœud du cluster. Utilisez MariaDB-Client pour vous connecter en tant qu’utilisateur root ou en tant qu’autre utilisateur disposant de suffisamment 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 apparaî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 enregistrement dans la table de test :

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

Essayez de supprimer un enregistrement :

DELETE FROM test_table WHERE name = 'Jacques';
sql

Vérifiez sur les autres nœuds que les mises à jour et les suppressions ont été répliquées :

SELECT * FROM test_table;
sql

Les modifications apparaissent avec succès sur chaque nœud :

+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charles  |
+----+-----------+
sql
Cet article vous a-t-il été utile ?
Page top