MySQL 路由器的使用不需要特定的库或接口。除了管理 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 路由器。有关原因列表,请参阅第三章,*部署 MySQL 路由器*。
在配置文件中使用
bind_port = 127.0.0.1:<port>
将路由器绑定到 localhost。或者,在 Linux 上,禁用 TCP 连接(请参阅--conf-skip-tcp
),并将其限制为仅使用 Unix 套接字连接(请参阅--conf-use-sockets
)。