MySQL 路由器的使用不需要特定的库或接口。除了管理 MySQL 路由器实例外,您可以像使用典型的 MySQL 实例一样编写您的应用程序。
使用 MySQL 路由器时唯一的区别在于您如何连接到 MySQL 服务器。启动时使用单个 MySQL 连接并且不测试连接错误的应用程序必须更新。这是因为 MySQL 路由器在尝试连接时重定向连接,并且不读取数据包或执行分析。如果 MySQL 服务器出现故障,路由器会将连接错误返回给应用程序。
出于这些原因,应用程序应编写为测试连接错误,并在遇到错误时重试连接。如果您的应用程序中采用了这种技术或类似的技术,那么使用 MySQL 路由器将不需要任何额外的工作。
以下内容更深入地说明了您可能希望使用 MySQL 路由器的原因,并探讨了从应用程序的角度来看如何使用它。
MySQL 路由器有几种可能的场景,包括
作为一名开发者,我希望我的应用程序连接到一个服务,以便它默认获得一个连接到组复制集群的当前主节点的连接。
作为一名管理员,我希望设置多个服务,以便 MySQL 路由器在每个高可用副本集中监听不同的端口。
作为一名管理员,我希望能够在端口 3306 上运行连接路由服务,以便对用户或应用程序更透明。
作为一名管理员,我希望为每个连接路由服务配置路由策略,以便我可以指定返回主节点还是从节点。
使用 MySQL 路由器的流程如下
MySQL 客户端或连接器连接到 MySQL 路由器,例如端口 6446。
路由器检查是否有可用的 MySQL 服务器。
路由器打开连接到合适的 MySQL 服务器。
路由器在应用程序和 MySQL 服务器之间来回转发数据包
如果连接的 MySQL 服务器出现故障,路由器会断开应用程序的连接。应用程序可以随后尝试重新连接到路由器,路由器然后选择不同的可用 MySQL 服务器。
应用程序连接到 MySQL 路由器,路由器将应用程序连接到一个可用的 MySQL 服务器。
此示例演示了一个连接如何透明地连接到 InnoDB 集群实例之一。由于此示例使用一个沙箱化的 InnoDB 集群,其中所有实例都在同一个主机上运行,因此我们检查 port
状态变量以查看连接了哪个 MySQL 实例。
使用 MySQL 客户端连接到 MySQL 路由器,例如
$> mysql -u root -h 127.0.0.1 -P 6446 -p
这些端口号取决于您的配置,但请比较此示例中的端口
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3310 |
+--------+
1 row in set (0.00 sec)
总结一下,客户端(应用程序)连接到端口 6446,但连接到端口 3310 上的 MySQL 实例。
以下是使用 MySQL 路由器的建议。
在与应用程序相同的主机上安装和运行 MySQL 路由器。有关原因列表,请参阅 第 3 章,部署 MySQL 路由器。
使用
bind_port = 127.0.0.1:<port>
在配置文件中将路由器绑定到本地主机。或者,在 Linux 上,禁用 TCP 连接(请参阅--conf-skip-tcp
)并将此限制为仅使用 Unix 套接字连接(请参阅--conf-use-sockets
)。