12.1.5 与LVS/负载均衡协同的架构关系
在高可用与负载均衡场景中,Keepalived与LVS的协同关系可理解为“控制面+转发面”的分工:Keepalived负责VIP漂移、主备选举与健康检查等控制逻辑,LVS负责数据转发与负载分发。二者结合构成高性能、高可靠的四层负载均衡架构。
原理草图(控制面/转发面协作)
架构角色与分工
- Keepalived:基于VRRP维护VIP,检测本机与后端Real Server健康状态,控制LVS虚拟服务的启停与主备切换。
- LVS:基于IPVS在内核层实现负载均衡,支持DR/TUN/NAT多种转发模式。
- Real Server:承载业务流量,通常部署多副本,具备健康探测与故障剔除能力。
安装与基础环境(LVS+Keepalived)#
以CentOS/RHEL系为例,安装并启用服务:
# 安装
yum -y install keepalived ipvsadm
# 启动与开机自启
systemctl enable --now keepalived
systemctl status keepalived
# 查看IPVS模块与表
lsmod | grep ip_vs
ipvsadm -Ln
命令说明
- ipvsadm -Ln:查看LVS转发表(不解析域名,性能更佳)。
- lsmod | grep ip_vs:确认内核IPVS模块已加载。
关键配置示例(Keepalived驱动LVS)#
示例环境:
- VIP:10.0.0.100
- LVS主节点:10.0.0.5
- LVS备节点:10.0.0.6
- Real Server:10.0.0.11、10.0.0.12
- 转发模式:DR(直连)
主节点 /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
virtual_server 10.0.0.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 2
delay_before_retry 2
connect_port 80
}
}
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 2
delay_before_retry 2
connect_port 80
}
}
}
备节点 /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
virtual_server 10.0.0.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.11 80 {
weight 1
TCP_CHECK { connect_timeout 3 retry 2 delay_before_retry 2 connect_port 80 }
}
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK { connect_timeout 3 retry 2 delay_before_retry 2 connect_port 80 }
}
}
关键参数解释
- virtual_router_id:主备必须一致,标识同一VRRP组。
- priority:优先级决定主备角色。
- lb_kind DR:指定LVS转发模式为DR。
- real_server:后端真实服务器及健康检查配置。
DR模式必备内核参数(Real Server)#
避免Real Server响应VIP的ARP,防止ARP冲突:
cat >/etc/sysctl.d/lvs_dr.conf <<'EOF'
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.lo.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.lo.arp_announce=2
EOF
sysctl -p /etc/sysctl.d/lvs_dr.conf
说明
- arp_ignore=1:仅在目标IP是本机IP时才响应ARP。
- arp_announce=2:使用最合适的源地址进行ARP通告。
验证与协同测试#
1)确认VIP漂移
# 主节点查看VIP
ip a | grep 10.0.0.100
# 停止主节点keepalived,验证VIP迁移
systemctl stop keepalived
# 在备节点查看VIP是否接管
ip a | grep 10.0.0.100
2)查看LVS转发表
ipvsadm -Ln --stats
ipvsadm -Ln --rate
3)健康检查生效验证
# 模拟RS故障
systemctl stop nginx # 在10.0.0.11或10.0.0.12
# 观察LVS表项
ipvsadm -Ln | grep 10.0.0.11
预期效果
- 停止RS后,Keepalived自动剔除故障节点;
- 主节点停止Keepalived,VIP快速漂移到备节点。
常见排错清单(命令 + 解释)#
1)VIP无法漂移
# 查看VRRP状态与日志
journalctl -u keepalived -f
# 确认防火墙与组播
firewall-cmd --list-all
- 检查
auth_pass是否一致、virtual_router_id是否一致。 - VRRP默认组播224.0.0.18,防火墙需放通。
2)LVS无转发
# 检查ipvs模块和表
lsmod | grep ip_vs
ipvsadm -Ln
- 若表为空,确认
virtual_server配置是否正确,Keepalived是否运行。
3)DR模式回包异常
# Real Server ARP设置核查
sysctl -a | egrep "arp_ignore|arp_announce"
- 需严格设置ARP参数,避免VIP被Real Server响应。
练习任务#
- 双机切换演练:在Master上停止Keepalived,确认VIP迁移到Backup并继续提供服务。
- 健康检查演练:停止某个Real Server的Web服务,观察LVS表项变化并验证请求转发到其他节点。
- 转发模式对比:将
lb_kind改为NAT,观察网络路径变化并记录性能差异。