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 已自動將我們重新連線至新的主要執行個體,而我們具有高可用性。