
7.利用MySQL Router构建读写分离MGR集群 | 深入浅出MGR(文末有
1. 部署MySQL Router
2. 启动mysqlrouter服务
3. 确认读写分离效果
4. 确认只读负载均衡效果
5. 确认故障自动转移功能
6. 小结
参考资料、文档
免责声明
本文介绍如何在MGR集群前端部署MySQL Router以实现读写分离、读负载均衡,以及故障自动转移。
MySQL Router是一个轻量级的中间件,它采用多端口的方案实现读写分离以及读负载均衡,而且同时支持mysql和mysql x协议。
建议把MySQL Router部署在应用服务器上,每个应用服务器都部署一套,这样应用程序可以直接连接本机IP,连接的效率更高,而且后端数据库发生变化时,程序端也无需修改IP配置。
1. 部署MySQL Router
MySQL Router第一次启动时要先初始化:
如果想自定义名字和目录,还可以在初始化时自行指定 --name 和 --directory 选项,这样可以实现在同一个服务器上部署多个Router实例,参考这篇文章:MySQL Router可以在同一个系统环境下跑多实例吗
2. 启动mysqlrouter服务
这就初始化完毕了,按照上面的提示,直接启动 mysqlrouter 服务即可:
可以看到 mysqlrouter 服务正常启动了。
mysqlrouter 初始化时自动生成的配置文件是 /etc/mysqlrouter/mysqlrouter.conf,主要是关于R/W、RO不同端口的配置,例如:
可以根据需要自行修改绑定的IP地址和端口,也可以在初始化时指定 --conf-base-port 选项自定义初始端口号。
3. 确认读写分离效果
现在,用客户端连接到6446(读写)端口,确认连接的是PRIMARY节点:
同样地,连接6447(只读)端口,确认连接的是SECONDARY节点:
4. 确认只读负载均衡效果
MySQL Router连接读写节点(Primary节点)默认的策略是 first-available,即只连接第一个可用的节点。Router连接只读节点(Secondary节点)默认的策略是 round-robin-with-fallback,会在各个只读节点间轮询。
保持6447端口原有的连接不退出,继续新建到6447端口的连接,查看 server_uuid,这时应该会发现读取到的是其他只读节点的值,因为 mysqlrouter 的读负载均衡机制是在几个只读节点间自动轮询。在默认的 round-robin-with-fallback 策略下,只有当所有只读节点都不可用时,只读请求才会打到PRIMARY节点上。
关于Router的连接策略,可以参考 FAQ文档中的:24. MySQL Router可以配置在MGR主从节点间轮询吗,或者MySQL Router官方文档:routing_strategy参数/选项
5. 确认故障自动转移功能
接下来模拟PRIMARY节点宕机或切换时,mysqlrouter 也能实现自动故障转移。
登入MGR集群任意节点:
回到前面连接6446端口的那个会话,再次查询 server_uuid,此时会发现连接自动断开了:
这就实现了自动故障转移。
至此,利用MySQL Router配合GreatSQL构建一套支持读写分离、读负载均衡以及故障自动转移的MGR集群就部署完毕了。
6. 小结
本文介绍了如何利用MySQL Router实现读写分离、读负载均衡,以及故障自动转移,利用MySQL Router可以提升应用端的透明性,后端数据库发生一些变化时,应用端无需跟着频繁变更。
参考资料、文档
MySQL 8.0 Reference Manual
https://dev.mysql.com/doc/refman/8.0/en/group-replication.html
数据库内核开发 - 温正湖
https://www.zhihu.com/column/c_206071340
Group Replication原理 - 宋利兵
https://mp.weixin.qq.com/s/LFJtdpISVi45qv9Wksv19Q
深入浅出MGR专栏
01.MGR简介 | 深入浅出MGR
02.组复制技术架构 | 深入浅出MGR
03.安装部署MGR集群 | 深入浅出MGR
04. 利用MySQL Shell安装部署MGR集群 | 深入浅出MGR
05. MGR管理维护 | 深入浅出MGR
06. MGR状态监控 | 深入浅出MGR
免责声明
因个人水平有限,专栏中难免存在错漏之处,请勿直接复制文档中的命令、方法直接应用于线上生产环境。请读者们务必先充分理解并在测试环境验证通过后方可正式实施,避免造成生产环境的破坏或损害。
