最近开始学习MGR架构,但是不知道哪里有系统的介绍MGR的学习地方。所以就想到了最笨的办法,看官方文档。也就想到了做一个跟着文档学习MGR的笔记。这里很多内容是看文档做的翻译,如果有不正确或不严谨的地方请谅解

从MySQL 8.0.26
开始GR集群可以设置成员在特定情况下执行某些动作。成员行为(member actions
)可以通过函数管理开启/关闭。还可以让成员在离开集群时的动作设置为重置为默认值。
配置该选项需要有GROUP_REPLICATION_ADMIN
权限才可以进行配置。dba可以在集群的Primary 节点 上使用group_replication_enable_member_action 或者 group_replication_disable_member_action
函数设置成员的动作.在使用了该函数后,GR集群会将其当做组消息处理发送到其他成员和加入集群的节点(内容包括:所有节点的动作(actions
)和是enabled
还是 disabled
).因此所有的成员的动作是一样的.
这个成员函数(member actions
)也可以作用在GR集群以外的节点,只要安装了 Group Replication plugin
.但是这样就不会将动作传给其他成员了。
如果想使用这些组函数的节点是组中的一部分,在Single-Primary
模式下必须是Primary
节点,且还需要等到超过半数投票的同意。这个配置是GR集群内部的他不会分配GTID.所以不会写到binary log
中,也就不会传到外部复制中。在每次diabled
和enabled
后都会增加配置版本号
配置发送的流程
当启动集群时,集群引导节点的节点函数配置( the member actions configuration
)将是集群的配置当集群节点的所有版本都支持这个组函数的配置,在有新的节点加入集群交换信息时会收到集群发送来的 组函数配置,这时,新节点会将接收到的配置作为自己的配置 当集群的部分节点不支持这个组函数配置时,节点加入集群则不会受到集群发送来的组函数配置。那新加入节点将使用自己的配置作为默认值。
注意:一个不支持 member actions
的节点无法加入一个已经配置了 member actions
的集群。
查询 member actions
信息
在 Performance_Schema. replication_group_member_actions
表中记录了member action
的信息:有哪些event
,是否启用, 还有优先级(priority
:从1-100,数字越小优先级越高)。如果节点在执行member actions
时报错了,会被记录下来(ERROR_HANDLING
列)但是一般可以忽略(状态为IGNORE
)。但是当出现为CRITICAL
状态时则需要设置group_replication_exit_state_action
来处理了
Performance_Schema.replication_group_configuration_version. 这张表记录了这个节点的
member actions configuration的版本。每当
member actions发生
disabled和
enabled都会增加
函数介绍
group_replication_reset_member_actions这个函数只能用在不是GR集群中一员的时候使用。他可以重置节点的
member actions
的配置。并且使version
重置为1;
执行该函数的节点必须是可写(read_only=off
)并且安装了Group Replication plugin
. 一般使用的场景有:想重置一个节点的 member actions
,但必须离开GR集群建立一个没有 membere actions
的独立服务
使用group_replication_reset_member_actions
SELECT group_replication_reset_member_actions();
mysql_disable_super_read_only_if_primary这个函数可以让
Single-Primary
模式的集群在选出新主时状态为super_read_only=on
; 以便让集群只进行replicated transactions
事务(追平事务)而不接收来自客户端新的写请求。使用的场景可以是:当一个集群(A)的主要目的是向另一个组(B)提供辅助备份实现容灾效果,确保(B) 和A组的数据同步
默认情况下 在选举后super_read_only
是关闭的,这样新主就可以接收来自客户端的read-write
请求。
配置集群Action方法
如果想关闭mysql_disable_super_read_only_if_primary,
节点必须处于super_read_only=off
--- 禁用
mysql> SELECT group_replication_disable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION");
mysql> select * from performance_schema.replication_group_member_actions where name='mysql_disable_super_read_only_if_primary';
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| name | event | enabled | type | priority | error_handling |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| mysql_disable_super_read_only_if_primary | AFTER_PRIMARY_ELECTION | 0 | INTERNAL | 1 | IGNORE |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
1 row in set (0.00 sec)
--- 开启
mysql> SELECT group_replication_enable_member_action("mysql_disable_super_read_only_if_primary", "AFTER_PRIMARY_ELECTION");
mysql> select * from performance_schema.replication_group_member_actions where name='mysql_disable_super_read_only_if_primary';
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| name | event | enabled | type | priority | error_handling |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
| mysql_disable_super_read_only_if_primary | AFTER_PRIMARY_ELECTION | 1 | INTERNAL | 1 | IGNORE |
+------------------------------------------+------------------------+---------+----------+----------+----------------+
1 row in set (0.00 sec)
References
[1]
思维导图:Configuring Member Actions: https://www.zhixi.com/view/569a6f83




