专职DBA-MySQL高可用集群复制方案-MGR
作者:周万春
基本环境: ------------------------------------------------------------ 主机名 ip地址(bond0) ip地址(bond1) 端口号 数据目录 ------------------------------------------------------------ mgr01 10.0.0.31 192.168.10.31 3306 /data/mysql/3306/ mgr02 10.0.0.32 192.168.10.32 3306 /data/mysql/3306/ mgr03 10.0.0.33 192.168.10.33 3306 /data/mysql/3306/ ------------------------------------------------------------ MySQL下载地址: https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz MD5: 686b454f7f7f0b0bf4814929fcd0fa81 操作系统安装请参考《专职DBA-Linux实验环境安装部署》 安装MySQL请参考《专职DBA-互联网大厂MySQL标准化安装》 解压MySQL8.0二进制包: # xz -d mysql-8.0.18-linux-glibc2.12-x86_64.tar.xz # tar -xf mysql-8.0.18-linux-glibc2.12-x86_64.tar -C /u01/app/mysql/ 配置好先不要初始化MySQL,克隆出两台主机mgr02,mgr03(并修改主机名和ip地址) my.cnf配置文件参考(MGR大多是独占服务器,配置文件可以放在/etc/my.cnf) 周老师还是喜欢把配置文件放在老地方/data/mysql/3306/conf/my.cnf 配置文件参考:https://www.cnblogs.com/zhouwanchun/p/11366260.html my.cnf配置文件注意的地方: server_id = 313306 #每个节点的server_id不能一样 binlog_format = row #日志格式必须为ROW log_bin = /data/mysql/3306/binlog/mysql-bin gtid_mode = on enforce_gtid_consistency = on # MySQL Group Replication master_info_repository = table relay_log_info_repository = table binlog_checksum = none log_slave_updates = on transaction_write_set_extraction = XXHASH64 loose-group_replication_group_name = "3ff8dc74-e421-43eb-add3-abf2671886c5" loose-group_replication_start_on_boot = off loose-group_replication_local_address = "10.0.0.31:33061" loose-group_replication_group_seeds = "10.0.0.31:33061,10.0.0.32:33061,10.0.0.33:33061" loose-group_replication_bootstrap_group = off 字符集采用utf8mb4 [root@mgr01 ~]# grep "utf8mb4" /data/mysql/3306/conf/my.cnf default-character-set = utf8mb4 default-character-set = utf8mb4 character_set_server = utf8mb4 # latin1 特别说明: server_id 需要更改 loose-group_replication_local_address = 更改为本地节点的ip loose-group_replication_group_name = 可以使用uuidgen命令生成 [root@mgr01 ~]# uuidgen 3ff8dc74-e421-43eb-add3-abf2671886c5 [root@mgr01 ~]# vim /etc/hosts 10.0.0.14 proxysql 10.0.0.31 mgr01 10.0.0.32 mgr02 10.0.0.33 mgr03 关机,现在克隆mgr02,mgr03 [root@mgr01 ~]# init 0 记得修改主机名、ip地址、server_id、loose-group_replication_local_address 初始化MySQL8.0的数据库 分别在mgr01,mgr02,mgr03上执行初始化,并且确保初始化没有报错信息。 [root@mgr01 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf --initialize-insecure [root@mgr01 ~]# cat /data/mysql/3306/log/error.log [root@mgr02 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf --initialize-insecure [root@mgr02 ~]# cat /data/mysql/3306/log/error.log [root@mgr03 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf --initialize-insecure [root@mgr03 ~]# cat /data/mysql/3306/log/error.log 启动第一个节点数据库mgr01 [root@mgr01 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & [root@mgr01 ~]# ps -ef | grep mysqld [root@mgr01 ~]# netstat -lnp | grep mysqld [root@mgr01 ~]# mysql -S /data/mysql/3306/sock/mysql.sock [root@localhost:mysql.sock] [(none)]> set sql_log_bin = off; [root@localhost:mysql.sock] [(none)]> set global read_only = off; [root@localhost:mysql.sock] [(none)]> set global super_read_only = off; 设置密码 [root@localhost:mysql.sock] [(none)]> alter user user() identified by '123'; 创建复制用户mgr [root@localhost:mysql.sock] [(none)]> create user 'mgr'@'10.0.0.%' identified by '123'; [root@localhost:mysql.sock] [(none)]> grant replication slave on *.* to 'mgr'@'10.0.0.%'; [root@localhost:mysql.sock] [(none)]> set sql_log_bin = on; 开启复制 [root@localhost:mysql.sock] [(none)]> change master to master_user='mgr',master_password='123' for channel 'group_replication_recovery'; 加载GR插件 [root@localhost:mysql.sock] [(none)]> install plugin group_replication soname 'group_replication.so'; [root@localhost:mysql.sock] [(none)]> show plugins; [root@localhost:mysql.sock] [(none)]> select * from mysql.plugin; +-------------------+----------------------+ | name | dl | +-------------------+----------------------+ | group_replication | group_replication.so | +-------------------+----------------------+ 1 row in set (0.00 sec) 启用第一个节点的Group Replication复制程序 [root@localhost:mysql.sock] [(none)]> set global group_replication_bootstrap_group = on; #只在第一个节点使用 [root@localhost:mysql.sock] [(none)]> start group_replication; 检查复制组是否创建并已加入新成员 [root@localhost:mysql.sock] [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 1 row in set (0.00 sec) [root@localhost:mysql.sock] [(none)]> set global group_replication_bootstrap_group = off; off掉是为了故障切换更快一些 注:前面的用户密码修改和创建用户操作必须设置binlog不记录,执行后再打开,否则会引起START GROUP_REPLICATION执行报错: ERROR 3092 (HY000): The server is not configured properly to be an active member of the group. Please see more details on error log. 解决方案是: 根据提示打开group_replication_allow_local_disjoint_gtids_join选项, MySQL命令行执行: mysql> set global group_replication_allow_local_disjoint_gtids_join=ON; 然后再执行: mysql> start group_replication; 启动第二个节点数据库mgr02 [root@mgr02 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & [root@mgr02 ~]# ps -ef | grep mysqld [root@mgr02 ~]# netstat -lnp | grep mysqld [root@mgr02 ~]# mysql -S /data/mysql/3306/sock/mysql.sock [root@localhost:mysql.sock] [(none)]> set sql_log_bin = off; [root@localhost:mysql.sock] [(none)]> set global read_only = off; [root@localhost:mysql.sock] [(none)]> set global super_read_only = off; [root@localhost:mysql.sock] [(none)]> alter user user() identified by '123'; [root@localhost:mysql.sock] [(none)]> create user 'mgr'@'10.0.0.%' identified by '123'; [root@localhost:mysql.sock] [(none)]> grant replication slave on *.* to 'mgr'@'10.0.0.%'; [root@localhost:mysql.sock] [(none)]> set sql_log_bin= on; [root@localhost:mysql.sock] [(none)]> change master to master_user='mgr',master_password='123' for channel 'group_replication_recovery'; [root@localhost:mysql.sock] [(none)]> install plugin group_replication soname 'group_replication.so'; [root@localhost:mysql.sock] [(none)]> select * from mysql.plugin; +-------------------+----------------------+ | name | dl | +-------------------+----------------------+ | group_replication | group_replication.so | +-------------------+----------------------+ 1 row in set (0.00 sec) 启用第二个节点的Group Replication set global group_replication_bootstrap_group = on; #不需要执行 [root@localhost:mysql.sock] [(none)]> start group_replication; 确认第二个节点启动成功 [root@localhost:mysql.sock] [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | RECOVERING | SECONDARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 2 rows in set (0.00 sec) 启动第三个节点数据库mgr03 [root@mgr03 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & [root@mgr03 ~]# ps -ef | grep mysqld [root@mgr03 ~]# netstat -lnp | grep mysqld [root@mgr03 ~]# mysql -S /data/mysql/3306/sock/mysql.sock [root@localhost:mysql.sock] [(none)]> set sql_log_bin = off; [root@localhost:mysql.sock] [(none)]> set global read_only = off; [root@localhost:mysql.sock] [(none)]> set global super_read_only = off; [root@localhost:mysql.sock] [(none)]> alter user user() identified by '123'; [root@localhost:mysql.sock] [(none)]> create user 'mgr'@'10.0.0.%' identified by '123'; [root@localhost:mysql.sock] [(none)]> grant replication slave on *.* to 'mgr'@'10.0.0.%'; [root@localhost:mysql.sock] [(none)]> set sql_log_bin= off; [root@localhost:mysql.sock] [(none)]> change master to master_user='mgr',master_password='123' for channel 'group_replication_recovery'; [root@localhost:mysql.sock] [(none)]> install plugin group_replication soname 'group_replication.so'; [root@localhost:mysql.sock] [(none)]> select * from mysql.plugin; +-------------------+----------------------+ | name | dl | +-------------------+----------------------+ | group_replication | group_replication.so | +-------------------+----------------------+ 1 row in set (0.00 sec) 启用第三个节点的Group Replication set global group_replication_bootstrap_group = on; #不需要执行 [root@localhost:mysql.sock] [(none)]> start group_replication; 确认第三个节点启动成功 [root@localhost:mysql.sock] [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | RECOVERING | SECONDARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | RECOVERING | SECONDARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) 确认复制账号是不是可用(使用有安装MySQL8.0的环境连接测试) # mysql -umgr -p -h10.0.0.31 -P3306 # mysql -umgr -p -h10.0.0.32 -P3306 # mysql -umgr -p -h10.0.0.33 -P3306 mysql> select @@hostname; mysql> select @@server_id; 目前环境安装完毕。可以看到mgr01是当前的主节点,可以进行读写操作。其他节点只能读。 MySQL5.7的密码认证方式是: mysql> show variables like "%default_authentication_plugin%"; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | mysql_native_password | +-------------------------------+-----------------------+ 1 row in set, 1 warning (0.02 sec) mysql> select user,host,plugin from mysql.user; +---------------+-----------+-----------------------+ | user | host | plugin | +---------------+-----------+-----------------------+ | root | localhost | mysql_native_password | | mysql.session | localhost | mysql_native_password | | mysql.sys | localhost | mysql_native_password | +---------------+-----------+-----------------------+ 3 rows in set (0.00 sec) MySQL8.0的密码认证方式是: [root@localhost:mysql.sock] [(none)]> show variables like "%default_authentication_plugin%"; +-------------------------------+-----------------------+ | Variable_name | Value | +-------------------------------+-----------------------+ | default_authentication_plugin | caching_sha2_password | +-------------------------------+-----------------------+ 1 row in set (0.03 sec) [root@localhost:mysql.sock] [(none)]> select user,host,plugin from mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | mgr | 10.0.0.% | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+ 5 rows in set (0.01 sec) 如果你想改:alter user 'mgr'@'10.0.0.%' identified with mysql_native_password by '123'; 然后就可以使用低版本连接MySQL8.0的数据库了。 环境确认 [root@localhost:mysql.sock] [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | SECONDARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | ONLINE | SECONDARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) 在single-master中Secondary节点,会自动设置super_read_only=1;和read_only=1; Secondary: mgr02 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 1 | 1 | +-------------------+-------------+ 1 row in set (0.00 sec) mgr03 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 1 | 1 | +-------------------+-------------+ 1 row in set (0.00 sec) mgr02 [(none)]> show global variables like "%read_only%"; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_read_only | OFF | | read_only | ON | | super_read_only | ON | | transaction_read_only | OFF | +-----------------------+-------+ 4 rows in set (0.00 sec) mgr03 [(none)]> show global variables like "%read_only%"; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_read_only | OFF | | read_only | ON | | super_read_only | ON | | transaction_read_only | OFF | +-----------------------+-------+ 4 rows in set (0.01 sec) Primary: mgr01 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 0 | 0 | +-------------------+-------------+ 1 row in set (0.00 sec) mgr01 [(none)]> show global variables like "%read_only%"; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_read_only | OFF | | read_only | OFF | | super_read_only | OFF | | transaction_read_only | OFF | +-----------------------+-------+ 4 rows in set (0.00 sec) 测试MGR mgr02 [(none)]> create database app01; ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement mgr03 [(none)]> create database app01; ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement mgr01 [(none)]> create database app01; Query OK, 1 row affected (0.02 sec) mgr01 [(none)]> use app01; Database changed mgr01 [app01]> create table t1(id int not null primary key auto_increment,name varchar(64) not null); Query OK, 0 rows affected (0.05 sec) mgr01 [app01]> insert into t1(name) values('zhouwanchun'); mgr01 [app01]> insert into t1(name) values('zhouwanchun'); mgr01 [app01]> insert into t1(name) values('zhouwanchun'); mgr01 [app01]> select * from t1; +----+-------------+ | id | name | +----+-------------+ | 1 | zhouwanchun | | 2 | zhouwanchun | | 3 | zhouwanchun | +----+-------------+ 3 rows in set (0.00 sec) mgr02 [(none)]> select * from app01.t1; +----+-------------+ | id | name | +----+-------------+ | 1 | zhouwanchun | | 2 | zhouwanchun | | 3 | zhouwanchun | +----+-------------+ 3 rows in set (0.00 sec) mgr03 [(none)]> select * from app01.t1; +----+-------------+ | id | name | +----+-------------+ | 1 | zhouwanchun | | 2 | zhouwanchun | | 3 | zhouwanchun | +----+-------------+ 3 rows in set (0.00 sec) 创建业务账号:(Primary) mgr01 [(none)]> create user 'app01'@'10.0.0.%' identified by '123'; mgr01 [(none)]> grant all privileges on *.* to 'app01'@'10.0.0.%'; mgr02 [(none)]> select user,host,plugin from mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | app01 | 10.0.0.% | caching_sha2_password | | mgr | 10.0.0.% | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+ 6 rows in set (0.00 sec) mgr03 [(none)]> select user,host,plugin from mysql.user; +------------------+-----------+-----------------------+ | user | host | plugin | +------------------+-----------+-----------------------+ | app01 | 10.0.0.% | caching_sha2_password | | mgr | 10.0.0.% | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+ 6 rows in set (0.01 sec) 由单写变成多写 MGR single-master到multi-master转换 准备工作: 原来的三个节点全部关闭 [root@mgr01 ~]# mysqladmin -S /data/mysql/3306/sock/mysql.sock -p shutdown [root@mgr02 ~]# mysqladmin -S /data/mysql/3306/sock/mysql.sock -p shutdown [root@mgr03 ~]# mysqladmin -S /data/mysql/3306/sock/mysql.sock -p shutdown 在三个节点my.cnf配置文件中添加: # vim /data/mysql/3306/conf/my.cnf # multi-master loose-group_replication_single_primary_mode = off loose-group_replication_enforce_update_everywhere_checks = on 分别启动三个节点: [root@mgr01 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & [root@mgr02 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & [root@mgr03 ~]# mysqld --defaults-file=/data/mysql/3306/conf/my.cnf & 分别测试一下复制账号是不是可用: # mysql -umgr -p -h10.0.0.31 -P3306 # mysql -umgr -p -h10.0.0.32 -P3306 # mysql -umgr -p -h10.0.0.33 -P3306 mysql> select @@hostname; 第一个节点mgr01(不是必须选择mgr01,也可以用其他节点) [root@mgr01 ~]# mysql -S /data/mysql/3306/sock/mysql.sock -p mgr01 [(none)]> set global group_replication_bootstrap_group = on; mgr01 [(none)]> start group_replication; mgr01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 1 row in set (0.02 sec) mgr01 [(none)]> set global group_replication_bootstrap_group = off; 其他节点(mgr02,mgr03): [root@mgr02 ~]# mysql -S /data/mysql/3306/sock/mysql.sock -p mgr02 [(none)]> start group_replication; mgr02 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 2 rows in set (0.00 sec) [root@mgr03 ~]# mysql -S /data/mysql/3306/sock/mysql.sock -p mgr03 [(none)]> start group_replication; mgr03 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.02 sec) 最终状态: 可以看到三个节点都是Primary的状态 mgr01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) 三个节点都是读写状态 mgr01 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 0 | 0 | +-------------------+-------------+ 1 row in set (0.00 sec) mgr02 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 0 | 0 | +-------------------+-------------+ 1 row in set (0.00 sec) mgr03 [(none)]> select @@super_read_only,@@read_only; +-------------------+-------------+ | @@super_read_only | @@read_only | +-------------------+-------------+ | 0 | 0 | +-------------------+-------------+ 1 row in set (0.00 sec) MGR集群中节点加入 对于一个运行很久的集群,如果需要加入MGR集群成为复制节点,新节点除了需要执行以下: set sql_log_bin = off; set global read_only = off; set global super_read_only = off; alter user user() identified by '123'; create user 'mgr'@'10.0.0.%' identified by '123'; grant replication slave on *.* to 'mgr'@'10.0.0.%'; set sql_log_bin = on; change master to master_user='mgr',master_password='123' for channel 'group_replication_recovery'; install plugin group_replication soname 'group_replication.so'; 使用:start group_replication;已经行不通了。 可以考虑使用mysqldump,Xtrabackup做备份,利用备份把新节点恢复出来。 最重要的设置:gtid_purged,参考《基于gtid复制利用备份建一个新从库方法》 set global gtid_purged = 'xxxxxx'; 然后就可以直接:start group_replication; select * from performance_schema.replication_group_members; 使用Xtrabackup备份恢复的节点不需要执行绿色部分的SQL。 使用mysqldump/mydumper备份恢复的节点需要执行绿色部分的SQL。 mysqldump备份自动包含gtid_purged 1.MGR工作的两种模型: (1).基于single-master环境 在Group Replication配置中,默认的模式是:single-master模式。 在single-master模式中,只有一个节点是可以进行写操作,其他节点是开启着read_only模式。 当主节点挂起,其他节点中会选举出来一个新的new-master,这里面看起来还是主从结构的概念。 在single-master模式中可以利用下面SQL发现谁是主节点: mgr01 [(none)]> select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='group_replication_primary_member'; mgr01 [(none)]> select VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='group_replication_primary_member'; +--------------------------------------+ | VARIABLE_VALUE | +--------------------------------------+ | 25b47e38-b2ee-11e9-85fe-000c297dcffc | +--------------------------------------+ 1 row in set (0.01 sec) [root@mgr01 ~]# cat /data/mysql/3306/data/auto.cnf [auto] server-uuid=25b47e38-b2ee-11e9-85fe-000c297dcffc mgr01 [(none)]> show global variables like "%server_uuid%"; +---------------+--------------------------------------+ | Variable_name | Value | +---------------+--------------------------------------+ | server_uuid | 25b47e38-b2ee-11e9-85fe-000c297dcffc | +---------------+--------------------------------------+ 1 row in set (0.01 sec) 或者 mgr01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | SECONDARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | ONLINE | SECONDARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) (2).基于multi-master环境 该结构不是默认模式,只需要在三个节点配置文件[mysqld]中部分添加: # vim /data/mysql/3306/my.cnf # multi-master loose-group_replication_single_primary_mode = off loose-group_replication_enforce_update_everywhere_checks = on 在该结构中需要注意,在使用中,不能同时在不同节点对同一行数据进行update操作。 如果进行,客户端会收到报错。在使用这个结构时,需要在应用层引入控制。 特别注意:在multi-master结构中group_replication_primary_member为空。 mgr01 [(none)]> select VARIABLE_NAME,VARIABLE_VALUE from performance_schema.global_status where VARIABLE_NAME='group_replication_primary_member'; +----------------------------------+----------------+ | VARIABLE_NAME | VARIABLE_VALUE | +----------------------------------+----------------+ | group_replication_primary_member | | +----------------------------------+----------------+ 1 row in set (0.00 sec) 2.集群重启 集群重启分成两种情况。 (1).滚动重启 节点启动后,执行: start group_replication; 确认状态即可。 (2).全部关闭后(集体掉电) 第一个节点启动(single-master & multi-master都一样) set global group_replication_bootstrap_group = on; start group_replication; 其他节点启动: start group_replication; 3.故障处理 节点在start group_replication;后处于RECOVERING状态。 mgr01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | RECOVERING | SECONDARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | RECOVERING | SECONDARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) mgr01 [(none)]> select * from performance_schema.replication_connection_status\G *************************** 1. row *************************** CHANNEL_NAME: group_replication_applier GROUP_NAME: 3ff8dc74-e421-43eb-add3-abf2671886c5 SOURCE_UUID: 3ff8dc74-e421-43eb-add3-abf2671886c5 THREAD_ID: NULL SERVICE_STATE: ON COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000 RECEIVED_TRANSACTION_SET: 3ff8dc74-e421-43eb-add3-abf2671886c5:1-15 LAST_ERROR_NUMBER: 0 LAST_ERROR_MESSAGE: LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION: 3ff8dc74-e421-43eb-add3-abf2671886c5:15 LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 2019-07-31 05:44:53.625881 LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 2019-07-31 05:44:53.626141 QUEUEING_TRANSACTION: QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 1 row in set (0.00 sec) mgr02 [(none)]> select * from performance_schema.replication_connection_status\G *************************** 1. row *************************** CHANNEL_NAME: group_replication_applier GROUP_NAME: 3ff8dc74-e421-43eb-add3-abf2671886c5 SOURCE_UUID: 3ff8dc74-e421-43eb-add3-abf2671886c5 THREAD_ID: NULL SERVICE_STATE: ON COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000 RECEIVED_TRANSACTION_SET: 3ff8dc74-e421-43eb-add3-abf2671886c5:1-15 LAST_ERROR_NUMBER: 0 LAST_ERROR_MESSAGE: LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION: LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION: QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 *************************** 2. row *************************** CHANNEL_NAME: group_replication_recovery GROUP_NAME: SOURCE_UUID: THREAD_ID: NULL SERVICE_STATE: OFF COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000 RECEIVED_TRANSACTION_SET: LAST_ERROR_NUMBER: 2061 LAST_ERROR_MESSAGE: error connecting to master 'mgr@mgr01:3306' - retry-time: 60 retries: 1 LAST_ERROR_TIMESTAMP: 2019-07-31 06:19:44.073179 LAST_QUEUED_TRANSACTION: LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION: QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 2 rows in set (0.00 sec) mgr03 [(none)]> select * from performance_schema.replication_connection_status\G *************************** 1. row *************************** CHANNEL_NAME: group_replication_applier GROUP_NAME: 3ff8dc74-e421-43eb-add3-abf2671886c5 SOURCE_UUID: 3ff8dc74-e421-43eb-add3-abf2671886c5 THREAD_ID: NULL SERVICE_STATE: ON COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000 RECEIVED_TRANSACTION_SET: 3ff8dc74-e421-43eb-add3-abf2671886c5:1-15 LAST_ERROR_NUMBER: 0 LAST_ERROR_MESSAGE: LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION: LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION: QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 *************************** 2. row *************************** CHANNEL_NAME: group_replication_recovery GROUP_NAME: SOURCE_UUID: THREAD_ID: NULL SERVICE_STATE: OFF COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00.000000 RECEIVED_TRANSACTION_SET: LAST_ERROR_NUMBER: 2061 LAST_ERROR_MESSAGE: error connecting to master 'mgr@mgr01:3306' - retry-time: 60 retries: 1 LAST_ERROR_TIMESTAMP: 2019-07-31 06:20:47.614480 LAST_QUEUED_TRANSACTION: LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION: QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP: 0000-00-00 00:00:00.000000 QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP: 0000-00-00 00:00:00.000000 2 rows in set (0.01 sec) 解决办法,使用mgr账号在客户端去连接登录一下: # mysql -umgr -p -h10.0.0.31 -P3306 # mysql -umgr -p -h10.0.0.32 -P3306 # mysql -umgr -p -h10.0.0.33 -P3306 stop group_replication; start group_replication; 然后再来查看MGR状态 mgr01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 957071cc-7031-11ea-81ba-000c2984a5b2 | mgr01 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bb0eed1f-7031-11ea-b8be-000c292c6112 | mgr02 | 3306 | ONLINE | PRIMARY | 8.0.18 | | group_replication_applier | bcf37e71-7031-11ea-89f0-000c2989dd62 | mgr03 | 3306 | ONLINE | PRIMARY | 8.0.18 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec)
大纲 MGR整体架构及特点 MGR数据如何实现数据同步 MGR数据复制冲突解决 MGR数据复制流控 MGR监控点 MGR优化方向 MGR部署架构建议 并行复制(group commit)writeset 增强半同步 MGR架构特点: MGR一致性读增强 group_replication_consistency(8.0.14引入) eventual 默认 before 等待队列中的事务全部执行完 before_on_primary_failover 等待新primary执行完队列中事务 after 等待数据变更在其他所有节点全部被应用 before_and_after MGR限制: 仅支持InnoDB,必须有主键。 binlog格式:row,关闭binlog_checksum 必须开启gtid 事务隔离级别:read committed(RC) 大事务限制:group_replication_transaction_size_limit multi-master模式:避免相同表上不同节点并发执行DDL/DML(集群会崩的) 集群最大节点数:9(建议是奇数) MGR数据复制流程 事务认证 冲突检测 事务组提交 echo c12|md5sum 问题:对于高速写入的系统certification_info会越来越大,性能会越来越差? 处理办法:certification_info引入清理机制。 流控的目的: 保证集群延迟可控(对于只读事务不在流控范围内) 出现流控原因 各节点性能不一致。 木桶短板效应。 db01 [(none)]> show global variables like "%flow%"; +-----------------------------------------------------+-------+ | Variable_name | Value | +-----------------------------------------------------+-------+ | group_replication_flow_control_applier_threshold | 25000 | | group_replication_flow_control_certifier_threshold | 25000 | | group_replication_flow_control_hold_percent | 10 | | group_replication_flow_control_max_quota | 0 | | group_replication_flow_control_member_quota_percent | 0 | | group_replication_flow_control_min_quota | 0 | | group_replication_flow_control_min_recovery_quota | 0 | | group_replication_flow_control_mode | QUOTA | | group_replication_flow_control_period | 1 | | group_replication_flow_control_release_percent | 50 | +-----------------------------------------------------+-------+ 10 rows in set (0.02 sec) 参数: group_replication_flow_control_mode 默认为:quota开启流控 group_replication_flow_control_period 多久进行一次流控统计,单位:秒 group_replicatioa_flow_control_applier_threshold 和 group_replicatioa_flow_control_certifier_threshold 事务认证队列中积累超过多少个待认证的事务才触发节点流控。 MGR监控点 desc performance_schema.replication_connection_status; show master status; select @@gtid_executed; desc performance_schema.replication_group_member_stats; MGR优化方向: 运维上: 因为是基本复制结构,所有的数据复制,还是逻辑的重放,所以优化也是复制优化点。 更改:slave_parallel_type ---> logical_clock 增强sql_thread个数: slave_parallel_workers ---> 2-8 如果cpu瓶颈,网络没问题,减少cpu压缩: group_replication_compression_threshold = 1000000 ---> 2000000 由原来的1M变成2M,再进行压缩(主要针对大事务传输优化) 对于写入量比较大的环境 使用single-master 表结构设计上:减少索引数量,多使用联合索引 内核上: 可以尝试: 为了性能:single-master 使用方便:multi-master db01 [(none)]> select * from performance_schema.replication_group_members; +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ | group_replication_applier | 9a53a334-ea7f-11e9-ac6d-000c29a86f2f | db01 | 3306 | ONLINE | PRIMARY | 8.0.16 | | group_replication_applier | 9cd973c2-ea7f-11e9-8e30-000c290bb530 | db02 | 3306 | ONLINE | PRIMARY | 8.0.16 | | group_replication_applier | 9ef3bb8e-ea7f-11e9-b1ab-000c29427d09 | db03 | 3306 | ONLINE | PRIMARY | 8.0.16 | +---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+ 3 rows in set (0.00 sec) db01 [(none)]> select * from performance_schema.replication_connection_status; +---------------------------+--------------------------------------+--------------------------------------+-----------+---------------+---------------------------+----------------------------+-------------------------------------------+-------------------+--------------------+----------------------------+-----------------------------------------+---------------------------------------------------+----------------------------------------------------+-----------------------------------------------+---------------------------------------------+----------------------+------------------------------------------------+-------------------------------------------------+--------------------------------------------+ | CHANNEL_NAME | GROUP_NAME | SOURCE_UUID | THREAD_ID | SERVICE_STATE | COUNT_RECEIVED_HEARTBEATS | LAST_HEARTBEAT_TIMESTAMP | RECEIVED_TRANSACTION_SET | LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE | LAST_ERROR_TIMESTAMP | LAST_QUEUED_TRANSACTION | LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP | LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP | LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP | LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP | QUEUEING_TRANSACTION | QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP | QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP | QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP | +---------------------------+--------------------------------------+--------------------------------------+-----------+---------------+---------------------------+----------------------------+-------------------------------------------+-------------------+--------------------+----------------------------+-----------------------------------------+---------------------------------------------------+----------------------------------------------------+-----------------------------------------------+---------------------------------------------+----------------------+------------------------------------------------+-------------------------------------------------+--------------------------------------------+ | group_replication_applier | 3ff8dc74-e421-43eb-add3-abf2671886c5 | 3ff8dc74-e421-43eb-add3-abf2671886c5 | NULL | ON | 0 | 0000-00-00 00:00:00.000000 | 3ff8dc74-e421-43eb-add3-abf2671886c5:1-16 | 0 | | 0000-00-00 00:00:00.000000 | 3ff8dc74-e421-43eb-add3-abf2671886c5:16 | 0000-00-00 00:00:00.000000 | 0000-00-00 00:00:00.000000 | 2019-10-10 09:27:19.571035 | 2019-10-10 09:27:19.571162 | | 0000-00-00 00:00:00.000000 | 0000-00-00 00:00:00.000000 | 0000-00-00 00:00:00.000000 | +---------------------------+--------------------------------------+--------------------------------------+-----------+---------------+---------------------------+----------------------------+-------------------------------------------+-------------------+--------------------+----------------------------+-----------------------------------------+---------------------------------------------------+----------------------------------------------------+-----------------------------------------------+---------------------------------------------+----------------------+------------------------------------------------+-------------------------------------------------+--------------------------------------------+ 1 row in set (0.00 sec) db01 [(none)]> select * from performance_schema.replication_group_member_stats; +---------------------------+---------------------+--------------------------------------+-----------------------------+----------------------------+--------------------------+------------------------------------+-------------------------------------------+--------------------------------+--------------------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+ | CHANNEL_NAME | VIEW_ID | MEMBER_ID | COUNT_TRANSACTIONS_IN_QUEUE | COUNT_TRANSACTIONS_CHECKED | COUNT_CONFLICTS_DETECTED | COUNT_TRANSACTIONS_ROWS_VALIDATING | TRANSACTIONS_COMMITTED_ALL_MEMBERS | LAST_CONFLICT_FREE_TRANSACTION | COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE | COUNT_TRANSACTIONS_REMOTE_APPLIED | COUNT_TRANSACTIONS_LOCAL_PROPOSED | COUNT_TRANSACTIONS_LOCAL_ROLLBACK | +---------------------------+---------------------+--------------------------------------+-----------------------------+----------------------------+--------------------------+------------------------------------+-------------------------------------------+--------------------------------+--------------------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+ | group_replication_applier | 15706707695283825:3 | 9a53a334-ea7f-11e9-ac6d-000c29a86f2f | 0 | 0 | 0 | 0 | 3ff8dc74-e421-43eb-add3-abf2671886c5:1-16 | | 0 | 2 | 0 | 0 | | group_replication_applier | 15706707695283825:3 | 9cd973c2-ea7f-11e9-8e30-000c290bb530 | 0 | 0 | 0 | 0 | 3ff8dc74-e421-43eb-add3-abf2671886c5:1-16 | | 0 | 1 | 0 | 0 | | group_replication_applier | 15706707695283825:3 | 9ef3bb8e-ea7f-11e9-b1ab-000c29427d09 | 0 | 0 | 0 | 0 | 3ff8dc74-e421-43eb-add3-abf2671886c5:1-16 | | 0 | 0 | 0 | 0 | +---------------------------+---------------------+--------------------------------------+-----------------------------+----------------------------+--------------------------+------------------------------------+-------------------------------------------+--------------------------------+--------------------------------------------+-----------------------------------+-----------------------------------+-----------------------------------+ 3 rows in set (0.01 sec)