MYSQL--MGR集群节点探测学习

MGR集群节点探测学习

参数学习

group_replication_unreachable_majority_timeout
参数取值:  0-31536000
参数单位:  次数
默认值:    0
参数含义:    指定受网络分区影响而无法连接到大多数的成员在离开组之前等待的秒数。默认情况下,group_replication_unreachable_majority_timeout设置为0,这意味着由于网络分区而处于少数的成员将永远等待离开该组。如果设置超时,当指定的时间过期时,少数派处理的所有挂起事务将回滚,少数派分区中的服务器将移动到错误状态。如果一个成员将group_replication_autorejoin_tries系统变量设置为指定自动重新联接尝试的次数,那么在超级只读模式下,它将继续执行指定次数的重新联接尝试。如果该成员没有指定任何自动重新连接尝试,或者如果它已经耗尽了指定的尝试次数,则遵循系统变量group_replication_exit_state_action指定的操作。


group_replication_member_expel_timeout
参数取值:  0-3600
参数单位:  秒
默认值:    5秒
参数含义:    组复制组成员在产生怀疑后等待的时间(以秒为单位),然后将怀疑失败的成员从组中驱逐出去。在怀疑产生之前的最初5秒的检测周期不计入此时间。更改某个组成员上的group_replication_member_expel_timeout的值将立即对该组成员的现有和将来的怀疑生效。并不是强制要求组中的所有成员都具有相同的设置,但是建议这样做,以避免意外的驱逐。



group_replication_autorejoin_tries
参数取值:  0-2016
参数单位:  次数
默认值:    3
参数含义:    指定如果成员被开除,或者在到达group_replication_unreachable_majority_timeout设置之前无法联系到组中的大多数成员,则该成员自动重新加入组的尝试次数。默认设置0表示成员不尝试重新连接,并继续执行group_replication_exit_state_action系统变量指定的操作。


group_replication_exit_state_action
参数取值:	READ_ONLY、OFFLINE_MODE、ABORT_SERVER
默认值:	  ABORT_SERVER
配置服务器实例无意中离开组时的组复制行为,例如遇到applier错误,或者丢失了大多数,或者组中的另一个成员由于怀疑超时而将其驱逐。在失去多数的情况下,成员离开组的超时时间由group_replication_unreachable_majority_timeout系统变量设置,怀疑的超时时间由group_replication_member_expel_timeout系统变量设置。请注意,被开除的组成员直到重新连接到组时才知道自己被开除了,因此,只有在该成员设法重新连接或该成员对自己产生怀疑并将自己开除时,才会采取指定的操作。
参数可选值:
1、READ_ONLY: 如果成员无意中退出了组或耗尽了它的自动重新加入尝试,实例将MySQL切换为超级只读模式(通过将系统变量super_read_only设置为ON)。
2、OFFLINE_MODE:如果成员无意中退出了组或耗尽了自动重新加入的尝试,则实例将MySQL切换到离线模式(通过将系统变量OFFLINE_MODE设置为ON)。在此模式下,已连接的客户端用户在下一个请求时断开连接,不再接受连接,只有具有CONNECTION_ADMIN或超级特权的客户端用户例外。组复制还将系统变量super_read_only设置为ON,因此客户机不能进行任何更新,即使它们已经连接了超级特权。OFFLINE_MODE退出操作在MySQL 8.0.18中可用。
3、ABORT_SERVER:如果成员无意中退出了组或耗尽了自动重新加入尝试,则实例将关闭MySQL。当系统变量被添加到MySQL 8.0.12时,这个设置是默认的,MySQL 8.0.15包含了这个设置。

场景学习

假设有三节点集群,集群节点分别为A和B和C:

  • 集群节点会按照每秒1次(硬编码值)的频率向集群其他节点发送心跳信息,如果节点A在5秒(硬编码值)内未收到节点B的心跳信息,则节点A会将节点B标记为UNREACHABLE。

此时节点C的网络发生异常,与节点A和节点B断开连接,经过5秒心跳检测失败后:

  • 节点C未收到节点A和节点B的心跳信息,在节点C的状态表中将节点A和节点B分别标记为UNREACHABLE,由于节点C只有1票,成为少数派。
  • 节点A和节点B未收到节点C的新表信息,在节点A和节点B的状态表中将节点C标记为UNREACHABLE,由于节点A和节点B有2票,成为多数派。

对于多数派的节点A和节点B,在将节点B标记为UNREACHABLE后,在group_replication_member_expel_timeout参数指定的时间内:

  • 如果与节点C连接恢复,则和节点C进行数据同步和将其加入集群。
  • 如果与节点C连接异常,则将节点C踢出集群。

对于少数票节点C,在将节点A和节点B标记为UNREACHABLE后,按照参数group_replication_unreachable_majority_timeout指定的N秒:

  • 如果N=0,则节点C将自身节点标记为ONLINE状态,将节点A和节点B标记为UNREACHABLE状态,直到网络恢复。
  • 如果N>0,则节点C在等待N秒后:
    • 如果与节点A和节点B连接恢复,则与节点A和节点B进行数据同步和加入集群。
    • 如果与节点A和节点B连接异常,则将自身节点C标记为ERROR,并按照group_replication_autorejoin_tries参数设置尝试加入集群,超过指定次数后按照group_replication_exit_state_action参数来操作。

推荐参数

group_replication_member_expel_timeout=30
group_replication_unreachable_majority_timeout=35
group_replication_autorejoin_tries=3
group_replication_exit_state_action="OFFLINE_MODE"

参考资料

MGR网络抖动问题分析
MySQL MGR参数说明
MGR组复制常见问题

posted @ 2023-06-21 19:54  TeyGao  阅读(196)  评论(0编辑  收藏  举报