基于案例分析 MySQL Group Replication 的故障檢測流程

故障檢測(Failure Detection)是 Group Replication 的一個核心功能模塊,通過它可以及時識別集群中的故障節點,并將故障節點從集群中剔除掉 。如果不將故障節點及時剔除的話 , 一方面會影響集群的性能 , 另一方面還會阻止集群拓撲的變更 。
【基于案例分析 MySQL Group Replication 的故障檢測流程】下面結合一個具體的案例,分析 Group Replication 的故障檢測流程 。
除此之外,本文還會分析以下問題 。

  1. 當出現網絡分區時,對于少數派節點 , 會有什么影響?
  2. 什么是 XCom Cache?如何預估 XCom Cache 的大?。?/li>
  3. 在線上,為什么 group_replication_member_expel_timeout 不宜設置過大?
案例以下是測試集群的拓撲,多主模式 。
主機名IP角色node1192.168.244.10PRIMARYnode2192.168.244.20PRIMARYnode3192.168.244.30PRIMARY本次測試主要包括兩步:
  1. 模擬網絡分區,看它對集群各節點的影響 。
  2. 恢復網絡連接,看看各節點又是如何反應的 。
模擬網絡分區首先模擬網絡分區故障,在 node3 上執行 。
# iptables -A INPUT  -p tcp -s 192.168.244.10 -j DROP# iptables -A OUTPUT -p tcp -d 192.168.244.10 -j DROP# iptables -A INPUT  -p tcp -s 192.168.244.20 -j DROP# iptables -A OUTPUT -p tcp -d 192.168.244.20 -j DROP# date "+%Y-%m-%d %H:%M:%S"2022-07-31 13:03:01其中,iptables 命令會斷開 node3 與 node1、node2 之間的網絡連接 。date 記錄了命令執行的時間 。
命令執行完 5s(這個時間是固定的,在源碼中通過 DETECTOR_LIVE_TIMEOUT 指定) , 各個節點開始響應(從各節點的日志中可以觀察到這一點)
首先看看 node1 的日志及集群狀態 。
2022-07-31T13:03:07.582519-00:00 0 [Warning] [MY-011493] [Repl] Plugin group_replication reported: 'Member with address 192.168.244.30:3306 has become unreachable.'mysql> select member_id,member_host,member_port,member_state,member_role from performance_schema.replication_group_members;+--------------------------------------+----------------+-------------+--------------+-------------+| member_id                            | member_host    | member_port | member_state | member_role |+--------------------------------------+----------------+-------------+--------------+-------------+| 207db264-0192-11ed-92c9-02001700754e | 192.168.244.10 |        3306 | ONLINE       | PRIMARY     || 2cee229d-0192-11ed-8eff-02001700f110 | 192.168.244.20 |        3306 | ONLINE       | PRIMARY     || 4cbfdc79-0192-11ed-8b01-02001701bd0a | 192.168.244.30 |        3306 | UNREACHABLE  | PRIMARY     |+--------------------------------------+----------------+-------------+--------------+-------------+3 rows in set (0.00 sec)從 node1 , node2 的角度來看,此時 node3 處于 UNREACHABLE 狀態 。
接下來看看 node3 的 。
2022-07-31T13:03:07.690416-00:00 0 [Warning] [MY-011493] [Repl] Plugin group_replication reported: 'Member with address 192.168.244.10:3306 has become unreachable.'2022-07-31T13:03:07.690492-00:00 0 [Warning] [MY-011493] [Repl] Plugin group_replication reported: 'Member with address 192.168.244.20:3306 has become unreachable.'2022-07-31T13:03:07.690504-00:00 0 [ERROR] [MY-011495] [Repl] Plugin group_replication reported: 'This server is not able to reach a majority of members in the group. This server will now block all updates. The server will remain blocked until contact with the majority is restored. It is possible to use group_replication_force_members to force a new group membership.'mysql> select member_id,member_host,member_port,member_state,member_role from performance_schema.replication_group_members;+--------------------------------------+----------------+-------------+--------------+-------------+| member_id                            | member_host    | member_port | member_state | member_role |+--------------------------------------+----------------+-------------+--------------+-------------+| 207db264-0192-11ed-92c9-02001700754e | 192.168.244.10 |        3306 | UNREACHABLE  | PRIMARY     || 2cee229d-0192-11ed-8eff-02001700f110 | 192.168.244.20 |        3306 | UNREACHABLE  | PRIMARY     || 4cbfdc79-0192-11ed-8b01-02001701bd0a | 192.168.244.30 |        3306 | ONLINE       | PRIMARY     |+--------------------------------------+----------------+-------------+--------------+-------------+3 rows in set (0.00 sec)

推薦閱讀