规避单点故障,MySQL 8.0 MGR 软负载怎么选?
毛思平,12 年 IT 工作经验,7 年数据库管理维护经验,现就职于中国农业银行软开中心,从事数据库应用研究。
一、背景简介
近期笔者所在部门计划批量上线一批基于 MySQL 8.0 社区版的系统,数据库部署架构为 MySQL MGR 一主两从并由 MySQL Router 组件实现读写分离,为了规避 MySQL Router 单点故障,提高系统稳定性架构设计过程中增加了软负载和以及 Keepalived,并将软负载及 Keepalived 部署在管理节点,管理节点主备部署达到高可用目的,整体架构如下图。
另外目前市场上负载软件比较多但大部分面向 web 应用,笔者梳理发现 Haproxy 和 Nginx 在数据库方面有一定应用案例,尤其 Haproxy 在 MySQL 主从复制方面应用较广。那么这两款软负载是否可以应用在 MySQL8.0 MGR 上,谁的性能更好呢,该如何选择呢?带着疑问笔者做了一系列性能比较。
二、环境配置
硬件配置
测试硬件环境均采用虚拟机,具体配置如下表:
软件配置
参与测试软件版本配置如下表:
三、软件配置
关于 MySQL MGR 配置网上有很多相关教程此处不赘述,以下是关于软负载及高可用插件关键配置。
Keepalived 配置
完成 keepalived 软件安装后,只需要在/etc/keepalived 目录下修改 keepalived.conf 文件,修改完成后执行 systemctl start keepalived 即可,需要修改地方如下:
探活脚本 Checkalived.sh 配置如下以 Nginx 为例:
以上配置主备管理节点一致即可。
Haproxy 配置
完成 Haproxy 安装后,只需在/etc/haproxy 修改 haproxy.cfg 文件后执行 systemctl start haproxy 即可。配置文件主要修改以下内容:
Nginx 配置
完成 Haproxy 安装后,只需在/etc/nginx/conf 下修改 nginx.conf,在 stream 方法下添加以下内容即可,添加完成后执行 systemctl start nginx 即可启动服务,添加如下:
四、测试方法
五、测试结果
负载软件负载分发是否均衡
通过编写批量执行 SQL 的形式,访问数据库,并统计两款负载软件各节点分发情况。Haproxy 通过软件自带图行界面统计,Nginx 由于采用的是免费版通过后台日志统计负载分发情况。
批量 SQL 核心算法如下:
Haproxy 发起 64 次查询后各个节点会话分发情况,如下图。
Nginx 发起 64 次查询后各个节点会话分发情况,如下图。
测试结果如下:
负载软件是否能识别 MySQL Router 单点故障
负载软件负载分发性能比较
通过批量执行空查询 SQL:select @@hostname,统计相同并发下不同负载软件分发耗时测算负载软件负载分发效率,测试结果如下:
负载软件高可用验证
当在主节点杀死负载程序后,虚拟 IP 切换到了备节点,通过虚拟 IP 能正常登陆数据库,以 Nginx 为例。
1)在主管理节点杀死 Nginx 进程:
2)在主节点查看虚拟 IP 是否存在:
3)在备节点查看虚拟 IP 是否切换过来,判断 Keepalived 是否主备切换。
4)在以虚拟 IP 登陆数据库验证备节点负载分发是否正常。
由上测试可以看出该架构满足软负载高可用需求,即管理节点软负载故障,备节点通过 keepalived 探测异常后接管升级成主。同样方法测试 Haproxy 也满足,在此不赘述。
六、结论
功能方面,Haproxy 和 Nginx 两款软负载软件均能实现多并发读写均衡分发,在 MySQL Router 出现故障时 Haproxy 和 Nginx 均能识别故障并转移连接到正常运行节点。Haproxy 和 Nginx 均能在 keepalived 下实现高可用。
性能方面,在并发能力发面,同等软硬件条件 Haproxy 与 Nginx 相差不大,相同并发量两个负载软件分发耗时相近。
易用性方面,Haproxy 提供图形界面能直观查看各个服务端口负载分配情况,连接时长,失败连接次数,并能直观显示故障节点等。Nginx 无图形管理界面,需要单独加载日志监控模块,需要手动配置日志输出,从后台日志查找个节点连接情况比较麻烦。
高可用性方面,两款软负载+Keepalived 均能规避 MySQL Router 单点故障,同时主备模式的设计使负载软件自身也具备高可用,避免单点故障对整个集群架构造成影响。
原文链接:规避单点故障,MySQL 8.0 MGR软负载怎么选?
评论