# 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 :

```shell
sudo apt update
```

Installez toutes les mises à jour disponibles :

```shell
sudo apt upgrade -y
```

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

```shell
sudo apt autoremove -y
```

### É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.

```shell
sudo apt install mariadb-server
```

Après l’installation, vous pouvez démarrer le service MariaDB :

```shell
sudo systemctl start mariadb
```

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

```shell
sudo systemctl enable mariadb
```

Vérifiez que MariaDB fonctionne :

```shell
sudo systemctl status mariadb
```

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** :

```shell
sudo mysql_secure_installation
```

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.

```shell
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
```

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](https://www.ionos.com/fr-be/digitalguide/hebergement/aspects-techniques/installer-mariadb-sous-ubuntu-2004/), 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.

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

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 :

```shell
[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"
```

- **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 :

```shell
[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"
```

Continuez maintenant avec le dernier nœud :

```shell
[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"
```

### É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 :

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

### Étape 5 : démarrer le cluster Galera MariaDB

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

```shell
sudo systemctl stop mariadb
```

Cette commande démarre le serveur **MariaDB** et initialise un nouveau cluster Galera sur le premier nœud :

```shell
sudo galera_new_cluster
```

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

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

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

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

Le premier nœud a été lancé avec succès. Activez maintenant le deuxième nœud :

```shell
systemctl start mariadb
```

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

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

Dans la console, on peut alors voir :

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

Nous démarrons maintenant le troisième nœud :

```shell
systemctl start mariadb
```

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

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

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

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

### É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.

```shell
mysql -u root -p
```

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

```sql
CREATE DATABASE test_db;
```

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

```sql
SHOW DATABASES;
```

La base de données de test devrait apparaître dans la liste des bases de données :

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

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

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

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

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

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

```sql
USE test_db;
SELECT * FROM test_table;
```

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

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

Voici comment mettre à jour un enregistrement dans la table de test :

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

Essayez de supprimer un enregistrement :

```sql
DELETE FROM test_table WHERE name = 'Jacques';
```

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

```sql
SELECT * FROM test_table;
```

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

```sql
+----+------------+
| id | name     |
+----+-----------+
| 1  | David    |
| 3  | Charles  |
+----+-----------+
```


This is a markdown version of: [https://www.ionos.com/fr-be/digitalguide/hebergement/aspects-techniques/cluster-galera-mariadb-sur-ubuntu-2004/](https://www.ionos.com/fr-be/digitalguide/hebergement/aspects-techniques/cluster-galera-mariadb-sur-ubuntu-2004/) for AI/LLM consumption.