6.10.7 使用叢集的路由器

您可以針對 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

此外,Cluster.listRouters() 作業可以顯示不支援 MySQL Shell 支援的中繼資料版本的執行個體清單。使用 onlyUpgradeRequired 選項。例如,執行 Cluster.listRouters({'onlyUpgradeRequired':'true'})

傳回的清單只會顯示已向 Cluster 註冊,且需要升級其資料的中繼資料的 MySQL Router 執行個體。如需詳細資訊,請參閱第 6.11 節,「升級中繼資料結構描述」

MySQL Router 執行個體不會自動從中繼資料移除,因此,例如,當您引導更多執行個體時,InnoDB 叢集中繼資料會包含越來越多的執行個體參考。若要從叢集中繼資料移除已註冊的 MySQL Router 執行個體,請使用 Cluster.removeRouterMetadata(router) 作業。

使用 Cluster.listRouters() 作業來取得您要移除的 MySQL Router 執行個體的名稱,並將其以 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 的執行個體的 lastCheckInversion 皆為 null 的事實。執行下列 JavaScript 命令,從中繼資料移除此舊執行個體

mysql-js> cluster.removeRouterMetadata('myRouter1')

或執行下列 Python 命令

mysql-py> cluster.remove_router_metadata('myRouter1')

透過從 InnoDB 叢集中繼資料移除,指定之 MySQL Router 執行個體會從叢集中取消註冊。

使用 MySQL Shell 檢視路由器組態

從 MySQL Router 8.4.0 開始,針對叢集引導的路由器會在它們連線到的叢集的 InnoDB 叢集中繼資料結構描述中公開其組態。可以使用 .routerOptions() 作業擷取此組態,此作業可在 ClusterClusterSetReplicaSet 物件上使用。

注意

如果您現有的路由器帳戶沒有必要的權限,則組態資訊無法寫入中繼資料結構描述。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 物件,其中包含目標拓撲的名稱、擷取的整體組態,以及屬於該拓撲的路由器清單和每個路由器的組態。