MGR架构测试

1.测试节点

节点一、10.2.83.133 (primary)

节点二、10.2.83.140(second)

节点三、10.2.83.141(second)

2.测试情形--单主

2.1 关闭防火墙

10.2.83.140节点开启防火墙

可以测试到该节点变为unreachable,当关闭防火墙,无法立刻加入集群,等了不知道多久自己恢复了,还需要再测试

 

日志报错

 在开启防火墙的状态进行start GROUP_REPLICATION; 日志报错如下

2.2 关掉节点二、三确认只有单节点一是否可以使用(正常的关闭数据库, 或者执行了start group_replication)

节点一写存储过程,不停向节点一insert数据

如下insert存储过程

BEGIN
DECLARE num int ;
set num=1;
while num <10000000 DO
insert into t1 (name) values ('test1_t1_malong56');
set num=num+1;
end while;
END

调用存储过程

call proc_t1

节点二、三执行: systemctl stop mysqld

1>> 确认只有节点一可以正常读写。符合MGR允许最大故障数:f=(n-1)/2  三台只要一台存活就可以继续访问

2>> 节点二三重新启动, systemctl start mysqld  ,执行start group_replication;

可以发现状态为:recovering

group_replication_applier | a1cfaf71-5e1a-11ec-9d8a-005056a6b4be | node2       |        3306 | RECOVERING   | SECONDARY   | 8.0.20

查看有多少事务等待恢复,即确认主从延迟,说明有28692个事物等待同步,待变为online就为正常了

mysql> select COUNT_TRANSACTIONS_IN_QUEUE,LAST_CONFLICT_FREE_TRANSACTION from performance_schema.replication_group_member_stats where MEMBER_ID=@@server_uuid;
+-----------------------------+--------------------------------+
| COUNT_TRANSACTIONS_IN_QUEUE | LAST_CONFLICT_FREE_TRANSACTION |
+-----------------------------+--------------------------------+
| 28692 | |
+-----------------------------+--------------------------------+

 2.3 当服务器异常宕机或者数据库由于oom等异常退出,网络断线等

两个节点可以正常读写

一个节点就会变为只读

2.4 测试关掉节点一,primary节点是否可以正常切换

1>> 节点一执行: systemctl stop mysqld

确认:primary节点切换到了节点三

 

 

 

 

 

2>> 原来的节点一重新启动,

systemctl start mysqld  ,执行start group_replication;

可以发现状态为:recovering,且角色为:SECONDARY

 

 

2.4 加入脱离组

2.4.1 已有数据节点加入组

1>>  如果新增节点A落后数据很少,可以直接 START GROUP_REPLICATION; 加入组

2>> 如果新增节点A落后数据很多,则需要先选择任意一个组内节点作为master开启复制

CHANGE MASTER TO MASTER_HOST='ip',MASTER_PORT=port,MASTER_USER='replication',MASTER_PASSWORD='***',MASTER_AUTO_POSITION=1;
追上后直接START GROUP_REPLICATION; 加入组

3>> 查看是否成功加入组

SELECT * FROM performance_schema.replication_group_members\G;

查看 MEMBER_STATE 值是否为 ONLINE

 

2.4.2 通过备份加入组

场景:全新新节点加入,通过异步复制的方式先把数据导入再加入集群

步骤1:在主节点进行全备(也可以采用xbk备份)

mysqldump -uroot -p'1qaz@WSX' -S /flex/mysql/data/mysql3306/tmp/mysql.sock  --single-transaction --triggers --set-gtid-purged=OFF --routines --events --master-data=2 -A  |gzip > /tmp/all.sql.gz

 步骤2:从节点建立数据库,并把其他second节点的配置文件复制一份到新建的库,启动服务器

建库步骤略

步骤3:新建从节点导入数据

source /tmp/all.sql

步骤4:加入集群

set sql_log_bin=0;

reset master;

set global super_read_only=0;
set global read_only=0;
create user 'rpl_mgr'@'%' identified by '123456';
grant replication slave on *.* to 'rpl_mgr'@'%';
ALTER USER rpl_mgr@'%' IDENTIFIED WITH mysql_native_password BY '123456';
set sql_log_bin=1;
change master to master_user='rpl_mgr', master_password='123456' for channel 'group_replication_recovery';
install plugin group_replication soname 'group_replication.so';
show plugins;
set global slave_preserve_commit_order=on;
start group_replication;

SELECT * FROM performance_schema.replication_group_members\G;

 

 

2.4.3 通过组复制克隆来进行加入集群(测试下来速度较快)

场景:全新新节点加入,通过异步复制的方式先把数据导入再加入集群

 步骤1:从节点建立数据库,并把其他second节点的配置文件复制一份到新建的库,启动服务器

建库步骤略

步骤2:贡献者端执行(10.2.83.133):
CREATE USER 'donor_clone_user'@'%' IDENTIFIED BY '123456';
GRANT BACKUP_ADMIN on *.* to 'donor_clone_user'@'%';
INSTALL PLUGIN clone SONAME 'mysql_clone.so';

3.接收者端执行(10.2.83.141):
CREATE USER 'recipient_clone_user'@'%' IDENTIFIED BY '123456';
GRANT CLONE_ADMIN on *.* to 'recipient_clone_user'@'%';
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
INSTALL PLUGIN clone SONAME 'mysql_clone.so';
SET GLOBAL clone_valid_donor_list = '10.2.83.133:3306';
mysql -urecipient_clone_user -p123456 -h 10.2.83.141
CLONE INSTANCE FROM 'donor_clone_user'@'10.2.83.133':3306 IDENTIFIED BY '123456';

加入组复制:

mysql> START GROUP_REPLICATION;
mysql> select * from performance_schema.replication_group_members; 查看集群状态

 

posted @ 2022-01-25 12:08  学的都会  阅读(112)  评论(0编辑  收藏  举报