原文:https://mysqlhighavailability.com/automatic-member-fencing-with-offline_mode-in-group-replication/


作者: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_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 的状态:
  1. SELECT * FROM performance_schema.replication_group_members;

离线模式可以通过以下方式检查:
  1. SELECT @@GLOBAL.offline_mode;

修复导致意外退出的故障后,DBA 需要取消 OFFLINE_MODE 的设置:
  1. SET @@GLOBAL.offline_mode = OFF;

除了重新加入该成员之外。
结论
我希望这种新的防护模式可以帮助您改善和更好地配置系统的高可用性,从而使您可以专注于应用程序!

社区近期动态

No.1

Mycat 问题免费诊断

诊断范围支持:

Mycat 的故障诊断、源码分析、性能优化

服务支持渠道:

技术交流群,进群后可提问

QQ群(669663113)

社区通道,邮件&电话

osc@actionsky.com

现场拜访,线下实地,1天免费拜访

关注“爱可生开源社区”公众号,回复关键字“Mycat”,获取活动详情。

No.2

社区技术内容征稿

征稿内容:

格式:.md/.doc/.txt

主题:MySQL、分布式中间件DBLE、数据传输组件DTLE相关技术内容

要求:原创且未发布过

奖励:作者署名;200元京东E卡+社区周边

投稿方式:

邮箱:osc@actionsky.com

格式:[投稿]姓名+文章标题

以附件形式发送,正文需注明姓名、手机号、微信号,以便小编及时联系