Configuration et mise en œuvre d'un cluster MySQL Group Replication (MGR)

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.

Étiquettes: MySQL group-replication database-clusters High-Availability Linux-Administration

Publié le 30 juillet à 19h30