MySQL Router原理

MySQL MGR实现多个数据库之间的数据复制,在多主模式下,保证数据的一致性;而在单主模式下,当主库不可用时,MGR会自动选择一个新的主库,新主库的IP地址或者端口可能都会发生变化,但是对于前端应用,无法识别到MGR角色转换,应用还是会连接到原来的主库,导致连接失败。

MySQL InnoDB Cluster是基于MySQL MGR(MySQL Group Replication)复制方案,和MySQL Router,MySQL Shell提供MySQL数据库完整的高可用解决方案。MySQL Router是InnoDB Cluster的一部分,在应用和后端MySQL Server之间提供透明路由的轻量级中间件。

MySQL Shell是MySQL数据库管理工具,通过MySQL Shell获取MySQL InnoDB Cluster集群信息,生成Json文件,MySQL Router根据MySQL Shell提供的Json文件,获取到MySQL InnoDB Cluster的集群信息,根据这些集群信息,MySQL Router连接到MySQL InnoDB Cluster中一台服务器,实时读取集群信息,当集群状态发生改变,例如角色切换,节点被剔除集群等情况,MySQL Router可以实时获取最新的状态信息,这些状态信息,都缓存在MySQL Router的服务器内存中,MySQL Router可以根据这些信息,将应用连接路由到可用的MySQL数据库服务器。使用MySQL Router,应用不需要关心目前可用的MySQL服务器运行在哪些IP或者端口,对应用而言,他们只需要连接到MySQL Router即可。

在MySQL高可用方案中,如果只有一台MySQL Router ,那么MySQL Router就有可能成为单点故障,所以MySQL Router也需要部署高可用架构,MySQL Router的高可用架构可通过keepalived实现,这里主要介绍MySQL的高可用方案,MySQL Router的高可用就不在过多介绍了。除了高可用,MySQL Router集群节点可实现读写分离方案,将写操作都路由到Primary节点,而读操作路由到Replicate节点。如果存在多个备库,MySQL Router可以读操作路由到不同的Replicate节点执行,实现简单的loadbanancing操作。

对于非MGR的主从方案,MySQL Router也提供loadbanlancing功能,但是MySQL Router目前不能实时获取角色切换信息,MySQL Router会将应用连接路由到配置文件里指定的可用服务器,如果发现路由的MySQL服务器不可用,MySQL Router会返回连接失败等信息给应用端。对于新的连接,MySQL Router会将连接直接路由到可用的MySQL服务器。