6.10.6 測試 InnoDB Cluster 高可用性

若要測試 InnoDB Cluster 高可用性是否運作,請藉由終止執行個體來模擬非預期的停止。叢集會偵測到執行個體離開叢集的事實,並重新設定自身。叢集重新設定自身的方式取決於您使用的是單一主要節點叢集還是多個主要節點叢集,以及執行個體在叢集中所扮演的角色。

在單一主要節點模式中

  • 如果目前的主要節點離開叢集,則會選出其中一個次要執行個體作為新的主要節點,執行個體的優先順序由最低的 server_uuid 決定。MySQL Router 會將讀寫連線重新導向至新選出的主要節點。

  • 如果目前的次要節點離開叢集,MySQL Router 會停止將唯讀連線重新導向至該執行個體。

如需更多資訊,請參閱單一主要節點模式

在多個主要節點模式中

  • 如果目前的「R/W」執行個體離開叢集,MySQL Router 會將讀寫連線重新導向至其他主要節點。如果離開的執行個體是叢集中最後一個主要節點,則叢集會完全消失,而且您無法連線至任何 MySQL Router 連接埠。

如需更多資訊,請參閱多個主要節點模式

有許多方法可以模擬執行個體離開叢集,例如,您可以強制停止執行個體上的 MySQL 伺服器,或是在測試沙箱部署時使用 AdminAPI dba.killSandboxInstance()。在本範例中,有一個包含三個伺服器執行個體的單一主要節點沙箱叢集部署,而且在連接埠 3310 上接聽的執行個體是目前的主要節點。執行個體會非預期地離開叢集,透過「終止」執行個體來模擬。

例如,透過發出 JavaScript 指令

mysql-js> dba.killSandboxInstance(3310)

或透過發出 Python 指令

mysql-py> dba.kill_sandbox_instance(3310)

叢集會偵測到變更,並自動選出新的主要節點。

假設您的工作階段連線至連接埠 6446 (預設讀寫經典 MySQL 通訊協定連接埠),MySQL Router 應會偵測到叢集拓撲的變更,並將您的工作階段重新導向至新選出的主要節點。若要驗證這一點,請使用 \sql 指令在 MySQL Shell 中切換至 SQL 模式,並選取執行個體的 port 變數來檢查您的工作階段已重新導向至哪個執行個體。

第一個 SELECT 陳述式會失敗,因為與原始主要節點的連線已中斷,這表示目前的工作階段已關閉。MySQL Shell 會自動為您重新連線,當您再次發出指令時,會確認新的連接埠。

mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> SELECT @@port;
ERROR: 2013 (HY000): Lost connection to MySQL server during query
The global session got disconnected.
Attempting to reconnect to 'root@localhost:6446'...
The global session was successfully reconnected.
mysql-sql> SELECT @@port;
+--------+
| @@port |
+--------+
|   3330 |
+--------+
1 row in set (0.00 sec)

在本範例中,位於連接埠 3330 的執行個體已被選為新的主要節點。此選取表示 InnoDB Cluster 已提供自動容錯移轉,且 MySQL Router 已自動將我們重新連線至新的主要節點執行個體,而且我們具有高可用性。