基于案例分析 MySQL Group Replication 的故障检测流程( 六 )

4. 反复执行大事务 。
mysql> insert into slowtech.t1(c1) select c1 from slowtech.t1 limit 1000000;Query OK, 1000000 rows affected (10.03 sec)Records: 1000000  Duplicates: 0  Warnings: 05. 观察错误日志 。
如果 node1 或 node2 的错误日志中提示以下信息 , 则意味着 node3 需要的消息已经从 XCom Cache 中逐出了 。
[Warning] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Messages that are needed to recover node 192.168.244.30:33061 have been evicted from the message  cache. Consider resizing the maximum size of the cache by  setting group_replication_message_cache_size.'6. 查看系统表 。
除了错误日志 , 我们还可以通过系统表来判断 XCom Cache 的使用情况 。
mysql> select * from performance_schema.memory_summary_global_by_event_name where event_name like "%GCS_XCom::xcom_cache%"\G*************************** 1. row ***************************                  EVENT_NAME: memory/group_rpl/GCS_XCom::xcom_cache                 COUNT_ALLOC: 23678                  COUNT_FREE: 22754   SUM_NUMBER_OF_BYTES_ALLOC: 154713397    SUM_NUMBER_OF_BYTES_FREE: 28441492              LOW_COUNT_USED: 0          CURRENT_COUNT_USED: 924             HIGH_COUNT_USED: 20992    LOW_NUMBER_OF_BYTES_USED: 0CURRENT_NUMBER_OF_BYTES_USED: 126271905   HIGH_NUMBER_OF_BYTES_USED: 1461372941 row in set (0.00 sec)其中 , 

  • COUNT_ALLOC:缓存过的消息数量 。
  • COUNT_FREE:从缓存中删除的消息数量 。
  • CURRENT_COUNT_USED:当前正在缓存的消息数量 , 等于 COUNT_ALLOC - COUNT_FREE 。
  • SUM_NUMBER_OF_BYTES_ALLOC:分配的内存大小 。
  • SUM_NUMBER_OF_BYTES_FREE:被释放的内存大小 。
  • CURRENT_NUMBER_OF_BYTES_USED:当前正在使用的内存大小 , 等于 SUM_NUMBER_OF_BYTES_ALLOC - SUM_NUMBER_OF_BYTES_FREE 。
  • LOW_COUNT_USED , HIGH_COUNT_USED:CURRENT_COUNT_USED 的历史最小值和最大值 。
  • LOW_NUMBER_OF_BYTES_USED , HIGH_NUMBER_OF_BYTES_USED:CURRENT_NUMBER_OF_BYTES_USED 的历史最小值和最大值 。
如果断开连接之后 , 在反复执行大事务的过程中 , 发现 COUNT_FREE 发生了变化 , 同样意味着 node3 需要的消息已经从 XCom Cache 中驱逐了 。
7. 恢复 node3 与 node1、node2 之间的网络连接 。
在 group_replication_member_expel_timeout 期间 , 网络恢复了 , 而 node3 需要的消息在 XCom Cache 中不存在了 , 则 node3 同样会被驱逐出集群 。以下是这种场景下 node3 的错误日志 。
[ERROR] [MY-011735] [Repl] Plugin group_replication reported: '[GCS] Node 0 is unable to get message {4aec99ca 7562 0}, since the group is too far ahead. Node will now exit.'[ERROR] [MY-011505] [Repl] Plugin group_replication reported: 'Member was expelled from the group due to network failures, changing member status to ERROR.'[ERROR] [MY-011712] [Repl] Plugin group_replication reported: 'The server was automatically set into read only mode after an error was detected.'[System] [MY-011565] [Repl] Plugin group_replication reported: 'Setting super_read_only=ON.'[System] [MY-013373] [Repl] Plugin group_replication reported: 'Started auto-rejoin procedure attempt 1 of 3'

经验总结扩展阅读