MySQL-MGR(三)单主/多主模式切换

实验演示规划:(3台虚拟机,MySQL版本为8.0.25)

  • 192.168.168.101 master1(简称1节点)

  • 192.168.168.102 slave2   (简称2节点)

  • 192.168.168.103 slave3   (简称3节点)

在 MGR 中,单主模式是只有一个主节点可以写,其余均为只读节点,且只读节点的 super read only 为打开状态,即使 root 用户依然无法写。多主模式则为全节点均可写。


01单主切多主

MGR 单切多使用的命令为:

select group_replication_switch_to_multi_primary_mode();

首先我们观察当前集群的模式和各个节点的读写模式:

select * from performance_schema.replication_group_members;show variables like '%read_only%';

1节点:

 

 2节点:

 

 3节点:

 

 

可以看到,各个节点的读写模式是符合单主模式的。

接下来我们在任意节点执行切换语句,此处我们在节点 1 上执行。


select group_replication_switch_to_multi_primary_mode();

 

 可以看到节点 1 因为一开始就是主节点,所以读写模式没有发生变化,但是节点 2 和节点 3 已经自动关闭了只读模式,所有节点都变成可写。

 

 

多主切单主

MRG 多主切单主有两条命令可以使用。

不指定主节点进行切换。

select group_replication_switch_to_single_primary_mode();

MGR 中多主切单主,如果不指定主,切换时遵循以下的规则,前提无延迟情况下,按照优先级先后顺序:

1.先检查集群内是否存在低版本的MySQL,如果所有成员都是 8.0.17 版本以上的,则按照补丁先后顺序排列,如果有成员是 8.0.17 版本以下或者 5.7版本 的,按发行版本的主要版本来排序,忽略补丁编号。

2.如果集群有任意一个低版本的MySQL,且支持 group_replication_member_weight 这个参数,则根据 group_replication_member_weight 这个权重参数来,group_replication_member_weight。

默认都是 50,权重越高优先级越高。

3.如果集群内有不支持 group_replication_member_weight 参数的MySQL,比如MySQL5.7,并且其中一个以上的成员具有最高的成员权重(或忽略了成员权重),则考虑的第三个因素是生成的服务器 UUID 的词典顺序,由 server_uuid 系统变量指定。

服务器 UUID 最低的成员被选为主服务器,这里实际上就是查询 performance_schema.replication_group_members 最靠前的且是活着的MEMBER_ID。

在节点 1 上执行非指定单主的切换 SQL:

 

 

可以看到选取了 server_uuid 靠前的节点1成为主节点。

接下来我们观察各个节点的读写情况:

1节点:

 

 2节点:

 

 3节点:

 

 

可以看到此时节点 1 作为主节点已经关闭了read only,其他节点都已经打开了只读。


03指定单主切换

因为随机切有很大的不确定性,这里还提供了指定主节点的切换命令:

select group_replication_set_as_primary("member_id");

这里的 member_id 就是 server_uuid,我们在节点 1 执行切换命令,选择2节点的member_id。

切换后,可以看到节点1打开了只读变成了从节点

 

 节点2,关闭了只读,成为主节点:

 

 节点3,不变:

 

 文章引用自数据和云公众号

posted @ 2022-01-29 16:41  Cetus-Y  阅读(724)  评论(0编辑  收藏  举报