您可以針對 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')
指定的 MySQL Router 執行個體會從 InnoDB 叢集中繼資料中移除,以取消向叢集註冊。
從 MySQL Router 8.4.0 開始,針對叢集引導的路由器會在所連線叢集的 InnoDB 叢集中繼資料綱要中公開其組態。可以使用 .routerOptions()
操作來擷取此組態,此操作可在 Cluster
、ClusterSet
和 ReplicaSet
物件上使用。
如果您現有的路由器帳戶沒有所需的權限,則無法將組態資訊寫入中繼資料綱要。MySQL Shell 會偵測到這一點並產生警告。您必須確保您的路由器帳戶具有正確的權限,使用 setupRouterAccount()
且必要時再次引導。
預設情況下,.routerOptions()
可讓您擷取目標拓撲的整體組態。它會列出可由 MySQL Shell 設定的整體動態組態。請參閱 第 6.10.4 節〈路由選項〉。也會列出組態值與對應整體值不同的路由器。
.routerOptions()
的語法如下
cluster.routerOptions({options})
可使用下列選項
router:
routerName
-
extended: 0 | 1 | 2
:0
:預設值。傳回動態 MySQL Router 組態參數。1
:傳回所連線路由器的所有整體參數,以及其值與整體值不同的參數的每個路由器清單。2
:傳回連線至叢集的所有路由器的所有組態參數。
以下是針對名為 Cluster1
的叢集使用的預設選項範例,其中單一路由器、版本 8.4.0,名為 router_test
$> 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 物件,其中包含目標拓撲的名稱、擷取的整體組態,以及屬於該拓撲的路由器清單和每個路由器的組態。