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