Keepalived 是基于VRRP 虚拟路由冗余协议的软件实现,核心用于解决单点故障、实现服务高可用,原生为 IPVS 服务设计,也可适配 Nginx/HAProxy 等应用
一、前置基础:高可用集群与 VRRP
1. 高可用核心概念
- 集群类型:负载均衡(LB:LVS/HAProxy/Nginx)、高可用(HA:解决 SPoF 单点故障,如数据库 / Redis)、高性能计算(HPC);
- 系统可用性 :公式
A = MTBF/(MTBF+MTTR),核心通过降低 MTTR(平均故障恢复时间) 提升可用性,常用指标 99.9%/99.99%/99.999%; - 故障类型:硬件故障(设计缺陷、损耗、不可抗力)、软件故障(设计缺陷、bug);
- 高可用实现:建立冗余机制,分主备(active/passive)、双主(active/active),通过心跳检测实现状态切换。
2. VRRP 核心要点
VRRP 解决静态网关单点风险,分物理层(路由器 / 三层交换机)和软件层(Keepalived)实现,核心术语与机制:
- 核心术语:虚拟路由器(VRID 唯一标识,0-255)、VIP(虚拟 IP)、VMAC(00-00-5e-00-01-VRID)、master(主设备)、backup(备用设备)、priority(优先级,值越高越优先);
- 工作机制 :主设备周期性发送通告(心跳) ,含优先级等信息;支持抢占式 / 非抢占式,安全认证分无认证、简单字符认证、MD5;
- 工作模式:主备(单虚拟路由器)、双主(两个虚拟路由器互为主备)。
二、Keepalived 基础:架构与部署
1. 核心功能
- 基于 VRRP 实现VIP 地址漂移,完成主备切换;
- 为 VIP 节点自动生成 IPVS 规则;
- 检测 IPVS 集群后端 RS(真实服务器)健康状态;
- 提供脚本调用接口,支持 Nginx/HAProxy 等第三方服务高可用。
2. 架构组成(用户空间)
核心组件:vrrp stack(VIP 消息通告)、checkers(RS 健康检测)、IPVS wrapper(生成 IPVS 规则)、WatchDog(监控进程)、SMTP(邮件通知);辅助组件:配置解析器、IO 复用器、内存管理组件,对接内核空间 IPVS/NETLINK。
3. 部署基础
- 环境准备:节点时间同步(ntp/chrony)、关闭防火墙 / SELinux,可选主机名解析、SSH 密钥认证;
- 相关文件 :主程序
/usr/sbin/keepalived、主配置/etc/keepalived/keepalived.conf、系统服务/lib/systemd/system/keepalived.service; - 安装 :RHEL/CentOS 通过
dnf install keepalived -y安装,启动后通过ps axf | grep keepalived验证。
三、Keepalived 核心配置
配置文件分三部分:全局配置(global_defs) 、VRRP 实例配置(vrrp_instance) 、LVS 配置(virtual_server),核心配置语法与要点:
1. 全局配置(global_defs)
定义邮件通知、路由器标识、VRRP 优化参数,关键配置:
- 邮件配置:故障切换时的发送 / 接收邮箱、SMTP 服务器;
router_id:节点唯一标识,建议用主机名;vrrp_skip_check_adv_addr:跳过相同路由器的通告报文检查,提升性能;vrrp_strict:严格遵循 VRRP 协议,禁用建议(会限制 VIP、单播、IPv6);vrrp_garp_interval/vrrp_gna_interval:免费 ARP/NA 报文间隔,用于更新网络设备缓存。
2. VRRP 实例配置(vrrp_instance)
定义虚拟路由器核心参数,主备节点需保证virtual_router_id、auth_pass一致,关键配置:
state:MASTER(主)/BACKUP(备),非抢占模式下需全部设为 BACKUP;interface:绑定的物理网卡(如 eth0);priority:优先级(1-254),主节点高于备节点;advert_int:心跳通告间隔,默认 1s;authentication:认证类型(PASS 推荐,AH 不推荐),密钥仅前 8 位有效;virtual_ipaddress:配置 VIP,支持多 IP、指定网卡 / 标签;- 语法检测:
keepalived -t -f /etc/keepalived/keepalived.conf。
3. 高级配置技巧
- 日志功能 :修改
/etc/sysconfig/keepalived添加-S 6,在rsyslog.conf配置local6.* /var/log/keepalived.log,重启服务生效; - 子配置文件 :通过
include /path/*.conf拆分复杂配置,便于管理; - 非抢占模式 :添加
nopreempt,避免主节点恢复后抢占 VIP 导致网络抖动,需所有节点 state 为 BACKUP; - 抢占延迟 :
preempt_delay N,主节点恢复后延迟 N 秒抢占 VIP,默认 300s; - VIP 单播 :替代默认多播,减少网络拥塞,配置
unicast_src_ip(本机 IP)和unicast_peer(对端 IP),需禁用 vrrp_strict。
四、Keepalived 企业核心应用
1. 主备架构(单主)
最基础架构,一台主节点提供服务,备节点待机,主节点故障后 VIP 漂移至备节点,核心配置差异 :备节点state=BACKUP、priority更低,其余与主节点一致。
2. 双主 / 多主架构
解决单主架构资源利用率低的问题,多 VIP 分别绑定不同节点,节点互为主备:
- 双主:配置两个 VRRP 实例,节点 1 为实例 1 主、实例 2 备,节点 2 相反,各承载一个 VIP 服务;
- 三主:三个节点、三个 VRRP 实例,每个节点为一个实例的主、其余实例的备,优先级依次递减。
3. 状态通知脚本
故障切换时触发脚本(如邮件通知),核心配置与步骤:
- 脚本类型 :
notify_master(成为主节点)、notify_backup(转为备节点)、notify_fault(故障状态); - 配置要点 :全局开启
enable_script_security,指定script_user(如 root),在 VRRP 实例中绑定脚本; - 邮件配置 :安装
mailx/s-nail,配置/etc/mail.rc中的 SMTP 服务器 / 账号,编写脚本实现邮件发送。
4. 实现 IPVS 高可用
Keepalived 原生支持 IPVS,配置virtual_server实现 LVS 集群高可用,核心配置:
- 虚拟服务器 :
virtual_server VIP PORT,定义调度算法(rr/wrr/lc 等)、集群模式(NAT/DR/TUN,DR 常用)、协议(TCP/UDP); - 真实服务器 :
real_server RS_IP PORT,配置权重weight,健康检测方式; - 健康检测 :分传输层(
TCP_CHECK,检测端口连通性)、应用层(HTTP_GET/SSL_GET,检测 URL 响应码,如 200); - 容错机制 :
sorry_server,所有 RS 故障时自动切换至备用服务器。
5. 第三方应用高可用(VRRP Script)
通过自定义监控脚本实现 Nginx/HAProxy 等应用的高可用,核心两步:
- 定义 vrrp_script :指定监控脚本路径、检测间隔
interval、权重调整weight(负值,故障时降低节点优先级)、失败 / 成功次数fall/rise; - 调用脚本 :在 VRRP 实例中通过
track_script绑定自定义脚本,脚本返回非 0 时触发权重调整,实现 VIP 漂移。
- 核心原理:监控应用状态,异常时降低主节点优先级,使其低于备节点,触发主备切换。
五、关键实战要点
- LVS-DR 模式配置 :后端 RS 需在 lo 网卡绑定 VIP,修改内核参数
arp_ignore=1、arp_announce=2,避免 ARP 广播冲突; - 故障测试 :关闭主节点 Keepalived / 应用、断开网络,通过
tcpdump抓包(多播 224.0.0.18 / 单播对端 IP)观察心跳、ipvsadm -Ln查看 IPVS 规则、ip addr查看 VIP 漂移; - 常见坑点 :
vrrp_strict与单播 / VIP ping 冲突,需禁用;配置文件括号需分行写;非抢占模式需所有节点 state 为 BACKUP; - 双服务调度:双主架构可分别承载不同服务(如 ka1 调度 HTTPD、ka2 调度 MySQL),通过不同 VRRP 实例和 virtual_server 配置实现。