Configuration et déploiement de MySQL Group Replication 8.0.34

Présentation de l'environnement

Système Adresse IP Nom d'hôte Version MySQL Port base de données Port MGR
Red Hat 7.9 172.20.10.3 s1 8.0.34 3306 33061
Red Hat 7.9 172.20.10.4 s2 8.0.34 3306 33061
Red Hat 7.9 172.20.10.5 s3 8.0.34 3306 33061

Installation de MySQL sur chaque nœud

Désinstallation des bases existantes

rpm -qa | grep mysql 
rpm -qa | grep mariadb
rpm -e --nodeps nom_paquet

Configuration du réseau

172.20.10.3 s1
172.20.10.4 s2
172.20.10.5 s3

Gestion du pare-feu

systemctl stop firewalld
systemctl disable firewalld

Création utilisateur système

groupadd mysql
useradd -r -g mysql -s /sbin/false mysql

Installation du serveur

tar -xvf mysql-8.0.34-linux-glibc2.17-x86_64.tar.gz
mv mysql-8.0.34-linux-glibc2.17-x86_64 mysql
mkdir -p mysql/{data,logs}
chown -R mysql:mysql /soft/mysql
chmod -R 755 /soft/mysql

Fichier de configuration principle

[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
port=3306
basedir=/soft/mysql
datadir=/soft/mysql/data
socket=/tmp/mysql.sock
log_timestamps=system
log_error=/soft/mysql/logs/error.log
disabled_storage_engines=MyISAM,BLACKHOLE,FEDERATED,MEMORY
sql_require_primary_key=ON
report_host=172.20.10.3
report_port=3306
server_id =330603
log_bin =/soft/mysql/logs/mysql-bin
binlog_format =ROW
gtid_mode =ON
enforce_gtid_consistency =ON
log_slave_updates =ON
master_info_repository =TABLE
relay_log_info_repository =TABLE
binlog_transaction_dependency_tracking =WRITESET
super_read_only =ON

transaction_write_set_extraction =XXHASH64
replica_parallel_type =LOGICAL_CLOCK
replica_parallel_workers =4
replica_preserve_commit_order =ON

plugin_load_add =group_replication.so
loose_group_replication_group_name ="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose_group_replication_start_on_boot =OFF
loose_group_replication_local_address =172.20.10.3:33061
loose_group_replication_group_seeds =172.20.10.3:33061,172.20.10.4:33061,172.20.10.5:33061
loose_group_replication_bootstrap_group =OFF
loose_group_replication_recovery_get_public_key =ON

Initialisation et démarrage

/soft/mysql/bin/mysqld --initialize --user=mysql --basedir=/soft/mysql --datadir=/soft/mysql/data
ln -vs /soft/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start

Variables d'environnement

PATH=$PATH:$HOME/bin:/soft/mysql/bin
export PATH
source ~/.bash_profile

Première connexion

mysql -uroot -p
alter user 'root'@'localhost' identified by 'root@123';
flush privileges;

Configuration du groupe de réplication

Vérification des plugins

show plugins;

Initialisation du groupe

set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
select member_id,member_host,member_port,member_state,member_role from performance_schema.replication_group_members;

Utilisateur de réplicatino

create user 'repl'@'%' identified with 'mysql_native_password' by 'repl@123';
grant replication slave,backup_admin on *.* to 'repl'@'%';
flush privileges;

Canal de récupération

change master to master_user='repl',master_password='repl@123' for channel 'group_replication_recovery';

Ajout des membres au groupe

change master to master_user='repl',master_password='repl@123' for channel 'group_replication_recovery';
start group_replication;
select member_id,member_host,member_port,member_state,member_role from performance_schema.replication_group_members;

Changement de mode de réplication

Mono-primary vers multi-primary

select group_replication_switch_to_multi_primary_mode();

Multi-primary vers mono-primary

select group_replication_switch_to_single_primary_mode('141e2b7e-6e25-11ee-9483-0800276dee47');

Suivi de progression

select event_name,work_completed,work_estimated from performance_schema.events_stages_current where event_name like '%stage/group_rpl%' \G;

Surveillance du groupe

Statut des membres

select * from performance_schema.replication_group_members;

Statistiques détaillées

select * from performance_schema.replication_group_member_stats\G;

Délai des secondaires

select case when min_commit_timstamp is null then 0
else unix_timestamp(now(6))-unix_timestamp(min_commit_timstamp)
end as seconds_behind_master
from (
select min(applying_transaction_original_commit_timestamp) as min_commit_timstamp
from performance_schema.replication_applier_status_by_worker
where applying_transaction<>'') t;

Utilisation mémoire

select name,enabled from performance_schema.setup_instruments where name like 'memory/group_rpl%';

Étiquettes: MySQL group-replication database-clustering High-Availability mysql-8.0

Publié le 25 septembre à 17h39