12.5.1 LVS与Keepalived集成架构
LVS与Keepalived集成架构#
LVS(Linux Virtual Server)负责四层负载均衡与转发,Keepalived 通过 VRRP 提供虚拟IP(VIP)与主备漂移,并通过健康检查驱动 LVS 服务的高可用。两者集成的核心是:Keepalived 作为控制平面(VIP 管理、健康检查、状态切换),LVS 作为数据平面(连接调度与转发)。
原理草图(控制面/数据面)
整体组件与角色
- VIP(Virtual IP):对外统一入口,由 Keepalived 管理漂移
- Director(调度器):运行 Keepalived + LVS(ipvs),负责连接调度
- Real Server(后端真实服务器):承载业务流量,需与 VIP 连通
- Health Check(健康检查):Keepalived 定期检测后端,动态维护 LVS real_server
安装与基础准备(CentOS/Alma/RHEL)#
# Director 节点安装
yum -y install keepalived ipvsadm
# 启动内核 LVS 模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
# 查看模块与版本
lsmod | grep ip_vs
ipvsadm -v
命令解释
- modprobe ip_vs_*:加载 LVS 调度算法模块
- ipvsadm -v:查看 LVS 版本,验证 ipvsadm 是否可用
DR 模式集成示例(可执行)#
1)Director(Master)配置 /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_MASTER
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
virtual_server 10.0.0.100 80 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 30
real_server 10.0.0.11 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 80
}
}
}
2)Director(Backup)配置 /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
nopreempt
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
virtual_server 10.0.0.100 80 {
delay_loop 2
lb_algo rr
lb_kind DR
persistence_timeout 30
real_server 10.0.0.11 80 {
weight 1
TCP_CHECK { connect_timeout 3; connect_port 80; }
}
real_server 10.0.0.12 80 {
weight 1
TCP_CHECK { connect_timeout 3; connect_port 80; }
}
}
3)Real Server 绑定 VIP + ARP 抑制
# 绑定 VIP 到 lo(注意 DR 模式不在网卡上回应 ARP)
ip addr add 10.0.0.100/32 dev lo
# ARP 抑制(避免 Real Server 响应 VIP 的 ARP)
cat >/etc/sysctl.d/lvs.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.conf
4)启动与验证
systemctl enable --now keepalived
# 查看 VIP 是否在 Master 上
ip addr show dev eth0 | grep 10.0.0.100
# 查看 LVS 规则与后端状态
ipvsadm -Ln
预期效果
- VIP 仅在 Master Director 可见
- ipvsadm -Ln 显示 10.0.0.100:80 及两台 Real Server
关键命令说明#
ipvsadm -Ln # 查看 LVS 转发表(数字格式)
ipvsadm -Ln --stats # 查看连接与流量统计
ipvsadm -Ln --rate # 查看实时速率
--stats:用于观察后端是否收到流量--rate:用于判断流量突增与健康检查摘除效果
排错清单(典型问题与定位)#
1)VIP 不在 Master 上
systemctl status keepalived
journalctl -u keepalived -n 50
- 检查
virtual_router_id是否一致 - 检查接口名是否正确(
interface eth0)
2)Real Server 不回包
# Director 上抓包确认请求是否转发
tcpdump -i eth0 host 10.0.0.11 and port 80
# Real Server 是否误响应 ARP
arp -an | grep 10.0.0.100
- DR 模式必须 ARP 抑制
- VIP 必须绑定在
lo
3)后端被摘除
ipvsadm -Ln
grep -n "real_server" -n /etc/keepalived/keepalived.conf
- 检查
TCP_CHECK端口是否与实际一致 - 检查后端服务是否监听 0.0.0.0:80
练习(动手验证)#
- 将
lb_algo从rr改为wrr,设置weight为 1/3,观察请求分布 - 停止一台 Real Server 的 HTTP 服务,确认
ipvsadm -Ln中该节点被摘除 - 关闭 Master Keepalived,观察 Backup 是否接管 VIP(
ip addr验证) - 添加
persistence_timeout 60,验证会话保持效果