MySQL Router 8.4  /  一般資訊  /  應用程式考量

1.4 應用程式考量

使用 MySQL Router 不需要特定的程式庫或介面。除了管理 MySQL Router 實例之外,您撰寫應用程式的方式應如同 MySQL Router 是一個典型的 MySQL 實例。

使用 MySQL Router 時唯一的區別在於您如何連線到 MySQL 伺服器。在啟動時使用單一 MySQL 連線且不測試連線錯誤的應用程式必須更新。這是因為 MySQL Router 在嘗試連線時會重新導向連線,而且不會讀取封包或執行分析。如果 MySQL 伺服器發生故障,Router 會將連線錯誤傳回給應用程式。

由於這些原因,應用程式應撰寫為測試連線錯誤,如果遇到連線錯誤,則重試連線。如果您的應用程式採用此技術或類似技術,則使用 MySQL Router 不需要任何額外的努力。

以下內容可讓您更清楚地了解為什麼您可能想要使用 MySQL Router,並從應用程式的角度來探討如何使用。

情境

MySQL Router 有幾種可能的情境,包括

  • 身為開發人員,我希望我的應用程式連線到服務,以便預設取得群組複寫叢集目前主要節點的連線。

  • 身為管理員,我想要設定多個服務,以便 MySQL Router 為每個高可用性複本集監聽不同的埠。

  • 身為管理員,我想要能夠在埠 3306 上執行連線路由服務,以便對使用者或應用程式更加透明。

  • 身為管理員,我想要為每個連線路由服務設定路由策略,以便我可以指定傳回主要節點或次要節點。

使用 MySQL Router 的工作流程

使用 MySQL Router 的工作流程如下

  1. MySQL 用戶端或連接器連線到 MySQL Router,例如埠 6446。

  2. Router 檢查是否有可用的 MySQL 伺服器。

  3. Router 開啟到合適 MySQL 伺服器的連線。

  4. Router 在應用程式和 MySQL 伺服器之間來回轉送封包

  5. 如果連線的 MySQL 伺服器發生故障,Router 會中斷應用程式的連線。然後,應用程式可以重試連線到 Router,而 Router 接著會選擇不同的可用 MySQL 伺服器。

使用 MySQL Router 的連線

應用程式連線到 MySQL Router,而 Router 將應用程式連線到可用的 MySQL 伺服器。

此範例示範連線會透明地連線到其中一個 InnoDB Cluster 實例。由於此範例使用沙箱化的 InnoDB Cluster,其中所有實例都執行在相同的主機上,因此我們檢查 port 狀態變數,以查看連線到哪個 MySQL 實例。

使用 MySQL 用戶端連線到 MySQL Router,例如

$> mysql -u root -h 127.0.0.1 -P 6446 -p

這些埠號碼取決於您的組態,但請比較此範例中的埠

mysql> select @@port;
+--------+
| @@port |
+--------+
|   3310 |
+--------+
1 row in set (0.00 sec)

總而言之,用戶端 (應用程式) 連線到埠 6446,但連線到埠 3310 上的 MySQL 實例。

建議

以下是使用 MySQL Router 的建議。

  • 在與應用程式相同的主機上安裝並執行 MySQL Router。如需原因清單,請參閱第 3 章,部署 MySQL Router

  • 使用組態檔中的 bind_port = 127.0.0.1:<port> 將 Router 繫結至 localhost。或者,在 Linux 上,停用 TCP 連線 (請參閱 --conf-skip-tcp) 並將此限制為僅使用 Unix Socket 連線 (請參閱 --conf-use-sockets)。