17.5.2 调整恢复

每当新成员加入复制组时,它都会连接到合适的捐赠者并获取它错过的数据,直到它被声明为在线为止。Group Replication 中的这个关键组件是容错和可配置的。以下部分解释了恢复的工作原理以及如何调整设置

捐赠者选择

从群组中现有的在线成员中随机选择一个捐赠者。这样,当多个成员进入该组时,很有可能不会多次选择同一服务器。

如果与所选供体的连接失败,则会自动尝试与新的候选供体建立新连接。一旦达到连接重试限制,恢复过程就会因错误而终止。

笔记

捐赠者是从当前视图的在线成员列表中随机挑选的。

增强的自动供体切换

恢复作为一个整体的另一个主要关注点是确保它能够处理故障。因此,Group Replication 提供了强大的错误检测机制。在 Group Replication 的早期版本中,当与捐赠者联系时,恢复只能检测由于身份验证问题或其他问题导致的连接错误。对这种有问题的情况的反应是切换到新的捐赠者,因此对不同的成员进行了新的连接尝试。

此行为已扩展到还涵盖其他故障场景:

  • 清除数据方案- 如果所选捐赠者包含恢复过程所需的一些清除数据,则会发生错误。Recovery 检测到这个错误并选择了一个新的捐赠者。

  • 重复数据- 如果加入该组的服务器已经包含一些与恢复期间来自所选供体的数据冲突的数据,则会发生错误。这可能是由加入组的服务器中存在的一些错误事务引起的。

    有人可能会争辩说,恢复应该失败而不是切换到另一个捐助者,但在异质群体中,其他成员有可能分享冲突的交易,而其他人则没有。出于这个原因,一旦出错,recovery 会从组中选择另一个捐赠者。

  • 其他错误- 如果任何恢复线程失败(接收者或应用程序线程失败),则会发生错误并且恢复会切换到新的捐赠者。

笔记

如果出现某些持续性故障甚至是暂时性故障,恢复会自动重试连接到相同或新的捐赠者。

施主连接重试

恢复数据传输依赖于二进制日志和现有的 MySQL 复制框架,因此一些瞬态错误可能会导致接收方或应用程序线程出错。在这种情况下,供体切换过程具有重试功能,类似于常规复制中的功能。

尝试次数

尝试连接到捐助者池中的捐助者时,加入该组的服务器的尝试次数为 10。这是通过 group_replication_recovery_retry_count 插件变量配置的。以下命令将连接到捐赠者的最大尝试次数设置为 10。

mysql> SET GLOBAL group_replication_recovery_retry_count= 10;

请注意,这说明了加入该组的服务器尝试连接到每个合适的捐助者的全球尝试次数。

睡眠习惯

插件变量定义恢复过程在 group_replication_recovery_reconnect_interval 施主连接尝试之间应该休眠多长时间。此变量的默认设置为 60 秒,您可以动态更改此值。以下命令将恢复捐赠者连接重试间隔设置为 120 秒。

mysql> SET GLOBAL group_replication_recovery_reconnect_interval= 120;

但是请注意,恢复不会在每次捐赠者连接尝试后休眠。由于加入该组的服务器连接到不同的服务器而不是一遍又一遍地连接到同一台服务器,因此可以假设影响服务器 A 的问题不会影响服务器 B。因此,恢复仅在完成所有操作后才会暂停可能的捐助者。group_replication_recovery_reconnect_interval 一旦加入该组的服务器已尝试连接到该组中所有合适的捐赠者并且没有剩余,恢复过程将休眠该变量 配置的秒数 。