MySQL 路由器的工作原理是在应用程序和 MySQL 服务器之间建立连接。应用程序正常连接到路由器,就像连接到普通的 MySQL 服务器一样。每当应用程序连接到路由器时,路由器都会从其知道的候选池中选择合适的 MySQL 服务器,然后连接到该服务器。从那一刻起,路由器将在应用程序和 MySQL 之间转发所有网络流量,包括从 MySQL 返回的响应。
MySQL 路由器会缓存在线 MySQL 服务器列表,或者已配置的 InnoDB 集群的拓扑和状态。最初,当路由器启动时,列表会从路由器的配置文件中加载。此列表是在使用 --bootstrap
选项引导路由器时使用 InnoDB 集群服务器生成的。
为了保持缓存更新,元数据缓存组件会与包含元数据的 InnoDB 集群服务器之一保持打开的连接。它通过查询元数据库和 MySQL 性能架构中的实时状态信息来实现这一点。每当修改 InnoDB 集群时(例如,使用 MySQL Shell 添加或删除 MySQL 服务器),集群元数据都会更改,并且每当检测到集群状态更改时,MySQL 服务器的组复制插件都会实时更新 performance_schema 表。
当路由器检测到连接的 MySQL 服务器关闭时(例如,因为元数据缓存已断开连接并且无法再次连接),它会尝试连接到其他 MySQL 服务器,以从新的 MySQL 服务器获取元数据和 InnoDB 集群状态。
使用 MySQL Shell 删除集群元数据(例如,使用 dba.dropMetadataSchema()
)会导致路由器断开所有当前连接并禁止建立新连接。这将导致完全中断。
与关闭的 MySQL 服务器的应用程序连接将自动关闭。然后,它们必须重新连接到路由器,路由器会将它们重定向到在线 MySQL 服务器。