一、高可用集群核心基础认知
1.1 主流集群类型
企业运维三大核心集群架构,分工明确、适配不同业务场景:
LB负载均衡集群:核心解决并发压力,代表工具:LVS、HAProxy、Nginx,用于Web、API网关流量分发
HA高可用集群:核心解决单点故障,代表工具:Keepalived,用于网关、数据库、Redis核心服务容灾
HPC高性能集群:核心解决算力瓶颈,多用于大数据、科学计算场景
1.2 高可用核心指标与SLA
系统可用性公式:A= MTBF/(MTBF+MTTR)
MTBF:平均无故障运行时间(越长越好)
MTTR:平均故障修复时间(越短越好,高可用核心优化点)
行业通用SLA停机标准(按月统计):
99.9%:月停机≤43.2分钟
99.99%:月停机≤4.32分钟
99.999%:月停机≤21.6秒(金融、核心业务标配)
1.3 故障类型与高可用解决方案
业务故障分为两类:硬件损耗、系统设计缺陷、软件Bug均会引发单点中断。
唯一根治方案:服务冗余+自动故障切换
主备架构(active/passive):一主一备,主故障备接管,资源利用率适中,生产最常用
双主架构(active/active):双节点同时对外服务,资源利用率最大化,适合高并发场景
1.4 核心协议:VRRP虚拟路由冗余协议
VRRP是Keepalived的核心底层协议,专门解决静态网关、网关单点故障问题,广泛应用于物理路由、软件高可用场景。
核心术语:
VRID:虚拟路由器唯一标识(0-255),同集群节点必须一致
VIP:虚拟IP,业务统一访问入口,随节点状态自动漂移
VMAC:虚拟MAC地址,格式
00-00-5e-00-01-VRIDMaster:主节点,正常承载业务流量
Backup:备节点,实时监听主节点状态,故障时接管
Priority:节点优先级(1-254),数值越高优先级越高
VRRP核心特性:周期性心跳通告、支持抢占/非抢占模式、支持密码认证、毫秒级故障切换。
二、Keepalived 核心原理与架构
2.1 Keepalived 简介
Keepalived是基于C语言开发的开源高可用软件,原生适配LVS四层负载均衡,依托VRRP协议实现VIP漂移、节点健康检测、故障自动切换,是Linux生态高可用的标准工具。
核心能力:
基于VRRP协议实现虚拟IP地址流动,实现业务无感知切换
自动生成、维护LVS/IPVS四层负载均衡规则
四层/七层全方位健康检测,自动剔除故障节点
支持自定义脚本联动,适配HAProxy、Nginx、MySQL等所有服务高可用
支持BFD快速故障检测,实现毫秒级切换
2.2 核心组件架构
Keepalived用户空间核心组件,各司其职、协同工作:
VRRP Stack:核心模块,负责VRRP心跳通告、节点状态协商、VIP漂移
Checkers:健康检测模块,实时监控后端服务、本机进程状态
IPVS Wrapper:LVS规则管理模块,自动生成、清理负载均衡规则
System Call:状态回调模块,节点主备切换时触发自定义脚本
SMTP:邮件告警模块,故障切换时主动推送通知
WatchDog:进程守护,监控Keepalived自身进程状态
2.3 环境部署前置要求
生产部署必须满足以下条件,避免集群异常:
所有节点时间同步(chrony/ntp),防止心跳时间偏差导致误切换
关闭防火墙、SELinux,放行VRRP组播/单播流量
可选:节点主机名互通、SSH密钥互信(方便批量运维)
三、Keepalived 安装与核心文件详解
3.1 快速安装(CentOS/RHEL)
# 安装软件
dnf install keepalived -y
# 启动并设置开机自启
systemctl start keepalived systemctl enable keepalived
# 查看进程状态
ps axf | grep keepalived
3.2 核心文件路径
主程序:
/usr/sbin/keepalived主配置文件:
/etc/keepalived/keepalived.conf配置示例:
/usr/share/doc/keepalived/服务单元文件:
/lib/systemd/system/keepalived.service环境配置文件:
/etc/sysconfig/keepalived
3.3 日志功能开启(运维必备)
默认日志分散,手动配置专属日志文件,方便故障排查:
第一步:修改Keepalived环境配置
vim /etc/sysconfig/keepalived
# 添加日志级别参数
KEEPALIVED_OPTIONS="-D -S 6"
第二步:配置rsyslog日志收集
vim /etc/rsyslog.conf
# 新增专属日志路径
local6.* /var/log/keepalived.log
# 重启服务生效
systemctl restart keepalived rsyslog
# 实时查看日志
tail -f /var/log/keepalived.log
四、配置文件全语法详解(生产核心)
Keepalived配置文件分为三大核心模块,结构清晰、层级分明:全局配置、VRRP实例配置、LVS负载均衡配置。
4.1 全局配置 global_defs
全局生效参数,定义告警、路由标识、网络优化规则:
global_defs {
# 故障告警接收邮箱
notification_email {
594233887@qq.com
}
# 发件人邮箱
notification_email_from keepalived@KA1.org
# 邮件服务器地址
smtp_server 127.0.0.1 smtp_connect_timeout 30
# 节点唯一标识(建议主机名)
router_id KA1
# 跳过重复通告报文校验,提升性能
vrrp_skip_check_adv_addr
# 免费ARP报文间隔,优化VIP切换后网络缓存
vrrp_garp_interval 1 vrrp_gna_interval 1
# VRRP组播地址
vrrp_mcast_group4 224.0.0.18
# 严格模式(生产建议注释,限制过多)
# vrrp_strict
}
重点注意:开启vrrp_strict后,无法使用单播、无VIP启动服务,生产环境默认关闭。
4.2 VRRP实例配置(核心)
定义虚拟路由器、VIP、主备状态、优先级、认证规则,是高可用的核心配置:
vrrp_instance VI_1 {
# 节点状态:MASTER主节点 / BACKUP备节点
state MASTER
# 绑定物理网卡
interface eth0
# 虚拟路由ID,同集群节点必须一致、全网唯一
virtual_router_id 20
# 节点优先级,主高备低
priority 100
# 心跳通告间隔1s
advert_int 1
# 认证配置(集群节点必须一致)
authentication {
auth_type PASS # 简单密码认证,AH加密认证不推荐
auth_pass 1111 # 密钥仅前8位生效
}
# 虚拟IP(业务访问入口)
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}
4.3 子配置文件拆分(复杂生产环境必备)
多集群、多VIP场景下,主配置文件臃肿难维护,可通过include引入子配置:
# 1. 创建配置目录
mkdir /etc/keepalived/conf.d
# 2. 主配置文件末尾引入所有子配置
include /etc/keepalived/conf.d/*.conf
五、企业主流架构实战部署
5.1 架构一:主备高可用架构(MASTER/BACKUP)
最稳定、生产使用率最高的架构,同一时间仅一台节点对外服务,故障自动切换。
Master节点配置:
global_defs {
notification_email {
594233887@qq.com
}
notification_email_from keepalived@KA1.org
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id KA1
vrrp_skip_check_adv_addr
vrrp_garp_interval 1
vrrp_gna_interval 1
vrrp_mcast_group4 224.0.0.18
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 20
priority 100 advert_int 1
authentication {
auth_type PASS auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}
Backup节点配置(仅修改3处):
vrrp_instance VI_1 {
state BACKUP # 状态改为备机
interface eth0
virtual_router_id 20
priority 80 # 优先级低于主节点
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}
5.2 抢占模式与非抢占模式优化
默认抢占模式:主节点恢复后,会立刻抢回VIP,容易导致业务抖动。生产推荐非抢占模式或延迟抢占。
非抢占模式配置(所有节点设为BACKUP):
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 20
priority 100 nopreempt # 开启非抢占
advert_int 1
}
延迟抢占模式:节点恢复后延迟10s抢占,规避启动不稳定问题:
preempt_delay 10
5.3 单播配置(跨网段集群必备)
默认VRRP通过组播通信,仅支持同网段;跨机房、跨网段集群需开启单播模式。
配置示例(节点互相指定对方IP):
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 20
priority 100
advert_int 1
# 单播配置
unicast_src_ip 172.25.254.20 # 本机IP
unicast_peer {
172.25.254.30 # 对端节点IP
}
}
注意:单播模式需关闭vrrp_strict,否则服务启动失败。
5.4 架构二:双主高可用架构(MASTER/MASTER)
解决主备架构资源闲置问题,两个VIP分别绑定两台节点,双节点同时对外服务,提升资源利用率。
节点1配置:VIP1主、VIP2备
vrrp_instance WEB_VIP {
state MASTER
virtual_router_id 50
priority 100
virtual_ipaddress {
172.25.254.50 dev eth0
}
}
vrrp_instance SQL_VIP {
state BACKUP
virtual_router_id 60
priority 80
virtual_ipaddress {
172.25.254.60 dev eth0
}
}
节点2配置:VIP1备、VIP2主
vrrp_instance WEB_VIP {
state BACKUP
virtual_router_id 50
priority 80
virtual_ipaddress {
172.25.254.50 dev eth0
}
}
vrrp_instance SQL_VIP {
state MASTER
virtual_router_id 60
priority 100
virtual_ipaddress {
172.25.254.60 dev eth0
}
}
六、通知脚本与邮件告警实战
Keepalived支持节点状态切换(主/备/故障)时自动触发脚本,实现实时邮件告警、业务联动。
6.1 脚本类型
notify_master:节点切换为主节点时触发notify_backup:节点切换为备节点时触发notify_fault:节点故障时触发
6.2 完整邮件告警部署
第一步:安装邮件工具
dnf install mailx s-nail sendmail -y
systemctl enable --now sendmail
第二步:配置邮箱发件(163/QQ邮箱)
vim /etc/mail.rc
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user=xxx@163.com
set smtp-auth-password=授权码
set from=xxx@163.com
set ssl-verify=ignore
第三步:编写告警脚本
vim /etc/keepalived/mail.sh
#!/bin/bash
mail_dest='594233887@qq.com'
mail_send()
{
mail_subj="$HOSTNAME 节点VIP状态切换"
mail_mess="`date +%F\ %T`: VRRP状态切换,$HOSTNAME 变为 $1 状态"
echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
case $1 in
master) mail_send master ;;
backup) mail_send backup ;;
fault) mail_send fault ;;
*) exit 1 ;;
esac
第四步:授权并挂载到VRRP实例
chmod +x /etc/keepalived/mail.sh
# 在vrrp_instance中添加
notify_master "/etc/keepalived/mail.sh master"
notify_backup "/etc/keepalived/mail.sh backup"
notify_fault "/etc/keepalived/mail.sh fault"
七、VRRP脚本监控(核心进阶)
通过vrrp_script自定义监控脚本,实现业务进程异常自动降权、VIP切换,解决Keepalived进程正常但业务宕机的盲区问题。
7.1 脚本核心参数
interval:检测间隔(秒)
timeout:检测超时时间
weight:权重加减(负数=故障降权)
fall/rise:连续失败/成功次数,切换状态
7.2 生产实战:HAProxy高可用联动
监控HAProxy进程,进程异常则自动降低节点权重,触发VIP切换:
第一步:编写HAProxy检测脚本
vim /etc/keepalived/scripts/haproxy.sh
#!/bin/bash
# 检测haproxy进程是否存活
/usr/bin/killall -0 haproxy
第二步:配置VRRP监控
# 定义监控脚本
vrrp_script check_haproxy {
script "/etc/keepalived/scripts/haproxy.sh"
interval 1
timeout 2
weight -30 # 故障权重减30,低于备机优先级
fall 2
rise 2
}
# 绑定到VRRP实例
vrrp_instance VI_1 {
...省略基础配置...
track_script {
check_haproxy
}
}
第三步:开启内核非本地绑定(VIP漂移后服务正常监听)
vim /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind = 1
sysctl -p
八、LVS+Keepalived 四层负载高可用实战
Keepalived原生支持IPVS/LVS,可直接配置四层负载均衡,自动管理后端RS节点、健康检测、故障剔除。
8.1 核心配置参数
delay_loop:后端节点检测间隔
lb_algo:调度算法(rr/wrr/lc/wlc)
lb_kind:集群模式(DR/NAT/TUN,生产DR为主)
persistence_timeout:会话保持时长
sorry_server:所有后端故障时的兜底服务器
8.2 LVS-DR模式完整实战
后端Web节点ARP缓存优化配置(所有RS节点执行):
# 绑定VIP到回环网卡
ip addr add 172.25.254.100/32 dev lo
# 关闭ARP应答冲突
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
Keepalived LVS配置:
virtual_server 172.25.254.100 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
protocol TCP
sorry_server 172.25.254.30 80 # 后端节点1
real_server 172.25.254.101 80 {
weight 1
TCP_CHECK {
connect_timeout 5
nb_get_retry 3 delay_before_retry 3
connect_port 80
}
}
# 后端节点2
real_server 172.25.254.102 80 {
weight 1
HTTP_GET {
url {path / status_code 200}
connect_timeout 1
}
}
}
九、生产最佳实践与故障排查
9.1 生产落地规范
核心业务优先使用非抢占/延迟抢占模式,避免业务抖动
所有负载均衡节点必须配置进程脚本监控,杜绝假活节点
跨网段集群使用单播模式,关闭严格模式
拆分配置文件,多集群独立管理,便于维护
开启日志+邮件告警,全程监控集群状态
9.2 常见故障解决
配置不生效:RHEL系列需停止并重启服务,禁止直接restart
VIP无法漂移:检查VRID是否唯一、优先级是否正确、防火墙是否放行
单播启动失败:关闭vrrp_strict严格模式
HAProxy切换后无法访问:开启ip_nonlocal_bind内核参数
十、架构总结
结合HAProxy七层负载均衡,我们可以搭建出企业终极高可用Web架构:Keepalived双主高可用 + HAProxy七层负载均衡 + 后端Web集群,彻底解决单点故障、实现流量智能分发、业务毫秒级容灾,满足99.999%高可用SLA标准。