症状:[ERROR] Plugin group_replication reported: 'Member was expelled from the group due to network failures, changing member status to ERROR.'
有不同的原因来解释为什么一个成员可以被排除在群体之外:
软件/硬件故障
在网络断开、硬件故障或进程崩溃的情况下,该组意识到节点是不可到达的。在这种情况下,协议决定自动排除该节点。
从组中排除节点是基于断开时间的决定,因此暂时的故障会自动修复,然而长期的问题会引起排除,从而迫使执行手动干预。
虚拟机冻结
虚拟机(VM)可能会冻结,尤其是在迁移期间。虚拟机管理程序冻结虚拟机超过5秒钟将为网络故障检测创造条件,然后该成员将从集群中删除。在拍摄VMware快照后,组复制成员也可能会从组复制中删除
大宗交易
这个问题可能是由大宗交易引发的。大型事务的副作用与网络断开相同,因为组中其他实例来回发送的心跳无法按时接收(不可配置 5秒 阈值)。
也就是说,大的事务使协议保持忙碌,那么心跳管理在当前实现中不能顺利执行,从而导致网络错误情况,无论是在真实网络还是虚拟网络上。
在这种情况下,会生成与网络故障时相同的日志。
以上问题有什么解决办法呢?
这是非暂时性错误,节点无法自动重新插入。作为该问题的永久解决方案,应考虑以下替代方案。
软件/硬件故障
如果问题与MySQL崩溃或网络问题有关,则应执行根本原因分析,以了解崩溃是否是引发节点排除的原因,并查明网络是否完全符合要求:低延迟、高带宽网络连接是组复制的一项要求。
目前没有允许容忍网络延迟的配置参数。GR的一个先决条件是低延迟网络,尽管在网络分裂的情况下,这是一种正常的行为,旨在引起对故障网络的注意。
虚拟机冻结
必须与相关的第三方提供商一起对虚拟机性能进行故障排除,以保证服务的连续性/稳定性,并消除任何会影响集群通信功能的故障。避免拍摄虚拟机快照,选择热备份方法。
大宗交易
如果系统正在执行大型事务,应该对其进行审计和设计,使其具有较小的规模。一般来说,通过使用监视MySQL实例来发现长时间运行的事务是可行的
限制交易规模
从MySQL 5.7.19开始,将提供限制事务最大大小的设置: group_replication_transaction_size_limit
压缩
另一种改善沟通的有效方法是使用 自动压缩功能 group_replication_compression_threshold 降低门槛 。
成员驱逐超时
在MySQL 8.0.13中,还可以设置一个实例在怀疑另一个实例失败时的行为,并在该实例最终被驱逐之前等待一段可配置的时间。如果心跳是在指定的可配置超时内传送的 group_replication_member_expel_timeout,该成员不会被从组中开除。
通信最大消息大小
在MySQL 8.0.16中,为了避免因为通信协议加载了大量消息而导致节点被驱逐,并且为了减少延迟和增加吞吐量,可以将大消息分割成通信系统可以轻松处理的较小消息。在发送消息之前,系统将检查其大小是否超过 group_replication_communication_max_message_size 选项。如果是这样,消息将被分成几个片段,产生的片段将被移到下一个处理阶段。
自动重新加入尝试
在MySQL 8.0.16中,一个新的系统变量group_replication_autorejoin_tries
允许您指定某个成员在被驱逐或无法在之前联系到大多数成员时自动重新加入组的尝试次数 group_replication_unreachable_majority_timeout
达到设定值。