Comment configurer un cluster Galera avec MariaDB sur des serveurs Debian 10

L’auteur a sélectionné le Free and Open Source pour recevoir un don dans le cadre du Write for DOnations programme.

introduction

Le clustering ajoute une haute disponibilité à votre base de données en distribuant les modifications à différents serveurs. En cas de défaillance d’une des instances, d’autres sont rapidement disponibles pour continuer à servir.

Les clusters ont deux configurations générales: active-passive et active-active. Dans les clusters actifs-passifs, toutes les écritures sont effectuées sur un seul serveur actif, puis copiées sur un ou plusieurs serveurs passifs qui ne prendront le relais que dans le cas d’une défaillance du serveur actif. Certains clusters actifs-passifs autorisent également les opérations + SELECT + sur les nœuds passifs. Dans un cluster actif-actif, chaque nœud est en lecture-écriture et une modification apportée à l’un d’entre eux est répliquée pour tous.

MariaDB est un système de base de données relationnelle open source entièrement compatible avec le système de SGBDR MySQL très répandu. Vous pouvez lire la documentation officielle de MariaDB à l’adresse page. Galera est une solution de mise en cluster de bases de données qui vous permet de configurer des clusters multi-maîtres à l’aide de la réplication synchrone. Galera gère automatiquement la synchronisation des données de différents nœuds tout en vous permettant d’envoyer des requêtes de lecture et d’écriture à l’un des nœuds du cluster. Pour en savoir plus sur Galera, consultez la page officielle documentation.

Dans ce guide, vous allez configurer un cluster MariaDB Galera actif-actif. À des fins de démonstration, vous allez configurer et tester trois serveurs Debian 10 qui joueront le rôle de nœuds dans le cluster. C’est le plus petit cluster configurable.

Conditions préalables

Pour suivre, vous aurez besoin d’un compte DigitalOcean, en plus des éléments suivants:

  • Trois serveurs Debian 10 avec la mise en réseau privée activée, chacun avec un utilisateur non root avec les privilèges + sudo +.

  • Pour configurer la mise en réseau privée sur les trois gouttelettes, suivez notre guide Private Networking.

  • Pour obtenir de l’aide pour configurer un utilisateur non root avec les privilèges + sudo +, suivez notre Initial Initial Server avec Debian 10 Didacticiel.

Bien que les étapes de ce didacticiel aient été écrites et testées contre les gouttelettes DigitalOcean, la plupart d’entre elles devraient également s’appliquer aux serveurs non-DigitalOcean avec la mise en réseau privée activée.

Étape 1 - Ajout des référentiels MariaDB à tous les serveurs

Au cours de cette étape, vous allez ajouter les référentiels de packages MariaDB appropriés à chacun de vos trois serveurs afin de pouvoir installer la bonne version de MariaDB utilisée dans ce didacticiel. Une fois les référentiels mis à jour sur les trois serveurs, vous serez prêt à installer MariaDB.

Une chose à noter à propos de MariaDB est qu’elle a été créée en remplacement de MySQL. Par conséquent, dans de nombreux fichiers de configuration et scripts de démarrage, vous verrez «+ mysql » plutôt que « mariadb ». Par souci de cohérence, nous allons utiliser ` mysql` dans ce guide où l’un ou l’autre pourrait fonctionner.

Dans ce didacticiel, vous utiliserez MariaDB version 10.4. Comme cette version n’est pas incluse dans les référentiels Debian par défaut, vous commencerez par ajouter le référentiel Debian externe géré par le projet MariaDB à vos trois serveurs.

Pour ajouter le référentiel, vous devez d’abord installer les paquets + dirmngr + et + software-properties-common +. + dirmngr + est un serveur permettant de gérer les certificats et les clés du référentiel. + software-properties-common + est un paquet qui permet d’ajouter et de mettre à jour facilement les emplacements du référentiel source. Installez les deux paquets en lançant:

sudo apt install dirmngr software-properties-common

Vous allez ajouter la clé de référentiel MariaDB avec la commande + apt-key +, que le gestionnaire de packages APT utilisera pour vérifier que le package est authentique:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Une fois que vous avez la clé de confiance dans la base de données, vous pouvez ajouter le référentiel avec la commande suivante:

sudo add-apt-repository 'deb [arch=amd64] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.4/debian buster main'

Après avoir ajouté le référentiel, exécutez + apt update + afin d’inclure les manifestes de paquet du nouveau référentiel:

sudo apt update

Une fois que vous avez terminé cette étape sur votre premier serveur, recommencez pour les deuxième et troisième serveurs.

Maintenant que vous avez ajouté le référentiel de paquets sur vos trois serveurs, vous êtes prêt à installer MariaDB dans la section suivante.

Étape 2 - Installation de MariaDB sur tous les serveurs

Dans cette étape, vous allez installer les packages MariaDB réels sur vos trois serveurs.

À partir de la version + 10.1 +, les packages MariaDB Server et MariaDB Galera Server sont combinés. L’installation de + mariadb-server + installera automatiquement Galera et plusieurs dépendances:

sudo apt install mariadb-server

Vous serez invité à confirmer si vous souhaitez procéder à l’installation. Entrez + yes + pour continuer l’installation.

À partir de la version de MariaDB + 10.4 +, l’utilisateur * root * MariaDB n’a pas de mot de passe par défaut. Pour définir un mot de passe pour l’utilisateur * root *, commencez par vous connecter à MariaDB:

sudo mysql -uroot

Une fois dans le shell MariaDB, modifiez le mot de passe en exécutant l’instruction suivante:

set password = password("");

Vous verrez la sortie suivante indiquant que le mot de passe a été défini correctement:

OutputQuery OK, 0 rows affected (0.001 sec)

Quittez le shell MariaDB en exécutant la commande suivante:

quit;

Si vous souhaitez en savoir plus sur SQL ou si vous avez besoin d’un rafraîchissement rapide, consultez notre tutoriel MySQL].

Vous avez maintenant toutes les pièces nécessaires pour commencer à configurer le cluster, mais comme vous allez vous appuyer sur + rsync + dans les étapes ultérieures, assurez-vous qu’il est installé:

sudo apt install rsync

Cela confirmera que la version la plus récente de + rsync + est déjà disponible ou vous invitera à la mettre à niveau ou à l’installer.

Une fois que vous avez installé MariaDB et défini le mot de passe root sur votre premier serveur, répétez ces étapes pour vos deux autres serveurs.

Maintenant que vous avez installé MariaDB avec succès sur chacun des trois serveurs, vous pouvez passer à l’étape de configuration de la section suivante.

Étape 3 - Configuration du premier nœud

Dans cette étape, vous allez configurer votre premier noeud. Chaque nœud du cluster doit avoir une configuration presque identique. De ce fait, vous allez effectuer toute la configuration sur votre première machine, puis la copier sur les autres nœuds.

Par défaut, MariaDB est configuré pour vérifier le répertoire + / etc / mysql / conf.d + afin d’obtenir des paramètres de configuration supplémentaires à partir des fichiers se terminant par + .cnf +. Créez un fichier dans ce répertoire avec toutes vos directives spécifiques au cluster:

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

Ajoutez la configuration suivante dans le fichier. La configuration spécifie différentes options de cluster, des détails sur le serveur actuel et les autres serveurs du cluster, ainsi que des paramètres liés à la réplication. Notez que les adresses IP de la configuration sont les adresses privées de vos serveurs respectifs. remplacez les lignes en surbrillance par les adresses IP appropriées.

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

[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="test_cluster"
wsrep_cluster_address="gcomm://,,"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address=""
wsrep_node_name=""
  • * La première section * modifie ou réaffirme les paramètres MariaDB / MySQL qui permettront au cluster de fonctionner correctement. Par exemple, Galera ne fonctionnera pas avec MyISAM ou des moteurs de stockage non transactionnels similaires, et + mysqld + ne doit pas être lié à l’adresse IP de + localhost +. Pour en savoir plus sur les paramètres, consultez la page de configuration de Galera Cluster http://galeracluster.com/documentation-webpages/configuration.html [].

  • * La section «Configuration du fournisseur Galera» * configure les composants MariaDB qui fournissent une API de réplication WriteSet. Cela signifie Galera dans votre cas, car Galera est un fournisseur wsrep (réplication WriteSet). Vous spécifiez les paramètres généraux pour configurer l’environnement de réplication initial. Cela ne nécessite aucune personnalisation, mais vous pouvez en savoir plus sur les Galera options de configuration.

  • * La section «Configuration du cluster Galera» * définit le cluster, identifie les membres du cluster par leur adresse IP ou leur nom de domaine pouvant être résolu et crée un nom pour le cluster afin de garantir que les membres rejoignent le groupe approprié. Vous pouvez remplacer le nom + wsrep_cluster_ + par quelque chose de plus significatif que` + test_cluster + ou le laisser tel quel, mais vous devez mettre à jour + wsrep_cluster_address + `avec les adresses IP privées de vos trois serveurs.

  • * La section «Configuration de la synchronisation Galera» * définit comment le cluster communiquera et synchronisera les données entre les membres. Ceci est utilisé uniquement pour le transfert d’état qui se produit lorsqu’un nœud est mis en ligne. Pour votre configuration initiale, vous utilisez + rsync +, car il est généralement disponible et fait ce dont vous aurez besoin pour le moment.

  • * La section «Configuration de Galera Node» * clarifie l’adresse IP et le nom du serveur actuel. Cela s’avère utile lorsque vous essayez de diagnostiquer des problèmes dans les journaux et de référencer chaque serveur de plusieurs manières. L’adresse + wsrep_node_address + doit correspondre à l’adresse de la machine sur laquelle vous êtes, mais vous pouvez choisir le nom de votre choix pour vous aider à identifier le nœud dans les fichiers journaux.

Lorsque vous êtes satisfait du fichier de configuration du cluster, copiez le contenu dans le Presse-papiers, enregistrez et fermez le fichier. Pour ce faire, vous pouvez utiliser nano text editor en appuyant sur + CTRL + X +, en tapant + y + et en appuyant sur + + ENTER +.

Maintenant que vous avez configuré votre premier nœud avec succès, vous pouvez passer à la configuration des nœuds restants dans la section suivante.

Étape 4 - Configuration des nœuds restants

Dans cette étape, vous allez configurer les deux nœuds restants. Sur votre deuxième noeud, ouvrez le fichier de configuration:

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

Collez la configuration que vous avez copiée à partir du premier nœud, puis mettez à jour le + Galera Node Configuration + pour utiliser l’adresse IP ou le nom de domaine pouvant être résolu pour le nœud spécifique que vous configurez. Enfin, mettez à jour son nom, que vous pouvez définir comme bon vous semble pour identifier le nœud dans vos fichiers journaux:

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

. . .
# Galera Node Configuration
wsrep_node_address=""
wsrep_node_name=""
. . .

Enregistrez et quittez le fichier.

Une fois ces étapes terminées, répétez-les sur le troisième nœud.

Vous êtes presque prêt à afficher le cluster, mais avant cela, assurez-vous que les ports appropriés sont ouverts dans votre pare-feu.

Étape 5 - Ouverture du pare-feu sur chaque serveur

Dans cette étape, vous allez configurer votre pare-feu de sorte que les ports requis pour la communication entre nœuds soient ouverts. Sur chaque serveur, vérifiez l’état du pare-feu en exécutant:

sudo ufw status

Dans ce cas, seul SSH est autorisé via:

OutputStatus: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Etant donné que seul le trafic SSH est autorisé dans ce cas, vous devrez ajouter des règles pour le trafic MySQL et Galera. Si vous essayez de démarrer le cluster, cela échouera à cause des règles de pare-feu.

Galera peut utiliser quatre ports:

  • + 3306 + Pour les connexions client MySQL et le transfert d’instantané d’état qui utilisent la méthode + mysqldump +.

  • + 4567 + Pour le trafic de réplication Galera Cluster. La réplication multidiffusion utilise à la fois le transport UDP et TCP sur ce port.

  • + 4568 + Pour le transfert progressif d’état.

  • + 4444 + Pour tous les autres transferts d’instantané d’état.

Dans cet exemple, vous allez ouvrir les quatre ports pendant votre configuration. Une fois que vous avez vérifié que la réplication fonctionne, vous souhaitez fermer tous les ports que vous n’utilisez pas réellement et limiter le trafic aux seuls serveurs du cluster.

Ouvrez les ports avec la commande suivante:

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

Après avoir configuré votre pare-feu sur le premier nœud, créez les mêmes paramètres de pare-feu sur les deuxième et troisième nœuds.

Maintenant que vous avez configuré les pare-feu avec succès, vous êtes prêt à démarrer le cluster à l’étape suivante.

Étape 6 - Démarrer le cluster

Dans cette étape, vous allez démarrer votre cluster MariaDB. Pour commencer, vous devez arrêter le service MariaDB en cours d’exécution afin de pouvoir mettre votre cluster en ligne.

Arrêtez MariaDB sur les trois serveurs

Utilisez la commande suivante sur les trois serveurs pour arrêter MariaDB afin de pouvoir les restaurer dans un cluster:

sudo systemctl stop mysql

+ systemctl + n’affiche pas le résultat de toutes les commandes de gestion des services. Par conséquent, pour être sûr de votre réussite, utilisez la commande suivante:

sudo systemctl status mysql

Si la dernière ligne ressemble à ce qui suit, la commande a réussi:

Output. . .
Apr 26 03:34:23 galera-node-01 systemd[1]: Stopped MariaDB 10.4.4 database server.

Une fois que vous avez arrêté + mysql + sur tous les serveurs, vous êtes prêt à continuer.

Afficher le premier nœud

Pour faire apparaître le premier nœud, vous devez utiliser un script de démarrage spécial. Selon votre configuration du cluster, chaque nœud mis en ligne tente de se connecter à au moins un autre nœud spécifié dans son fichier + galera.cnf + pour obtenir son état initial. Sans le script + galera_new_cluster + qui permet à systemd de transmettre le paramètre + - wsrep-new-cluster +, un démarrage normal systemystl + mysql + échouera car aucun nœud ne fonctionnera avec le premier nœud avec lequel se connecter.

sudo galera_new_cluster

Cette commande n’affiche aucune sortie en cas d’exécution réussie. Lorsque ce script réussit, le nœud est enregistré en tant que partie du cluster et vous pouvez le voir à l’aide de la commande suivante:

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

Vous verrez la sortie suivante indiquant qu’il y a un nœud dans le cluster:

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Sur les autres noeuds, vous pouvez démarrer + mysql + normalement. Ils rechercheront n’importe quel membre de la liste de grappes en ligne. Ainsi, lorsqu’ils en trouveront une, ils rejoindront la grappe.

Amener le deuxième nœud

Maintenant, vous pouvez faire apparaître le deuxième noeud. Démarrer + mysql:

sudo systemctl start mysql

Aucune sortie ne sera affichée lors d’une exécution réussie. Vous verrez la taille de votre cluster augmenter à chaque mise en ligne de chaque nœud:

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

La sortie suivante indique que le deuxième nœud a rejoint le cluster et qu’il y a deux nœuds au total.

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Amener le troisième nœud

Il est maintenant temps de faire apparaître le troisième nœud. Démarrer + mysql:

sudo systemctl start mysql

Exécutez la commande suivante pour trouver la taille du cluster:

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

Vous verrez la sortie suivante, qui indique que le troisième nœud a rejoint le cluster et que le nombre total de nœuds dans le cluster est de trois.

Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

À ce stade, l’ensemble du cluster est en ligne et communique avec succès. Vous pouvez maintenant vous assurer que la configuration est opérationnelle en testant la réplication dans la section suivante.

Étape 7 - Test de la réplication

Vous avez suivi les étapes décrites jusqu’à ce que votre cluster puisse effectuer la réplication d’un nœud vers un autre, appelée réplication active-active. Suivez les étapes ci-dessous pour tester et voir si la réplication fonctionne comme prévu.

Écrire au premier nœud

Vous commencerez par apporter des modifications à la base de données sur votre premier nœud. Les commandes suivantes créeront une base de données appelée + playground + et une table à l’intérieur de cette base de données appelée + equipment +.

mysql -u root -p -e 'CREATE DATABASE playground;
CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id));
INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'

Dans la commande précédente, l’instruction + CREATE DATABASE + crée une base de données nommée + playground +. L’instruction + CREATE + crée une table nommée + equipment à l’intérieur de la base de données` + playground + ayant une colonne d’identifiant auto-incrémenté appelée + id + et d’autres colonnes. Les colonnes `+ type +,` + quant + et + color + sont définies pour stocker le type, la quantité et la couleur de l’équipement, respectivement. L’instruction `+ INSERT + insère une entrée de type + slide +, quantité + 2 + et couleur + bleu +.

Vous avez maintenant une valeur dans votre table.

Lire et écrire sur le deuxième nœud

Ensuite, examinez le deuxième nœud pour vérifier que la réplication fonctionne:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Si la réplication fonctionne, les données que vous avez entrées sur le premier nœud seront visibles ici sur le second:

Output+----+-------+-------+-------+
| id | type  | quant | color |
+----+-------+-------+-------+
|  1 | slide |     2 | blue  |
+----+-------+-------+-------+

À partir de ce même nœud, vous pouvez écrire des données sur le cluster:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'

Lire et écrire sur le troisième nœud

À partir du troisième nœud, vous pouvez lire toutes ces données en interrogeant à nouveau la table:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Vous verrez la sortie suivante montrant les deux lignes:

Output   +----+-------+-------+--------+
  | id | type  | quant | color  |
  +----+-------+-------+--------+
  |  1 | slide |     2 | blue   |
  |  2 | swing |    10 | yellow |
  +----+-------+-------+--------+

De nouveau, vous pouvez ajouter une autre valeur à partir de ce nœud:

mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'

Lisez sur le premier noeud:

De retour sur le premier noeud, vous pouvez vérifier que vos données sont disponibles partout:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'

Vous verrez la sortie suivante qui indique que les lignes sont disponibles sur le premier nœud.

Output   +----+--------+-------+--------+
  | id | type   | quant | color  |
  +----+--------+-------+--------+
  |  1 | slide  |     2 | blue   |
  |  2 | swing  |    10 | yellow |
  |  3 | seesaw |     3 | green  |
  +----+--------+-------+--------+

Vous avez vérifié que vous pouvez écrire sur tous les nœuds et que la réplication est correctement effectuée.

Conclusion

À ce stade, vous avez un cluster de test Galera à trois nœuds configuré. Si vous envisagez d’utiliser un cluster Galera en situation de production, il est recommandé de commencer par au moins cinq nœuds.

Avant d’utiliser la production, vous pouvez jeter un coup d’œil à certains des http://galeracluster.com/documentation-webpages/sst.html (autres agents de transfert d’instantané d’état) comme * xtrabackup *, qui vous permet de définir de nouveaux nœuds très rapidement et sans grandes interruptions de vos nœuds actifs. Cela n’affecte pas la réplication réelle, mais constitue un problème lorsque les noeuds sont en cours d’initialisation.