6.10.3 部署 MySQL Router

建議將 MySQL Router 部署在與應用程式相同的主機上。使用沙箱部署時,所有內容都在單一主機上執行。因此,您會將 MySQL Router 部署到相同的主機。使用生產部署時,我們建議將一個 MySQL Router 執行個體部署到用於託管其中一個用戶端應用程式的每部機器。也可以將 MySQL Router 部署到您的應用程式執行個體連線的通用機器。如需更多資訊,請參閱安裝 MySQL Router

若要根據 InnoDB Cluster 或 InnoDB ReplicaSet 引導啟動 MySQL Router,您需要連線至線上執行個體的 URI 類連線字串。執行 mysqlrouter 命令並提供 --bootstrap=執行個體 選項,其中 執行個體 是連線至線上執行個體的 URI 類連線字串。MySQL Router 連線至執行個體,並使用內含的中繼資料快取外掛程式擷取中繼資料,其中包含伺服器執行個體位址及其角色的清單。例如

$> mysqlrouter --bootstrap icadmin@ic-1:3306 --account=mysqlrouter

系統會提示您輸入 MySQL Router 要使用的執行個體密碼和加密金鑰。此金鑰用於加密 MySQL Router 用於連線至叢集的執行個體密碼。也會顯示您可以用於用戶端連線的連接埠。如需其他引導啟動相關選項,請參閱引導啟動選項

提示

此時,尚未啟動 MySQL Router,因此不會路由連線。引導啟動是個別的程序。

MySQL Router 引導啟動程序會建立 mysqlrouter.conf 檔案,其中的設定會根據從傳遞至 --bootstrap 選項的位址擷取的中繼資料,以上述範例而言為 icadmin@ic-1:3306。根據擷取的中繼資料,MySQL Router 會自動設定 mysqlrouter.conf 檔案,包括 metadata_cache 區段。

--bootstrap 選項會自動設定 MySQL Router,以追蹤並儲存由 dynamic_state 設定的路徑中作用中的 MySQL 中繼資料伺服器位址。這可確保當重新啟動 MySQL Router 時,它知道哪些 MySQL 中繼資料伺服器位址為目前位址。如需更多資訊,請參閱dynamic_state 文件。

產生的 MySQL Router 設定會建立您用於連線至叢集的 TCP 連接埠。依預設,會建立使用傳統 MySQL 通訊協定和 X 通訊協定與叢集通訊的連接埠。若要使用 X 通訊協定,伺服器執行個體必須已安裝並設定 X 外掛程式,這是 MySQL 8.0 及更新版本的預設設定。預設可用的 TCP 連接埠如下

  • 6446 - 用於傳統 MySQL 通訊協定讀寫工作階段,MySQL Router 會將傳入的連線重新導向至主要伺服器執行個體。

  • 6447 - 用於傳統 MySQL 通訊協定唯讀工作階段,MySQL Router 會將傳入的連線重新導向至其中一個次要伺服器執行個體。

  • 64460 - 用於 X 通訊協定讀寫工作階段,MySQL Router 會將傳入的連線重新導向至主要伺服器執行個體。

  • 64470 - 用於 X 通訊協定唯讀工作階段,MySQL Router 會將傳入的連線重新導向至其中一個次要伺服器執行個體。

根據您的 MySQL Router 設定,連接埠號碼可能與上述不同。例如,如果您使用 --conf-base-port 選項,或 group_replication_single_primary_mode 變數。啟動 MySQL Router 時會列出確切的連接埠。

傳入的連線重新導向方式取決於使用的基礎拓撲。例如,使用單一主要叢集時,依預設,MySQL Router 會發佈 X 通訊協定和傳統 MySQL 通訊協定連接埠,用戶端會連線至該連接埠以進行讀寫工作階段,並將其重新導向至叢集的單一主要伺服器。使用多個主要叢集時,讀寫工作階段會以循環配置方式重新導向至其中一個主要執行個體。例如,連線至連接埠 6446 的第一個連線會重新導向至 ic-1 執行個體。連線至連接埠 6446 的第二個連線會重新導向至 ic-2 執行個體,依此類推。

對於傳入的唯讀連線,MySQL Router 會將連線以循環配置方式重新導向至其中一個次要執行個體。若要修改此行為,請參閱 routing_strategy 選項。

引導啟動並設定之後,啟動 MySQL Router。如果您使用 --bootstrap 選項進行全系統安裝,請發出

$> mysqlrouter &

如果您使用 --directory 選項將 MySQL Router 安裝到目錄中,請使用安裝到目錄中的 start.sh 指令碼。

或者,設定服務,以便在系統啟動時自動啟動 MySQL Router,請參閱啟動 MySQL Router。您現在可以將 MySQL 用戶端 (例如 MySQL Shell) 連線至上述其中一個傳入的 MySQL Router 連接埠,並查看用戶端如何透明地連線至其中一個伺服器執行個體。

$> mysqlsh --uri root@localhost:6442

若要驗證您連線至哪個執行個體,請針對 port 狀態變數發出 SQL 查詢。例如

mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> select @@port;
+--------+
| @@port |
+--------+
|   3310 |
+--------+

或者,例如,使用

mysql-js> \sql
Switching to SQL mode... Commands end with ;
mysql-sql> SHOW VARIABLES WHERE Variable_name = 'port';
+--------+
| @@port |
+--------+
|   3310 |
+--------+