Architecture et gestion avancée de MySQL en environnement cloud

Le processus de compilation à partir du code source permet une personnalisation poussée de MySQL. Les dépendances essentielles doivent être installées avant le démarrage.

dnf install cmake3 gcc git bison openssl-devel ncurses-devel systemd-devel rpcgen.x86_64 libtirpc-devel-1.3.3-9.el9.x86_64.rpm \
gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc -y

Extraire l'archive et configurer la build :

tar zxf mysql-boost-8.3.0.tar.gz
cd mysql-8.3.0/
mkdir build && cd build
cmake3 .. \
  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
  -DMYSQL_DATADIR=/data/mysql \
  -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
  -DWITH_EXTRA_CHARSETS=all \
  -DDEFAULT_CHARSET=utf8mb4 \
  -DDEFAULT_COLLATION=utf8mb4_unicode_ci \
  -DWITH_BOOST=bundled \
  -DWITH_SSL=system \
  -DWITH_DEBUG=OFF

Déploiement et configuraton initiale

Après compilation, installer le binaire et préparer l'environnement :

make install
useradd -r -s /sbin/nologin -M mysql
mkdir -p /data/mysql/
chown mysql:mysql /data/mysql/

Configurer les variables d’environnement :

export PATH=$PATH:/usr/local/mysql/bin
source ~/.bash_profile

Initialisation des données

Créer les fichiers système et les bases de données :

mysqld --initialize --user=mysql

L’outil affiche un mot de passe temporaire pour l’utilisateur root. Ce mot de passe doit être changé immédiatement.

Démarrage du service

Utiliser un script de gestion système pour contrôler le service :

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --level 35 mysqld on
/etc/init.d/mysqld start

Sécurisation post-installation

Exécuter l’outil sécurisé pour renforcer la configuration par défaut :

mysql_secure_installation

Choisir de désactiver les utilisateurs anonymes, bloquer l’accès distant pour root et supprimer la base test.

Clonage d’un nœud MySQL

Replication de la configuration entre plusieurs serveurs via SCP :

scp -rp /usr/local/mysql/ root@192.168.186.20:/usr/local

Chaque nœud doit avoir un identifiant unique dans /etc/my.cnf :

server-id = 20

Configuration maître-esclave avec GTID

Activer les journaux binaires et définir le mode GTID :

log-bin = mysql-bin
gtid_mode = ON
enforce_gtid_consistency = ON

Créer un utilisateur dédié au réplication :

CREATE USER 'replicator'@'%' IDENTIFIED BY 'securepass';
GRANT REPLICATION SLAVE ON *.* TO 'replicator'@'%';

Configuration de la réplication

Sur le nœud esclave, configurer la connexion vers le maître :

CHANGE MASTER TO 
  MASTER_HOST='192.168.186.10',
  MASTER_USER='replicator',
  MASTER_PASSWORD='securepass',
  MASTER_AUTO_POSITION=1;
START SLAVE;

Optimisations avancées

  • Réplication multithreadée : Activer sur le slave via slave-parallel-workers=16.
  • Réplication semi-synchrone : Installer les plugins semisync_master.so et semisync_slave.so.
  • Retard de synchronisation : Utiliser CHANGE REPLICATION SOURCE TO SOURCE_DELAY=60; pour créer un délai de 60 secondes.
  • Journaux de requêtes lentes : Activer via slow_query_log=ON et ajuster long_query_time.

Haute disponibilité avec MHA

Installer les composants MHA sur le manager et chaque nœud MySQL. Configurer le fichier principal :

[server default]
user=root
password=secret
ssh_user=root
repl_user=replicator
repl_password=securepass
master_binlog_dir=/data/mysql
manager_workdir=/etc/masterha
manager_log=/etc/masterha/mha.log

[server1]
hostname=192.168.186.10
candidate_master=1
check_repl_delay=0

[server2]
hostname=192.168.186.20
candidate_master=1
check_repl_delay=0

[server3]
hostname=192.168.186.30
no_master=1

Switch automatique et gestion du VIP

Activer le script de basculement IP via master_ip_failover_script. Définir un IP virtuel partagé (VIP) pour la haute disponibilité.

my $vip = '192.168.186.100/24';

Cluster de groupe (Group Replication)

Configurer le cluster sur trois nœuds avec un mode multi-primaire :

plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_local_address="192.168.186.10:33061"
group_replication_group_seeds="192.168.186.10:33061,192.168.186.20:33061,192.168.186.30:33061"
group_replication_single_primary_mode=OFF

Initialiser le premier nœud avec SET GLOBAL group_replication_bootstrap_group=ON;, puis activer le groupe.

MySQL Router pour équilibrage de charge

Installer et configurer MySQL Router pour distribuer les requêtes :

[routing:ro]
bind_address = 0.0.0.0
bind_port = 7001
destinations = 192.168.186.10:3306,192.168.186.20:3306,192.168.186.30:3306
routing_strategy = round-robin

[routing:rw]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 192.168.186.10:3306,192.168.186.20:3306,192.168.186.30:3306
routing_strategy = first-available

Les clients se connectent via les ports 7001 (lecture) ou 7002 (écriture).

Étiquettes: MySQL source compilation réplication gtid MHA

Publié le 4 septembre à 11h07