Keepalived 基础教程
内容:核心概念、工作机制、VRRP、LVS 配置、生产级示例、故障排查、最佳实践。
Keepalived 是一个提供 高可用(HA)+ 健康检查 + LVS 管理 的服务,核心能力包括:
- VRRP(虚拟路由冗余协议) -> 用于主备切换 / VIP 漂移
- LVS Real Server 健康检查 -> 自动从 ipvsadm 中移除不健康的 RS
- 自动生成/维护 LVS 规则
- 跨多实例、多虚拟服务的 HA 管理
Keepalived 主要两个核心组件:
- VRRP(VIP 漂移,实现高可用)
- LVS(管理 ipvsadm 的负载均衡规则)
Keepalived = VRRP + LVS,二者独立且可以同时使用。
+---------------------------------------+
| keepalived |
+-------------------+-------------------+
| VRRP | LVS |
| (VIP HA failover) | (LB/healthcheck) |
+-------------------+-------------------+
VRRP 作用:
让多个节点共享一个 VIP,只有 MASTER 对外提供服务,BACKUP 随时接管。
VRRP 参数说明
| 参数 | 作用 |
|---|---|
| state | MASTER / BACKUP |
| interface | 绑定网卡 |
| virtual_router_id | VRRP 组 ID(必须唯一) |
| priority | 优先级(越大越先抢 VIP) |
| advert_int | 心跳间隔(默认 1s) |
| virtual_ipaddress | VIP 列表 |
主备切换流程
- MASTER 广播 VRRP 心跳
- BACKUP 监听心跳
- MASTER 故障 -> 心跳中断
- BACKUP 检测到超时后 -> 抢占 VIP
- VIP 漂移完成 -> ARP 通告 -> 客户端自动恢复访问
注意:VRRP 是二层协议(组播)
主备必须在 同一二层网络。
Keepalived 配置文件:/etc/keepalived/keepalived.conf
主要结构:
global_defs { ... }
vrrp_instance VI_1 { ... }
virtual_server 10.0.0.10 80 { ... }
real_server 10.0.0.11 80 { ... }
real_server 10.0.0.12 80 { ... }
Keepalived 不仅做 HA,还能自动维护 ipvsadm 规则。
下面一份你可以直接用于生产环境的版本。
keepalived.conf
! Keepalived 配置示例(LVS-DR + HA)
global_defs {
router_id LVS_NODE_1
enable_script_security
}
# VRRP 主备
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.10/24
}
# VIP 转移时立即发送 ARP 通告
garp_master_delay 1
garp_master_refresh 5
garp_master_repeat 5
}
# LVS 虚拟服务
virtual_server 10.0.0.10 80 {
lb_algo wlc
lb_kind DR
persistence_timeout 50
protocol TCP
delay_loop 6
real_server 10.0.0.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
delay_before_retry 3
connect_port 80
}
}
}
绑定 VIP 到 lo
ip addr add 10.0.0.10/32 dev lo
禁止 ARP 抢答
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
查看 VIP
ip addr | grep 10.0.0.10
查看 ipvsadm 规则
ipvsadm -Ln
重启服务
systemctl restart keepalived
systemctl status keepalived
支持:
连接端口验证
完整 HTTP 健康检查 示例:
HTTP_GET {
url {
path /health
digest 1a2b3c4d
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
可执行外部脚本:
MISC_CHECK {
misc_path "/usr/bin/check_backend.sh"
misc_timeout 5
}
- interface 写错
- IP 被占用
- VRRP 组 ID 冲突
- 优先级不正确
- 防火墙阻止 VRRP 组播:
udp port 112
multicast 224.0.0.18
- advert_int 太大
- priority 差异太小
- 网络丢包导致心跳延迟
- 未开启 GARP(升级 ARP 缓存)
- 检查项不正确
- TCP_CHECK 配置错误
- 服务器防火墙阻止探测端口
- RS 没关闭 ARP 抢答
- RS 回包走了错误路由
- DR 模式多网卡导致 VIP 绑定冲突
nopreempt
一般不推荐除非特殊业务(稳定优先)
确保 VIP 切换时 ARP 缓存更新及时
VRRP 必须绑定物理网卡,否则心跳发不出去
sync_master
sync_backup
global_defs {
router_id LVS_NODE_1
enable_script_security
log_detail
}