作者:Nuno Carvalho 译:徐轶韬
通过群组复制,用户可以将系统状态复制到一组服务器来创建具有冗余性的容错系统。即使某些服务器发生故障,只要不是全部或大多数的情况下,该系统仍然持续可用。 这篇博客将重点讨论发生故障的服务器(脱离群组的情况),即通过配置群组,防止发生故障后,服务器仍接受客户端请求。
遇到下列情况时,群组成员会离开群组:
- 遇到SQL回放错误后;
- 遇到恢复错误后;
- 在失去大多数成员的情况下(如果group_replication_unreachable_majority_timeout不为0);
- 当被群组其它成员怀疑超时而被驱逐时;
- 在协调群组更改发生错误后;
- 在选举主要成员发生错误后;
- 启用自动加入功能,尝试次数耗尽。
退出群组后失败成员的行为通过选项group_replication_exit_state_action控制。
8.0.17之前,该成员的行为包括:
- READ_ONLY禁用服务器上的写操作(默认值);
- ABORT_SERVER关闭服务器。
在8.0.18上,我们添加了:
- OFFLINE_MODE关闭所有连接,并禁止没有CONNECTION_ADMIN或SUPER权限的用户建立新的连接。此模式包含READ_ONLY,否则具有CONNECTION_ADMIN或SUPER权限的用户将能进行永远无法到达群组的更改。
这三种行为使DBA可以自定义发生故障的服务器的动作,在严重的情况下可以保证系统正常运行。例如,在所有成员因为内部网络故障而变得无法访问的情况下,所有成员将遵循配置的行为。
如果DBA使用READ_ONLY,则只能阻止写入。使用OFFLINE_MODE阻止所有操作;甚至使用ABORT_SERVER完全停止服务器。
当配置为group_replication_exit_state_action = OFFLINE_MODE的故障服务器离开该群组时,我们可以在performance_schema.replication_group_members表上看到其ERROR状态:
离线模式可以通过以下方式检查:
修复了导致意外退出的故障之后,DBA需要取消设置offline_mode
结论
我希望这种新的防护模式可以帮助用户改善和更好地配置系统的HA属性,从而使用户可以专注于应用程序!