6.10.3 部署 MySQL Router

建议将 MySQL Router 部署在与应用程序相同的主机上。使用沙箱部署时,所有内容都在单个主机上运行。因此,您需要将 MySQL Router 部署到同一主机。使用生产部署时,我们建议为用于托管客户端应用程序的每台计算机部署一个 MySQL Router 实例。您也可以将 MySQL Router 部署到应用程序实例通过其连接的公共计算机上。有关更多信息,请参阅 安装 MySQL Router

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

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

--bootstrap 选项会自动将 MySQL Router 配置为跟踪活动 MySQL 元数据服务器地址并将其存储在由 dynamic_state 配置的路径中。这可确保 MySQL Router 在重新启动时知道哪些 MySQL 元数据服务器地址是最新的。有关更多信息,请参阅 dynamic_state 文档。

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

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

  • 6447 - 用于经典 MySQL 协议只读会话,MySQL Router 会将传入连接重定向到其中一个辅助服务器实例。

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

  • 64470 - 用于 X 协议只读会话,MySQL Router 会将传入连接重定向到其中一个辅助服务器实例。

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

传入连接的重定向方式取决于所使用的底层拓扑。例如,使用单主集群时,默认情况下,MySQL Router 会发布一个 X 协议端口和一个经典 MySQL 协议端口,客户端连接到这些端口以进行读写会话,并将这些端口重定向到集群的单个主服务器。使用多主集群时,读写会话将以循环方式重定向到其中一个主实例。例如,到端口 6446 的第一个连接被重定向到 ic-1 实例。到端口 6446 的第二个连接被重定向到 ic-2 实例,依此类推。

对于传入的只读连接,MySQL Router 会将连接重定向到其中一个辅助实例,也是以循环方式进行的。要修改此行为,请参阅 routing_strategy 选项。

引导并配置 MySQL Router 后,启动 MySQL Router。如果您使用的是使用 --bootstrap 选项进行的系统范围安装,则发出

$> mysqlrouter &

如果您使用 --directory 选项将 MySQL Router 安装到某个目录,请使用安装到的目录中的 start.sh 脚本。

或者,设置一个服务以在系统引导时自动启动 MySQL Router,请参阅 启动 MySQL Router。现在,您可以将 MySQL 客户端(例如 MySQL Shell)连接到上述传入 MySQL Router 端口之一,并查看客户端如何透明地连接到其中一个服务器实例。

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