原文:https://mysqlhighavailability...

作者:Nuno Carvalho 翻译:管长龙
Nuno Carvalho 是 Oracle 的首席软件工程师和 MySQL 复制服务团队负责人,该团队负责 MySQL 组复制插件。他的研究兴趣包括复制技术,可靠的系统和高可用性。在加入 MySQL 团队之前,他是葡萄牙米尼奥大学的研究生和研究员,在那里他设计和实现了改善分布式系统可伸缩性的技术。

MySQL 通过组复制,可以提升数据库服务的高可用。即使某台服务器出现故障,只要不是全部或大多数,系统仍可保持服务是可用的。

小组成员无意中离开小组的集中情况:

  1. 遇到申请错误之后
  2. 遇到恢复错误之后
  3. 在大多数成员都与之失联的情况下(group_replication_unreachable_majority_timeout 的值不为 0)
  4. 当该组的另一名成员怀疑超时使之被驱逐
  5. 在同步组更改时遇到报错之后
  6. 选主错误之后
  7. 当自动归队开启,但尝试后未成功

离开小组后,失效成员的行为由选项 group_replication_exit_state_action 决定。

直到 8.0.17,此行为可能是:

  • READ_ONLY 禁用服务器上的写操作(默认)
  • ABORT_SERVER 关闭服务器

在 8.0.18 中新增:

  • OFFLINE_MODE 关闭所有链接,并禁止没有 CONNECTION_ADMINSUPER 权限的用户建立新的连接。

此模式包括 READ_ONLY 效果,否则具有 CONNECTION_ADMINSUPER 权限的用户将能够进行无法同步到复制组的更改。

DBA 可为服务器自定义发生故障后的行为,并在严重情况下保持整个系统的正常运行。例如,在所有成员由于内网故障导致不可访问的情况下,所有成员将遵循选项配置的行为。

如果 DBA 配置为 READ_ONLY,则只能阻止写入。使用 OFFLINE_MODE 阻止所有操作;甚至使用 ABORT_SERVER 完全停止服务器。

当配置 group_replication_exit_state_action = OFFLINE_MODE 值的服务器故障离组时,我们可以在 performance_schema.replication_group_members 表上看到其 ERROR 的状态:

SELECT * FROM performance_schema.replication_group_members;

离线模式可以通过以下方式检查:

SELECT @@GLOBAL.offline_mode;

修复导致意外退出的故障后,DBA 需要取消 OFFLINE_MODE 的设置:

SET @@GLOBAL.offline_mode = OFF;

除了重新加入该成员之外。

结论

我希望这种新的防护模式可以帮助您改善和更好地配置系统的高可用性,从而使您可以专注于应用程序!


爱可生开源社区
423 声望206 粉丝

成立于 2017 年,以开源高质量的运维工具、日常分享技术干货内容、持续的全国性的社区活动为社区己任;目前开源的产品有:SQL审核工具 SQLE,分布式中间件 DBLE、数据传输组件DTLE。