您可以针对 InnoDB 集群或 InnoDB 副本集引导多个 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})
以下选项可用
router:
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 对象,其中包含目标拓扑的名称、检索到的全局配置,以及属于该拓扑的路由器列表以及每个路由器的配置。