group_replication_exit_state_action
系统变量指定当成员由于错误或问题意外离开组时,并且无法自动重新加入或未尝试加入时,组复制的执行操作。请注意,在成员被驱逐的情况下,该成员直到重新连接到组之前才会知道它被驱逐,因此只有在成员设法重新连接或成员对自身产生怀疑并自行驱逐时,才会执行指定的动作。
根据影响程度,退出操作的顺序如下。
如果
READ_ONLY
是退出操作,则实例通过将系统变量super_read_only
设置为ON
来将 MySQL 切换到超级只读模式。当成员处于超级只读模式时,客户端无法进行任何更新,即使它们拥有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)。但是,客户端仍然可以读取数据,并且由于不再进行更新,因此随着时间的推移,可能会出现陈旧读取的概率。因此,使用此设置,您需要主动监控服务器以查找故障。此退出操作是默认操作;采取此操作后,该成员的状态在组的视图中显示为ERROR
。如果
OFFLINE_MODE
是退出操作,则实例通过将系统变量offline_mode
设置为ON
来将 MySQL 切换到离线模式。当成员处于离线模式时,连接的客户端用户会在其下一个请求中断开连接,并且不再接受连接,但拥有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)的客户端用户除外。组复制还将系统变量super_read_only
设置为ON
,因此客户端无法进行任何更新,即使它们使用CONNECTION_ADMIN
或SUPER
权限连接。此退出操作可以防止更新和陈旧读取(拥有上述权限的客户端用户的读取除外),并使 MySQL 路由器等代理工具能够识别服务器不可用并将客户端连接重定向。它还使实例保持运行状态,以便管理员可以尝试解决问题,而无需关闭 MySQL。采取此退出操作后,该成员的状态在组的视图中显示为ERROR
(而不是OFFLINE
,这意味着成员具有可用的组复制功能,但当前不属于任何组)。如果
ABORT_SERVER
是退出操作,则实例将关闭 MySQL。指示成员自行关闭可以防止所有陈旧读取和客户端更新,但这意味着 MySQL 服务器实例不可用,必须重新启动,即使问题可能无需重启即可解决。采取此退出操作后,该成员将从组的视图中的服务器列表中删除。
请记住,无论设置了哪个退出操作,都需要操作员干预,因为已耗尽自动重新加入尝试(或从未尝试过)并已被驱逐出组的前成员,如果不重新启动组复制,则不允许重新加入。退出操作仅影响客户端是否仍然可以在无法重新加入组的服务器上读取数据,以及服务器是否保持运行状态。
如果在成员成功加入组之前发生故障,则 group_replication_exit_state_action
指定的退出操作不会执行。如果在本地配置检查期间发生故障,或者加入成员的配置与组的配置不匹配,就会出现这种情况。在这些情况下,super_read_only
系统变量保留其原始值,服务器不会关闭 MySQL。为了确保服务器在组复制未启动时无法接受更新,我们建议在服务器启动时在服务器的配置文件中设置 super_read_only=ON
,组复制在成功启动后会将其更改为 OFF
,这是主成员的操作。当服务器配置为在服务器启动时启动组复制 (group_replication_start_on_boot=ON
) 时,此保护措施尤其重要,但当使用 START GROUP_REPLICATION
语句手动启动组复制时,它也很有用。
如果在成员成功加入组后发生故障,则会执行指定的退出操作。在以下情况下会出现这种情况。
应用器错误 - 复制应用器中出现错误。此问题无法恢复。
分布式恢复不可用 - 存在问题导致 Group Replication 的分布式恢复过程(使用远程克隆操作和二进制日志的状态传输)无法完成。Group Replication 会在有意义的情况下自动重试分布式恢复,但如果无法完成该过程,则会停止。有关详细信息,请参阅 第 20.5.4.4 节,“分布式恢复的容错性”。
组配置更改错误 - 使用函数执行组范围的配置更改时发生错误,如 第 20.5.1 节,“配置在线组” 所述。
主节点选举错误 - 在单主模式下为组选举新的主节点成员时发生错误,如 第 20.1.3.1 节,“单主模式” 所述。
无法访问多数节点超时 - 该成员已与大多数组成员失去联系,因此处于少数节点状态,并且由
group_replication_unreachable_majority_timeout
系统变量设置的超时时间已过期。成员被逐出组 - 对该成员提出了怀疑,并且由
group_replication_member_expel_timeout
系统变量设置的任何超时时间都已过期,并且该成员已恢复与组的通信并发现它已被逐出。自动重新加入尝试次数不足 -
group_replication_autorejoin_tries
系统变量设置为指定在失去多数节点或被逐出后进行的自动重新加入尝试次数,并且该成员已完成此次数的尝试但未成功。
下表总结了每个情况下的故障场景和操作。
表 20.3 Group Replication 故障情况下的退出操作
故障情况 |
使用 |
使用 |
---|---|---|
成员的本地配置检查失败 加入成员与组配置之间不匹配 |
MySQL 继续运行 在启动时设置 |
MySQL 继续运行 在启动时设置 |
成员上的应用器错误 分布式恢复不可用 组配置更改错误 主节点选举错误 无法访问多数节点超时 成员被逐出组 自动重新加入尝试次数不足 |
或
或 MySQL 关闭 |
或
或 MySQL 关闭 |