Keepalived 通过 VRRP 实现 VIP 故障漂移,配合 MySQL 主从(GTID)、健康检查脚本与 notify 机制,构建轻量高可用架构;主库异常时自动切 VIP 至备库并提升,应用直连 VIP 无感切换。

Keepalived 本身不直接管理 MySQL,但它能通过 VRRP 协议实现 VIP(虚拟 IP)的故障自动漂移,配合脚本监控 MySQL 健康状态,从而构建轻量、可靠、免依赖第三方组件的高可用 MySQL 架构(主从 + VIP 切换)。
核心思路:VIP + 主从复制 + Keepalived 健康检查
让 Keepalived 在主库节点上绑定一个对外服务的 VIP;当主库异常(如 mysqld 崩溃、复制中断、响应超时),Keepalived 检测失败后自动将 VIP 迁移到备库,同时触发提升操作(如 stop slave; reset master; grant replication 等可选),使备库快速接管读写流量。整个过程对应用透明,只需连接 VIP 即可。
MySQL 端关键配置要求
- 主从必须基于 GTID 复制:避免切换后位点错乱,确保 failover 后能准确定位同步起点
- 主从数据一致性需定期校验:使用 pt-table-checksum 工具,防止隐性数据差异导致切换后业务异常
- 从库开启 log_slave_updates:保证后续可能的级联切换或再从新主拉取 binlog
- 禁用 read_only=ON 的误操作风险:在主库上设为 OFF,在从库上设为 ON;但切换脚本中需动态控制,避免手动误写
Keepalived 配置要点与检测脚本
在 keepalived.conf 中定义 vrrp_instance,关键项包括:
华锐行业电子商务系统2.0采用微软最新的.net3.5(c#)+mssql架构,代码进行全面重整及优化,清除冗余及垃圾代码,运行速度更快、郊率更高。全站生成静态、会员二级域名、竞价排名、企业会员有多套模板可供选择;在界面方面采用DIV+CSS进行设计,实现程序和界面分离,方便修改适合自己的个性界面,在用户体验方面,大量使用ajax技术,更加易用。程序特点:一、采用微软最新.net3.5+MSSQL
- state MASTER/BACKUP:主库配 MASTER,备库配 BACKUP,优先级(priority)主库更高
- virtual_ipaddress:声明 VIP,如 192.168.10.100/24
- track_script:调用自定义检测脚本(如 check_mysql.sh),每 2 秒执行一次
- notify_master / notify_backup:分别指定主升备降时执行的脚本,用于启停复制、调整权限、刷新代理层等
检测脚本示例(check_mysql.sh):
#!/bin/bash
MYSQL_CMD="mysql -uhealth -pPassw0rd -h127.0.0.1 -P3306 -e 'SELECT 1' &>/dev/null
if $MYSQL_CMD; then
# 检查是否为可写主库(非只读 + 无复制延迟)
WRITABLE=$(
mysql -uhealth -pPassw0rd -e "SHOW VARIABLES LIKE 'read_only'" 2>/dev/null | \
grep -v "read_only" | awk '{print $2}'
)
DELAY=$(
mysql -uhealth -pPassw0rd -e "SHOW SLAVE STATUS\G" 2>/dev/null | \
grep "Seconds_Behind_Master:" | awk '{print $2}'
)
if [[ "$WRITABLE" == "OFF" ]] && ([[ -z "$DELAY" ]] || [[ "$DELAY" == "0" ]] || [[ "$DELAY" == "NULL" ]]); then
exit 0
fi
fi
exit 1










