Documentation Home

6.10.3 部署MySQL路由器

MySQL Router 的推荐部署与应用程序在同一台主机上。使用沙盒部署时,一切都在单个主机上运行。因此,您将 MySQL Router 部署到同一主机。使用生产部署时,我们建议将一个 MySQL Router 实例部署到用于托管您的一个客户端应用程序的每台机器上。也可以将 MySQL Router 部署到您的应用程序实例连接的公用机器上。有关详细信息,请参阅 安装 MySQL 路由器

要基于 InnoDB Cluster 或 InnoDB ReplicaSet 引导 MySQL Router,您需要类似于 URI 的连接字符串到在线实例。运行mysqlrouter 命令并提供 选项,其中是在线实例的类似 URI 的连接字符串。MySQL Router 连接到实例并使用包含的元数据缓存插件来检索元数据,包括服务器实例地址列表及其角色。例如: --bootstrap=instanceinstance

$> 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部分。

如果您使用的是 MySQL Router 8.0.14 及更高版本,该 --bootstrap选项会自动将 MySQL Router 配置为在 .config 配置的路径中跟踪和存储活动的 MySQL 元数据服务器地址 dynamic_state。这确保当 MySQL Router 重新启动时,它知道哪些 MySQL 元数据服务器地址是最新的。有关详细信息,请参阅 dynamic_state文档。

在早期的 MySQL Router 版本中,元数据服务器信息是在 MySQL Router 的初始引导操作期间定义的,并静态存储 bootstrap_server_addresses 在配置文件中,其中包含集群中所有服务器实例的地址。例如:

[metadata_cache:prodCluster]
router_id=1
bootstrap_server_addresses=mysql://icadmin@ic-1:3306,mysql://icadmin@ic-2:3306,mysql://icadmin@ic-3:3306
user=mysql_router1_jy95yozko3k2
metadata_cluster=prodCluster
ttl=300
小费

如果使用 MySQL Router 8.0.13 或更早版本,当您在引导 MySQL Router 后通过添加另一个服务器实例来更改集群的拓扑时,您需要 bootstrap_server_addresses 根据更新的元数据进行更新。使用该--bootstrap选项重新启动 MySQL Router,或者手动编辑 文件bootstrap_server_addresses 部分mysqlrouter.conf并重新启动 MySQL Router。

生成的 MySQL 路由器配置创建用于连接到集群的 TCP 端口。默认情况下,会创建使用经典 MySQL 协议和 X 协议与集群通信的端口。要使用 X 协议,服务器实例必须安装和配置 X 插件,这是 MySQL 8.0 及更高版本的默认设置。默认可用的 TCP 端口是:

  • 6446- 对于经典的 MySQL 协议读写会话,MySQL 路由器将传入连接重定向到主服务器实例。

  • 6447- 对于经典的 MySQL 协议只读会话,MySQL 路由器将传入连接重定向到辅助服务器实例之一。

  • 64460- 对于 X 协议读写会话,MySQL 路由器将传入连接重定向到主服务器实例。

  • 64470- 对于 X 协议只读会话,MySQL 路由器将传入连接重定向到辅助服务器实例之一。

根据您的 MySQL Router 配置,端口号可能与上述不同。例如,如果您使用 --conf-base-port选项或 group_replication_single_primary_mode 变量。启动 MySQL Router 时会列出确切的端口。

传入连接的重定向方式取决于所使用的底层拓扑。例如,当使用单主集群时,默认情况下 MySQL 路由器发布 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 路由器端口之一,并查看客户端如何透明地连接到其中一个服务器实例。

$> 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 |
+--------+