Comment configurer un cluster Galera avec MySQL 5.6 sur Ubuntu 16.04

introduction

Le clustering ajoute une haute disponibilité à votre base de données en répartissant les modifications sur différents serveurs. Si l’une des instances échoue, d’autres sont déjà disponibles pour continuer à servir.

Les clusters existent en 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.

Dans ce guide, nous allons configurer un cluster MySQL Galera actif-actif. À des fins de démonstration, nous allons configurer et tester trois nœuds, le plus petit cluster configurable.

Conditions préalables

Pour suivre, vous aurez besoin de trois serveurs Ubuntu 16.04, chacun avec:

Une fois que toutes ces conditions préalables sont en place, nous sommes prêts à installer le logiciel.

Étape 1 - Ajout du référentiel Galera à tous les serveurs

MySQL, corrigé pour inclure le clustering Galera, n’est pas inclus dans les référentiels Ubuntu par défaut. Nous allons donc commencer par ajouter les référentiels Ubuntu externes gérés par le projet Galera à nos trois serveurs.

Sur chaque serveur, ajoutez la clé de référentiel avec la commande + apt-key, que` + app` utilisera pour vérifier que les packages sont authentiques.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv BC19DDBA

Une fois que nous avons la clé de confiance dans la base de données de chaque serveur, nous pouvons ajouter les référentiels. Pour ce faire, créez un nouveau fichier nommé + galera.list + dans le répertoire + / etc / apt / sources.list.d / + sur chaque serveur:

sudo nano /etc/apt/sources.list.d/galera.list

Dans l’éditeur de texte, ajoutez les lignes suivantes qui mettront les référentiels appropriés à la disposition du gestionnaire de packages APT:

/etc/apt/sources.list.d/galera.list

Enregistrez et fermez le fichier (appuyez sur + CTRL + X +, + Y +, puis + ENTER +).

Les référentiels Codership sont maintenant disponibles pour les trois serveurs. Cependant, il est important que vous ordonniez à + ​​apt + de préférer les référentiels de Codership aux autres pour s’assurer qu’il installe les versions corrigées du logiciel nécessaire à la création d’un cluster Galera. Pour ce faire, créez un autre nouveau fichier nommé + galera.pref + dans le répertoire + / etc / apt / preferences.d / +:

sudo nano /etc/apt/preferences.d/galera.pref

Ajoutez les lignes suivantes à l’éditeur de texte:

/etc/apt/preferences.d/galera.pref

# Prefer Codership repository
Package: *
Pin: origin releases.galeracluster.com
Pin-Priority: 1001

Enregistrez et fermez ce fichier, puis exécutez sudo apt-get update afin d’inclure les manifestes de paquet des nouveaux référentiels:

sudo apt-get update

Vous pouvez voir un avertissement indiquant que la signature + utilise l’algorithme de digestion faible (SHA1) +. Il existe an un numéro en cours sur GitHub pour résoudre ce problème. En attendant, vous pouvez continuer.

Une fois les référentiels mis à jour sur les trois serveurs, nous sommes prêts à installer MySQL et Galera.

Étape 2 - Installation de MySQL et de Galera sur tous les serveurs

Exécutez la commande suivante sur les trois serveurs pour installer une version de MySQL corrigée pour fonctionner avec Galera, ainsi que Galera et plusieurs dépendances:

sudo apt-get install galera-3 galera-arbitrator-3 mysql-wsrep-5.6

Au cours de l’installation, vous serez invité à définir un mot de passe pour l’utilisateur administratif MySQL.

Nous devrions avoir toutes les pièces nécessaires pour commencer à configurer le cluster, mais comme nous allons nous appuyer sur + rsync + dans les étapes ultérieures, assurez-vous qu’il est bien installé sur les trois:

sudo apt-get install rsync

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

Une fois que nous avons installé MySQL sur chacun des trois serveurs, nous pouvons commencer la configuration.

Étape 3 - Configuration du premier nœud

Chaque nœud du cluster doit avoir une configuration presque identique. De ce fait, nous allons effectuer toute la configuration sur notre première machine, puis la copier sur les autres nœuds.

Par défaut, MySQL 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 +. Nous allons créer un fichier dans ce répertoire avec toutes nos directives spécifiques aux clusters:

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

Ajoutez la configuration suivante dans le fichier. Vous devrez modifier les paramètres surlignés en rouge. Nous expliquerons ce que chaque section signifie ci-dessous.

/etc/mysql/conf.d/galera.cnf sur le premier noeud

[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 MySQL qui permettront au cluster de fonctionner correctement. Par exemple, Galera Cluster 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 MySQL fournissant une API de réplication d’écriture. Cela signifie Galera dans notre cas, car Galera est un fournisseur wsrep (write-set replication). Nous spécifions 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 Galera options de configuration.

  • * La section «Configuration du cluster Galera» * définit le cluster, identifie les membres du cluster par adresse IP ou 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 changer le + wsrep_cluster_name + en quelque chose de plus significatif que le + test_cluster + ou le laisser tel quel, mais vous devez must update + wsrep_cluster_address + avec les adresses de vos trois serveurs. Si vos serveurs ont des adresses IP privées, utilisez-les ici.

  • * 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 notre configuration initiale, nous utilisons + rsync +, car il est généralement disponible et fait ce dont nous avons 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, puis enregistrez et fermez le fichier.

Maintenant que le premier serveur est configuré, nous allons passer aux deux nœuds suivants.

Étape 4 - Configuration des nœuds restants

Sur chacun des nœuds restants, ouvrez le fichier de configuration:

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

Collez la configuration que vous avez copiée à partir du premier noeud, puis mettez à jour la «Configuration de Galera Node» pour utiliser l’adresse IP ou le nom de domaine pouvant être résolu pour le noeud 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 sur chaque serveur.

Nous sommes presque prêts à faire apparaître le cluster, mais avant cela, nous voudrons nous assurer que les ports appropriés sont ouverts.

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

Sur chaque serveur, vérifions l’état du pare-feu:

sudo ufw status

Dans ce cas, seul SSH est autorisé via:

OutputStatus: active

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

Vous pouvez avoir d’autres règles en place ou aucune règle de pare-feu du tout. Etant donné que seul le trafic SSH est autorisé dans ce cas, vous devrez ajouter des règles pour le trafic MySQL et Galera.

Galera peut utiliser quatre ports:

  • + 3306 + est utilisé pour les connexions client MySQL et le transfert d’instantané d’état qui utilise la méthode mysqldump.

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

  • + 4568 + est utilisé pour le transfert d’état incrémentiel.

  • + 4444 + est utilisé pour tous les autres transferts d’instantané d’état.

Dans notre exemple, nous allons ouvrir les quatre ports pendant que nous effectuons notre configuration. Une fois que nous aurons vérifié que la réplication fonctionne, nous allons fermer tous les ports que nous n’utilisons 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

Étape 6 - Démarrer le cluster

Pour commencer, nous devons arrêter le service MySQL en cours d’exécution pour que notre cluster puisse être mis en ligne.

Arrêtez MySQL sur les trois serveurs:

Utilisez la commande ci-dessous sur les trois serveurs pour arrêter mysql afin que nous puissions 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 que nous avons réussi, exécutez la commande suivante:

sudo systemctl status mysql

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

Output. . .
Sep 02 22:17:56 galera-02 systemd[1]: Stopped LSB: start and stop MySQL.

Une fois que nous avons arrêté + mysql sur tous les serveurs, nous sommes prêts à continuer.

Affichez le premier nœud:

De la manière dont nous avons configuré notre 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. Un mysql` + systemctl start normal échouera car il n’y a pas de nœuds en cours d’exécution avec lesquels le premier nœud doit se connecter, nous devons donc passer le paramètre + wsrep-new-cluster` au premier nœud que nous démarrons. Cependant, ni + systemd + ni + service + n’accepteront correctement l’argument https://github.com/codership/mysql-wsrep/issues/266 [+ - wsrep-new-cluster +], nous devrons donc démarrer le premier noeud en utilisant le script de démarrage dans + / etc / init.d +. Ceci fait, vous pouvez démarrer les nœuds restants avec + systemctl. +

sudo /etc/init.d/mysql start --wsrep-new-cluster

Lorsque ce script est terminé, 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'"
Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Sur les noeuds restants, nous pouvons 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.

Affichez le deuxième nœud:

Démarrer + mysql:

sudo systemctl start mysql

Nous devrions voir la taille de notre cluster augmenter à chaque mise en ligne de chaque nœud:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Amenez le troisième nœud:

Démarrer + mysql:

sudo systemctl start mysql

Si tout fonctionne bien, la taille du cluster doit être définie sur trois:

mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

À ce stade, l’ensemble du cluster doit être en ligne et en communication. Avec cela, nous pouvons tester la réplication entre chacun des nœuds du cluster.

Étape 7 - Test de la réplication

Nous avons suivi toutes les étapes jusqu’à ce que notre cluster puisse effectuer la réplication d’un nœud vers un autre, appelée réplication active-active. Voyons si la réplication fonctionne comme prévu.

Écrivez au premier nœud:

Nous commencerons par apporter des modifications à la base de données sur notre premier noeud. Les commandes suivantes créeront une base de données appelée + playground + et une table à l’intérieur de celle-ci 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");'

Nous avons maintenant une valeur dans notre tableau.

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

Ensuite, nous examinerons le deuxième noeud 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 nous avons 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, nous pouvons é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, nous pouvons lire toutes ces données en interrogeant à nouveau la base de données:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output  +----+-------+-------+--------+
 | id | type  | quant | color  |
 +----+-------+-------+--------+
 |  1 | slide |     2 | blue   |
 |  2 | swing |    10 | yellow |
 +----+-------+-------+--------+

De nouveau, nous pouvons 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, nous pouvons vérifier que nos données sont disponibles partout:

mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Output  +----+--------+-------+--------+
 | id | type   | quant | color  |
 +----+--------+-------+--------+
 |  1 | slide  |     2 | blue   |
 |  2 | swing  |    10 | yellow |
 |  3 | seesaw |     3 | green  |
 +----+--------+-------+--------+

Nous avons testé que nous pouvons écrire sur tous les nœuds et que la réplication est effectuée correctement.

Conclusion

À ce stade, un cluster de test Galera à trois nœuds doit être 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 consulter certains des http://galeracluster.com/documentation-webpages/sst.html (autres agents de transfert d’instantané d’état) tels que «xtrabackup» qui vous permet de configurer nouveaux nœuds très rapidement et sans interruption importante 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. Enfin, pour protéger vos données lors de leur transfert entre serveurs, vous devez également configurer le cryptage SSL.