MySQL Router 的推荐部署与应用程序在同一台主机上。使用沙盒部署时,一切都在单个主机上运行。因此,您将 MySQL Router 部署到同一主机。使用生产部署时,我们建议将一个 MySQL Router 实例部署到用于托管您的一个客户端应用程序的每台机器上。也可以将 MySQL Router 部署到您的应用程序实例连接的公用机器上。有关详细信息,请参阅 安装 MySQL 路由器。
要基于 InnoDB Cluster 或 InnoDB ReplicaSet 引导 MySQL Router,您需要类似于 URI 的连接字符串到在线实例。运行mysqlrouter
命令并提供
选项,其中是在线实例的类似 URI 的连接字符串。MySQL Router 连接到实例并使用包含的元数据缓存插件来检索元数据,包括服务器实例地址列表及其角色。例如:
--bootstrap=
instance
instance
$> 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 |
+--------+