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
shellInstallez toutes les mises à jour disponibles :
sudo apt upgrade -y
shellIl 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
shellAprès l’installation, vous pouvez démarrer le service MariaDB :
sudo systemctl start mariadb
shellAvec la commande suivante, vous réglez l’activation automatique de MariaDB à chaque redémarrage du système :
sudo systemctl enable mariadb
shellVérifiez que MariaDB fonctionne :
sudo systemctl status mariadb
shellVous 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
shellL’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
shellLe 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
shellCe 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 etdefault-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 etwsrep_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"
shellContinuez 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
shellCette commande démarre le serveur MariaDB et initialise un nouveau cluster Galera sur le premier nœud :
sudo galera_new_cluster
shellVérifier le nombre de nœuds dans le cluster :
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellVous devriez obtenir la sortie suivante après l’exécution de la commande :
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 1 |
+--------------------------+------------ -+
shellLe premier nœud a été lancé avec succès. Activez maintenant le deuxième nœud :
systemctl start mariadb
shellVérifiez si le nombre de nœuds a augmenté :
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellDans la console, on peut alors voir :
+---------------------------+-------------+
| Variable_name | Value |
+--------------------------+--------------+
| wsrep_cluster_size | 2 |
+--------------------------+--------------+
shellNous démarrons maintenant le troisième nœud :
systemctl start mariadb
shellVérifiez à nouveau si le nœud fonctionne correctement :
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
shellIl 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
shellCréez une nouvelle base de données de test sur l’un des nœuds du cluster :
CREATE DATABASE test_db;
sqlConnectez-vous aux autres nœuds et vérifiez la présence de la base de données de test :
SHOW DATABASES;
sqlLa 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 |
+------------------------------+
sqlAjoutez 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)
);
sqlSaisissez quelques données de test dans la colonne name
de la table de test :
INSERT INTO test_table (name) VALUES ('Alice'), ('Jacques'), ('Charles');
sqlVé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;
sqlLa sortie nous montre la liste des personnes avec leur nom et leur ID :
+----+-----------+
| id | name |
+----+-----------+
| 1 | Alice |
| 2 | Jacques |
| 3 | Charles |
+----+----------+
sqlVoici comment mettre à jour un enregistrement dans la table de test :
UPDATE test_table SET name = 'David' WHERE name = 'Alice';
sqlEssayez de supprimer un enregistrement :
DELETE FROM test_table WHERE name = 'Jacques';
sqlVérifiez sur les autres nœuds que les mises à jour et les suppressions ont été répliquées :
SELECT * FROM test_table;
sqlLes modifications apparaissent avec succès sur chaque nœud :
+----+------------+
| id | name |
+----+-----------+
| 1 | David |
| 3 | Charles |
+----+-----------+
sql