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。如果您使用系统范围的安装并使用了 --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 |
+--------+