1.1什么是 MySQL 高可用
MySQL 高可用(High Availability)是指通过冗余设计,确保数据库服务在单节点故障、网络中断或硬件损坏等异常情况下,仍能持续对外提供服务,同时保证数据一致性。其核心目标是实现 "零停机、零数据丢失"的业务连续性。
1.2方案组成
MySQL 主主复制 + Keepalived + HAProxy 的高可用方案由三部分组成:
MySQL 主主复制 :两台 MySQL 实例互为主从,双向同步数据,均支持读写操作,提供几余和扩展能力。
Keepalived :通过 VRRP 协议管理虚拟 IP(VIP),监控 MySQL 状态,故障时自动将 VIP 漂移至存活节点,确保服务地址不变。
:作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除。
1.3优势
高可用性: Keepalived实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障。
读写扩展 :主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力。
灵活扩展:可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重)。运维友好基于开源工具,无厂商锁定,社区支持丰富,适合自建数据库集群
(5)登录 MySQL 程序,创建测试用户,后续验证实验时使用。(Master1、Master2都执行)


2.配置 mysql 双主复制
对于 MySQL 的主主架构,其实原理就是两台服务器 Master1、Master2 互为主从,双向复制
(1)在Masterl /etc/my.cnf 中修改或者增加下面内容

(2)在Master2 /etc/my.cnf 中修改或者增加下面内容。

(3)重启 MySQL 服务。(Master1、Master2 都执行)

(4)登录 MySQL 程序,给从服务器授权。(Master1、Master2 都执行)

(5)登录 MySQL,配置同步。(Master1、Master2 都执行)
Master1
按主服务器结果更改下面命令中 master_log file 和 master log pos 参数。

启用同步

查看 Slave 状态,确保以下两个值为 YES

3.安装 haproxy
HAProxy 是一个开源的高性能负载均衡器和代理工具,支持 TCP/HTTP 应用的流量分发,具备健康检查、SSL 终止、会话保持等功能,广泛应用于Web 服务器集群、数据库读写分离及 API 网关场景,以高效稳定的特性提升系统可用性和扩展能力。
该阶段操作在 Keepalived1、Keepalived2 都要执行
(1)关闭SELinux和防火墙
(2)安装haproxy

内容如下更改部分红色标注(Keepalived1,Keepalived2 配置相同)

(4)检测配置文件,并启动服务

(5)测试
使用测试用户 test,访问 haproxy 的代理端口登录 mysq1
root@localhost \~\]#mysql -utest -p123456 -h192.168.10.103 -P3306 4.安装 keepalived Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断,常用于数据库、Web 服务等集群环境,提升系统可靠性并简化故障恢复流程。 (1)关闭 SELinux和防火墙  (2)安装 keepalived  (3)编辑 haproxy配置文件 Keeppalived1 配置,红色标注为两台不同之处,需要注意  添加监控脚本并启动 keepalived \[root@localhost \~\]#vim /etc/keepalived/chk.sh  \[root@localhost \~\]#chmod +x /etc/keepalived/chk.sh \[root@localhost \~\]#systemctl start keepalived Keeppalived2配置,红色标注为两台不同之处,需要注意   添加监控脚本并启动 keepalived \[root@localhost \~\]#vim /etc/keepalived/chk.sh \[root@localhost \~\]#chmod +x /etc/keepalived/chk.sh \[root@localhost \~\]#systemctl start keepalived \[root@localhost \~\]#ip a  (4)编测试使用 VIP连接 mysq1 \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100 5.测试故障转移 1.关闭 master1 主机,测试使用 vip 能否正常访问 mysql 数据库关闭 master1后,因为 master1、master2 通过 haproxy 负载均衡,master1关闭后,haproxy 检测其状态异常,会从负载中移除,不进行流量转发,依然可以通过 vip 访问 mysql,实现 mysql 的高可用 \[root@localhost \~\]#ping 192.168.10.101 \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100 2.接着关闭 keepalived1,测试使用 vip 能否正常访问 mysql 数据库 关闭 keepalived1 后,keepalived 检测到主节点离线,VIP 192.168.10.100会漂移至 keepalived2 节点,mysql 依然可以访问 \[root@localhost \~\]#ip a  \[root@localhost \~\]#mysql -uroot -p123456 -h192.168.10.100