目录
在数字化时代,数据是企业的核心资产,而数据库的可靠性直接决定了业务的连续性。传统单节点 MySQL架构存在单点故障风险,一旦宕机,将导致业务中断、数据丢失等严重后果。尤其是在电商秒杀、金融交易等场景中,数据库的持续可用性(High Availability,HA)已成为系统设计的刚性需求。
一:案例概述
目前 MySQL 已经成为市场上主流数据库之一,考虑到业务的重要性,MySQL数据库单点问题已成为企业网站架构中最大的隐患。随着技术的发展,MHA的出现就是解决 MySQL 单点的问题。另外随着企业数据量越来越庞大,数据库的压力又成为企业的另一个瓶颈,MySQL多主多从架构的出现可以减轻 MySQL本身的压力。本章将主要围绕 “MySQL 主主复制+Keepalived+HAProxy”这一经典高可用架构展开,通过理论结合实践,解析如何通过开源工具实现数据库的故障自动转移、负载均衡和读写分离。
1.什么是MySQL高可用
MySQL 高可用(High Availability)是指通过冗余设计,确保数据库服务在单节点故障、网络中断或硬件损坏等异常情况下,仍能持续对外提供服务,同时保证数据一致性。其核心目标是实现、“零停机、零数据丢失”的业务连续性。
2.方案组成
MySQL 主主复制 + Keepalived + HAProxy 的高可用方案由三部分组成:
- MySQL 主主复制:两台 MySQL 实例互为主从,双向同步数据,均支持读写操作提供几余和扩展能力。
- Keepalived:通过 VRRP 协议管理虚拟 IP(VIP),监控 MySQL 状态,故障时自动将 VIP 漂移至存活节点,确保服务地址不变。
- HAProxy:作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除。
3.优势
- 高可用性:Keepalived 实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。
- 读写扩展:主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力。
- 灵活扩展:可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)。
运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群
4.案例环境
主机 | 操作系统 | IP | 应用 |
Master1 | openEuler | 192.168.10.101 | mysql |
Master2 | openEuler | 192.168.10.102 | mysql |
Keepalived1 | openEuler | 192.168.10.105 | Keepalived,haproxy |
Keepalived2 | openEuler | 192.168.10.104 | Keepalived,haproxy |
(1)案例需求
本案例要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业务。
(2)实现思路
安装 MySQL 数据库;
配置 MySQL 互为主从;
安装 haproxy 软件并配置复制均衡;
安装 keepalived 软件并配置故障转移;
模拟 master 故障切换
二:案例实施
1.配置mysql双主复制
对于 MySQL 的主主架构,其实原理就是两台服务器 Master1、Master2 互为主从,双向复制
(1)在Master1 /etc/my.cnf 中修改或者增加下面内容。
(2) 在Master2 /etc/my.cnf 中修改或者增加下面内容。
(3)重启 MySQL 服务。(Master1、Master2 都执行)
(4)登录 MySQL 程序,给从服务器授权。(Master1、Master2 都执行)
查看两台master状态
master1
master2
(5)登录MySQL,配置同步
master1
启动同步
查看slave状态,确保以下两个值为YES
Master2
启动同步
查看slave状态,确保以下两个值为YES
2.安装haproxy
两台 keepalived 都执行
HAProxy 是一个开源的高性能负载均衡器和代理工具,支持 TCP/HTTP 应用的流量分发,具备健康检查、SSL 终止、会话保持等功能,广泛应用于Web 服务器集群、数据库读写分离及 API 网关场景,以高效稳定的特性提升系统可用性和扩展能力。
(1)关闭SELinux 和防火墙
(2)安装haproxy
(3)编辑haproxy配置文件
(4)检测配置文件,并启动服务
(5)测试
登录MySQL,创建测试用户test
验证
3.安装keepalived
两台keep alived 都执行
Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断,常用于数据库、Web 服务等集群环境,提升系统可性并简化故障恢复流程。
(1)编辑配置文件
keepalived1
启用 nopreempt 的作用:
节点 A(优先级 100,配置 nopreempt)故障节点 B成为 Master。
节点 A 恢复 → 不触发抢占,节点 B继续作为 Master,VIP 不切换。
仅当节点 B 故障时,节点 A 才会重新成为 Master。
keepalived2配置
(2)测试
keepalived1
keepalived2
停止keepalived1
keepalived2
监控脚本
编写一个监控脚本并启动keep alived
此处两台主机均配置为 BACKUP,因此哪台先运行 keepalived,VIP 就在哪台上。本案例刚开始 VIP 运行在 keepalivedl 上
在 keepalived1 测试査看 VIP(注意査看 VIP 只能用 ip 命令,ifconfig 不显示VIP)
(4)测试使用VIP连接mysql