Présentation de l'environnement
L'objectif est de déployer une solution de haute disponibilité utilisant MySQL Group Replication (MGR). Cette configuration s'appuie sur trois instances distinctes exécutées sous Linux.
| Nom d'hôte | Adresse IP |
|---|---|
| node-alpha | 192.168.10.11 |
| node-beta | 192.168.10.12 |
| node-gamma | 192.168.10.13 |
Préparation du système
La première étape consiste à configurer la résolution de noms locale sur chaque serveur via le fichier /etc/hosts :
127.0.0.1 localhost
192.168.10.11 node-alpha
192.168.10.12 node-beta
192.168.10.13 node-gamma
Ensuite, créez l'utilisateur dédié au service MySQL :
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
Après avoir extrait l'archive binaire de MySQL, configurez les variables d'environnement dans le profil de l'utilisateur pour fcailiter l'accès aux commandes :
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
Initialisation de l'instance
Créez le répertoire de données et lancez l'initialisation sécurisée (sans mot de passe temporaire pour ce laboratoire) :
mkdir -p /var/lib/mysql-data
mysqld --initialize-insecure --user=mysql \
--basedir=/usr/local/mysql \
--datadir=/var/lib/mysql-data
Définissez un fichier de configuration de base my.cnf pour chaque nœud :
[mysqld]
basedir=/usr/local/mysql
datadir=/var/lib/mysql-data
port=3306
socket=/tmp/mysql.sock
user=mysql
# Paramètres d'optimisation
innodb_flush_log_at_trx_commit=2
log_timestamps=SYSTEM
lower_case_table_names=1
Configuration spécifique à la réplication de groupe
Chaque nœud nécessite des paramètres uniques (server-id) et des paramètres communs pour activer GTID et le support des transactions globales.
Paramètres communs (à ajouter au my.cnf)
server-id=1 # À incrémenter pour chaque nœud (ex: 2, 3)
gtid-mode=ON
enforce-gtid-consistency=ON
binlog_checksum=NONE
# Optimisation de la réplication esclave
slave_parallel_workers=16
slave_preserve_commit_order=1
slave_parallel_type=LOGICAL_CLOCK
Configuration du module Group Replication
Installez le plugin nécessaire et configurez les paramètres réseau du groupe :
# Dans MySQL
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
Ajoutez les lignes suivantes dans my.cnf (exemple pour node-alpha) :
transaction_write_set_extraction=XXHASH64
group_replication_group_name="7b9e5c30-e22b-11ec-8fea-000c294fb842"
group_replication_start_on_boot=off
group_replication_local_address="192.168.10.11:33061"
group_replication_group_seeds="192.168.10.12:33061,192.168.10.13:33061"
group_replication_bootstrap_group=off
group_replication_ip_whitelist="192.168.10.0/24"
Gestion des utilisateurs et démarrage
Créez un compte dédié à la récupération des données entre les membres du groupe :
SET SQL_LOG_BIN=0;
CREATE USER 'repl_sync'@'%' IDENTIFIED BY 'StrongPass123';
GRANT REPLICATION SLAVE ON *.* TO 'repl_sync'@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl_sync', MASTER_PASSWORD='StrongPass123' FOR CHANNEL 'group_replication_recovery';
Amorçage du cluster
Sur le premier nœud (node-alpha) uniquement, initialisez le groupe :
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
Sur les autres nœuds (node-beta et node-gamma), rejoignez simplement le groupe :
START GROUP_REPLICATION;
Vérifiez l'état de santé du cluster avec la requête suivante :
SELECT MEMBER_HOST, MEMBER_PORT, MEMBER_STATE, MEMBER_ROLE
FROM performance_schema.replication_group_members;
Résolution des problèmes courants
Si vous rencontrez l'erreur [GCS] Timeout while waiting for the group communication engine, vérifiez que le paramètre group_replication_group_seeds ne contient pas l'adresse locale du nœud actuel lors de l'amorçage initial, ou assurez-vous que les ports (par défaut 33061) sont ouverts dans votre pare-feu.