目录
什么是 MySQL 高可用
MySQL 高可用(High Availability)是指通过冗余设计,确保数据库服务在单节点故障、网络中断或硬件损坏等异常情况下,仍能持续对外提供服务,同时保证数据一致性。其核心目标是实现“零停机、零数据丢失” 的业务连续性。
1、方案组成
MySQL 主主复制 | 两台 MySQL 实例互为主从,双向同步数据,均支持读写操作提供几余和扩展能力 |
Keepalived | 通过 VRRP 协议管理虚拟IP(VIP),监控 MySQL 状态,故障时自动将 Vip 漂移至存活节点,确保服务地址不变 |
HAProxy | 作为反向代理和负载均衡器,将流量分发至 MySQL 节点,支持健康检查、读写分离(可选)和故障节点自动剔除 |
2、优点
高可用性 | Keepalived 实现秒级故障切换,HAProxy健康检查确保流量仅路由到正常节点,避免单点故障 |
读写扩展 | 主主架构支持双节点并发写入,提升写入性能;HAProxy可配置读写分离,利用备节点分担读压力 |
灵活扩展 | 可横向扩展 HAProxy 或 MySQL 节点,支持动态调整负载均衡策略(如轮询、权重) |
案例环境
主机 | 操作系统 | IP 地址 | 应用 |
---|---|---|---|
Master1 | openEuler 24.03 | 192.168.10.101 | Mysql8 |
Master2 | openEuler 24.03 | 192.168.10.102 | Mysql8 |
Keepalived1 | openEuler 24.03 | 192.168.10.103 | Keepalived、haproxy |
Keepalived2 | openEuler 24.03 | 192.168.10.104 | Keepalived、haproxy |
案例需求
本案例要求通过 MHA 监控 MySQL 数据库在故障时进行自动切换,不影响业务。
案例实现思路
- 安装 MySQL 数据库:
- 配置 MySQL互为主从;
- 安装 haproxy 软件并配置复制均衡;
- 安装 keepalived 软件并配置故障转移;
- 模拟 master 故障切换。
案例实施
在 Master1、Master2 服务器上安装 MySQL 数据库,数据库安装完后进行主从配置。
1.配置 mysql 双主复制
对于 MySQL 的主主架构,其实原理就是两台服务器 Master1、Master2 互为主从,双向复制,以下步骤在Master1、Master2同时执行
(1).在/etc/my.cnf 中修改或者增加下面内容
Master1
Master2
(2).重启MySQL服务
(3).登录 MySQL 程序,给从服务器授权。
[root@localhost ~]# mysql -uroot -ppwd123
mysql> create user 'myslave'@'192.168.10.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%';
Query OK, 0 rows affected (0.01 sec)
mysql> alter user 'myslave'@'192.168.10.%' identified with mysql_native_password by '123456';
Query OK, 0 rows affected (0.01 sec)
#MySQL 8.0默认使用caching_sha2_password 认证插件,将mysql_native_password 替换为旧版认证插件,确保从库能兼容
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1181 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
其中 File 列显示日志名,Position 列显示偏移量,这两个值在后面配置从服务器的时候需要。Slave 应从该点上进行新的更新。
(4).登录 MySQL,配置同步。
Master1
按主服务器结果更改下面命令中 master_log_file 和 master_log_pos 参数。
启动同步
查看slave状态,确保以下两个值为yes
Master2
按主服务器结果更改下面命令中 master_log_file 和 master_log_pos 参数。
启动同步
查看slave状态,确保以下两个值为yes
2.安装haproxy
HAProxy 是一个开源的高性能负载均衡器和代理工具,支持 TCP/HTTP 应用的流量分发,具备健康检查、SSL终止、会话保持等功能,广泛应用于Web服务器集群、数据库读写分离及 API 网关场景,以高效稳定的特性提升系统可用性和扩展能力。
该阶段操作在 Keepalived1、Keepalived2 都要执行
(1).关闭防火墙和安全机制

(2).安装haproxy
(3).编辑 haproxy 配置文件

(4).检测配置文件,并启动服务
(5).测试
3.安装 keepalived
Keepalived 是一个用于实现系统高可用性和负载均衡的工具,通过 VRRP(Virtual Router Redundancy Protocol)等协议管理虚拟 IP 地址,持续监测服务器健康状态,当主节点故障时自动将流量切换至备用节点,确保服务不中断,常用于数据库、Web 服务等集群环境,提升系统可靠性并简化故障恢复流程。
该阶段操作在 Keepalived1、Keepalived2 都要执行
(1).安装 keepalived
(2).编辑haproxy配置文件
Keeppalived1 配置
添加监控脚本并启动 keepalived
[root@keepalived1 ~]# vim /etc/keepalived/chk.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];
then
/etc/init.d/keepalived stop
fi
[root@keepalived1 ~]# chmod +x /etc/keepalived/chk.sh
[root@keepalived1 ~]# systemctl restart keepalived
Keeppalived12配置
(3).编写一个监控脚本并启动 keepalived
vim /etc/keepalived/chk.sh
###编辑内容###
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc-l) -eq 0 ];
then /etc/init.d/keepalived stop
echo "keepalived已关闭"
fi
chmod +x /etc/keepalived/chk.sh
此处两台主机均配置为 BACKUP,因此哪台先运行 keepalived,Vip 就在哪台上。本案例刚开始 Vip 运行在 keepalivedl 上
在 keepalived1 测试査看 VIP(注意査看 VIP 只能用 ip 命令,ifconfig 不显示Vip)