暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

MySQL高可用--MGR入门(3)单主多主模式切换

原创 陈家睿 2021-11-19
9530

实验演示规划

(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 用户依然无法写。多主模式则为全节点均可写。


单主切多主

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 这个参数的版本的mysql。则根据 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,其他节点都已经打开了只读。


指定单主切换

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

select group_replication_set_as_primary("member_id");

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

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

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

节点3,不变




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
1人已赞赏
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论