Group Replication 的群组通信引擎(XCom,一种 Paxos 变体)包括一个缓存,用于作为共识协议的一部分在群组成员之间交换的消息(及其元数据)。在其他功能中,消息缓存用于在一段时间后无法与其他组成员通信后重新连接到组的成员恢复丢失的消息。
从 MySQL 8.0.16 开始,可以使用
group_replication_message_cache_size
系统变量为 XCom 的消息缓存设置缓存大小限制。如果达到缓存大小限制,XCom 将删除已决定和交付的最旧条目。应在所有组成员上设置相同的缓存大小限制,因为尝试重新连接的无法访问的成员会随机选择任何其他成员来恢复丢失的消息。因此,相同的消息应该在每个成员的缓存中可用。
在 MySQL 8.0.16 之前,缓存大小为 1 GB,与 MySQL 8.0.16 的缓存大小默认设置相同。考虑到 MySQL 服务器的其他缓存和对象池的大小,确保系统上有足够的内存可用于您选择的缓存大小限制。请注意,使用的限制设置
group_replication_message_cache_size
仅适用于存储在缓存中的数据,并且缓存结构需要额外的 50 MB 内存。
选择
group_replication_message_cache_size
设置时,请参考开除会员前一段时间内的预期消息量。该时间段的长度由
group_replication_member_expel_timeout
系统变量控制,该变量决定了除了最初的 5 秒检测期之外允许成员返回组而不是被驱逐的等待期(最多一个小时)。请注意,在 MySQL 8.0.21 之前,此时间段默认为成员不可用后的 5 秒,这只是产生怀疑之前的检测时间,因为由
group_replication_member_expel_timeout
系统变量默认为零。从 8.0.21 开始,驱逐超时默认为 5 秒,因此默认情况下,成员在缺席至少 10 秒之前不会被驱逐。