您可以針對 InnoDB 叢集或 InnoDB ReplicaSet 引導多個 MySQL Router 執行個體。若要顯示所有已註冊的 MySQL Router 執行個體清單,請執行
Cluster.listRouters()
結果會提供每個已註冊的 MySQL Router 執行個體的相關資訊,例如其在中繼資料中的名稱、主機名稱、連接埠等等。例如,執行下列 JavaScript 命令
mysql-js> Cluster.listRouters()
{
"clusterName": "example",
"routers": {
"ic-1:3306": {
"hostname": "ic-1:3306",
"lastCheckIn": "2020-01-16 11:43:45",
"roPort": 6447,
"roXPort": 64470,
"rwPort": 6446,
"rwXPort": 64460,
"version": "8.0.19"
}
}
}
或執行下列 Python 命令
mysql-py> Cluster.list_routers()
{
"clusterName": "example",
"routers": {
"ic-1:3306": {
"hostname": "ic-1:3306",
"lastCheckIn": "2020-01-16 11:43:45",
"roPort": 6447,
"roXPort": 64470,
"rwPort": 6446,
"rwXPort": 64460,
"rwSplitPort": 6450,
"version": "8.0.19"
}
}
}
傳回的資訊會顯示
MySQL Router 執行個體的名稱。
上次簽入時間戳記,由 MySQL Router 從中繼資料儲存的定期 Ping 產生。
MySQL Router 執行個體正在執行所在的主機名稱。
唯讀 (
roPort
) 和讀寫 (rwPort
) 連接埠,MySQL Router 會針對傳統 MySQL 通訊協定連線發佈這些連接埠。唯讀 (
roXPort
) 和讀寫 (rwXPort
) 連接埠,MySQL Router 會針對 X 通訊協定連線發佈這些連接埠。-
讀寫分割 (
rwSplitPort
) 連接埠,MySQL Router 會針對分割的傳統 MySQL 通訊協定連線發佈這些連接埠。請參閱讀取/寫入分割。
此 MySQL Router 執行個體的版本。如果此作業針對早於 8.0.19 的 MySQL Router 版本執行,則版本欄位為
null
。
此外,
作業可以顯示不支援 MySQL Shell 支援的中繼資料版本的執行個體清單。使用 Cluster
.listRouters()onlyUpgradeRequired
選項。例如,執行
。Cluster
.listRouters({'onlyUpgradeRequired':'true'})
傳回的清單只會顯示已向 Cluster
註冊,且需要升級其資料的中繼資料的 MySQL Router 執行個體。如需詳細資訊,請參閱第 6.11 節,「升級中繼資料結構描述」。
MySQL Router 執行個體不會自動從中繼資料移除,因此,例如,當您引導更多執行個體時,InnoDB 叢集中繼資料會包含越來越多的執行個體參考。若要從叢集中繼資料移除已註冊的 MySQL Router 執行個體,請使用
作業。Cluster
.removeRouterMetadata(router
)
使用
作業來取得您要移除的 MySQL Router 執行個體的名稱,並將其以 Cluster
.listRouters()router
傳入。例如,假設向叢集註冊的 MySQL Router 執行個體為
mysql-js> Cluster.listRouters(){
"clusterName": "testCluster",
"routers": {
"myRouter1": {
"hostname": "example1.com",
"lastCheckIn": null,
"roPort": "6447",
"rwPort": "6446"
"version": null
},
"myRouter2": {
"hostname": "example2.com",
"lastCheckIn": "2019-11-27 16:25:00",
"roPort": "6447",
"rwPort": "6446"
"version": "8.0.19"
}
}
}
基於名為 「myRouter1」 的執行個體的 「lastCheckIn」 和 「version」 皆為 null
的事實。執行下列 JavaScript 命令,從中繼資料移除此舊執行個體
mysql-js> cluster.removeRouterMetadata('myRouter1')
或執行下列 Python 命令
mysql-py> cluster.remove_router_metadata('myRouter1')
透過從 InnoDB 叢集中繼資料移除,指定之 MySQL Router 執行個體會從叢集中取消註冊。
從 MySQL Router 8.4.0 開始,針對叢集引導的路由器會在它們連線到的叢集的 InnoDB 叢集中繼資料結構描述中公開其組態。可以使用 .routerOptions()
作業擷取此組態,此作業可在 Cluster
、ClusterSet
和 ReplicaSet
物件上使用。
如果您現有的路由器帳戶沒有必要的權限,則組態資訊無法寫入中繼資料結構描述。MySQL Shell 會偵測到這一點並產生警告。您必須確保您的路由器帳戶具有正確的權限 (使用 setupRouterAccount()
),並在必要時重新引導。
依預設,.routerOptions()
可讓您擷取目標拓撲的整體組態。它會列出可由 MySQL Shell 設定的整體動態組態。請參閱第 6.10.4 節,「路由選項」。也會列出以不同於對應整體值的組態值設定的路由器。
.routerOptions()
具有下列語法
cluster.routerOptions({options})
下列選項可用
路由器:
routerName
-
extended: 0 | 1 | 2
:0
:預設值。傳回動態 MySQL Router 組態參數。1
:傳回連線路由器的所有整體參數,以及其值與整體值不同的參數的每個路由器清單。2
:傳回連線至叢集的所有路由器的所有組態參數。
以下是針對名為 Cluster1
的叢集 (具有名為 router_test
的單一路由器,版本為 8.4.0) 使用預設選項的範例
$> cluster.routerOptions()
{
"clusterName": "Cluster1",
"configuration": {
"routing_rules": {
"invalidated_cluster_policy": "drop_all",
"read_only_targets": "secondaries",
"stats_updates_frequency": -1,
"tags": {},
"unreachable_quorum_allowed_traffic": "none",
"use_replica_primary_as_rw": false
}
},
"routers": {
"host1::router_test": {
"configuration": {
}
}
}
}
該作業會傳回一個 JSON 物件,其中包含目標拓撲的名稱、擷取的整體組態,以及屬於該拓撲的路由器清單和每個路由器的組態。