该 group_replication_exit_state_action
系统变量指定了当成员由于错误或问题而意外离开组时,并且未尝试自动重新加入或未尝试时,组复制应该执行的操作。请注意,在被驱逐的成员的情况下,该成员直到重新连接到组后才会知道它被驱逐,因此只有在该成员成功重新连接或怀疑自身并驱逐自身时,才会执行指定的操作。
按影响顺序,退出操作如下
如果
READ_ONLY
是退出操作,则该实例将 MySQL 切换到超级只读模式,方法是将系统变量super_read_only
设置为ON
。当成员处于超级只读模式时,客户端无法进行任何更新,即使它们具有CONNECTION_ADMIN
权限(或已弃用的SUPER
权限)。但是,客户端仍然可以读取数据,并且由于不再进行更新,因此存在数据陈旧的可能性,这种可能性会随着时间的推移而增加。因此,使用此设置时,您需要主动监控服务器以查找故障。此退出操作是默认操作;在采取此操作后,成员的状态在组的视图中显示为ERROR
。如果
OFFLINE_MODE
是退出操作,则该实例将 MySQL 切换到脱机模式,方法是将系统变量offline_mode
设置为ON
。当成员处于脱机模式时,连接的客户端用户将在其下次请求时断开连接,并且不再接受连接,但具有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 关闭 |