§ 其他高可用优化提升


  • 节点异常状态判断更完善和高效。

新增系统参数 group_replication_communication_flp_timeout

MGR中,各节点间会定期交换消息,当超过 5 秒(在 MySQL 中是固定值)还没收到某个节点的任何消息时,就会将这个节点标记为可疑状态(suspicion)。MGR 各正常存活节点会对可疑节点每隔 15 秒检测一次(在 MySQL 中是固定值),当确认可疑节点在超过 group_replication_member_expel_timeout 秒超时阈值后,再将该节点驱逐出 MGR。当节点发生故障时,极端情况下,可能要耗费 5(5 秒没发送消息,被判定为可疑节点) + 15(对可疑节点每 15 秒检测一次) + 5(group_replication_member_expel_timeout) = 25 秒之后才会驱逐该节点。最好的情况下,最少也需要 5 + 5 = 10 秒后才会驱逐该节点。

GreatSQL 对此情况进行了优化,新增选项 group_replication_communication_flp_timeout(默认值:5,最小:3,最大:60)用于定义节点超过多少秒没发消息会被判定为可疑。此外,还将故障检测线程调整为每 2 秒(而非原来的 15 秒)检查一次。因此在 GreatSQL 中,最快只需要 3(group_replication_communication_flp_timeout) + 5(group_replication_member_expel_timeout) = 8 秒即可完成对可疑节点的驱逐,最慢 5(group_replication_communication_flp_timeout) + 5(group_replication_member_expel_timeout) + 2(对可疑节点每 2 秒检测一次) = 12 秒即可完成对可疑节点的驱逐。

System Variable Name group_replication_communication_flp_timeout
Variable Scope Global
Dynamic Variable YES
Type Integer
Permitted Values [3 ~ 60]
Default 5
  • 当有新成员节点加入 MGR 时,如果选择 Clone 方式复制数据,支持自动选择从最新事务数据的成员节点复制数据,可有效提升 Clone 速度,提高 MGR 的服务可靠性。当新加入节点触发 Clone 方式复制数据时,也支持该特性。

选项 group_replication_donor_threshold 用于定义选择 Donor 节点时判断事务延迟阈值,取值范围 [1, MAX],默认值为 MAX。MAX 值取决于 CPU 类型,在 32-bit 系统中是 2147483647(2^31-1),而在 64-bit 系统中是 9223372036854775807(2^63-1)。

当新成员节点加入 MGR 时,新成员节点只会选择那些延迟小于 group_replication_donor_threshold 的节点作为 Donor 节点。

假设 group_replication_donor_threshold = 100,那么:

  1. 现在 MGR 中有两个节点A、B,它们的 GTID 分别是 [1-300]、[1-280],新节点 C 加入,由于 A & B 节点的 GTID 差值小于预设阈值,则随机选择 A 或 B 其中一个节点作为 Donor 节点。
  2. 现在 MGR 中有两个节点A、B,它们的 GTID 分别是 [1-400]、[1-280],新节点 C 加入,由于 A & B 节点的 GTID 差值大于预设阈值,则只会选择 A 作为 Donor 节点。
  3. 现在 MGR 中有三个节点A、B、C,它们的 GTID 分别是 [1-400]、[1-350]、[1-280],新节点 D 加入,由于 C 节点的 GTID 差值大于预设阈值,A & B 节点 GTID 延迟小于预设阈值,则会随机选择 A 或 B 其中一个作为 Donor 节点。
System Variable Name group_replication_donor_threshold
Variable Scope Global
Dynamic Variable YES
Type Integer
Permitted Values [1 ~ 9223372036854775807]
Default 9223372036854775807
  • 支持AFTER模式下多数派写机制。
  • 解决磁盘空间爆满时导致MGR集群阻塞的问题。
  • 解决多主模式下或切主时可能导致丢数据的问题。
  • 解决节点异常退出集群时导致性能抖动的问题。
  • 提高MGR吞吐量。
  • 提升一致性读性能。
  • 优化了加入节点时可能导致性能剧烈抖动的问题。
  • 优化手工选主机制,解决了长事务造成无法选主的问题。
  • 完善MGR中的外键约束机制,降低或避免从节点报错退出MGR的风险。
  • 提升了Secondary节点上大事务并发应用回放的速度。
  • 优化了加入节点时可能导致性能剧烈抖动的问题。

扫码关注微信公众号

greatsql-wx