12.5.5 常见故障与排障思路
常见故障与排障思路#
本节聚焦 Keepalived+LVS 故障定位,遵循“控制面(VRRP/VIP)→数据面(LVS转发)→业务面(后端服务)”顺序。包含安装与验证、排错流程、命令解释与练习。
原理草图(控制面与数据面)#
0. 基础安装与验证(排障前置)#
# 安装 Keepalived 与 ipvsadm(RHEL/CentOS)
yum -y install keepalived ipvsadm
# 启动并查看服务状态
systemctl enable --now keepalived
systemctl status keepalived
# 验证 ipvs 模块是否加载
lsmod | grep ip_vs
# 解释:
# - keepalived: 提供 VRRP 与 health check
# - ipvsadm: 查看/管理 IPVS 规则
# - ip_vs*: LVS 内核模块
1. VIP不漂移或漂移异常#
现象:主节点故障后 VIP 未漂移或双主(脑裂)。
排查示例
# 查看本机 VIP 是否存在
ip addr show dev eth0 | grep -E "inet .*vip"
# 查看 VRRP 状态与优先级
journalctl -u keepalived -n 50 | grep -i vrrp
# 抓包看 VRRP 通告
tcpdump -i eth0 vrrp -nn
配置核对示例(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.100/24 dev eth0
}
}
命令解释
- ip addr:确认 VIP 绑定
- journalctl -u keepalived:查看 VRRP 状态变化
- tcpdump vrrp:确认通告是否发送/接收
2. LVS转发不生效或访问超时#
现象:VIP 可达但业务超时,请求未到后端。
排查示例
# 查看 IPVS 规则与统计
ipvsadm -Ln --stats --rate
# 检查虚拟服务与真实服务端口映射
ipvsadm -Ln
# 解释:
# -Ln: 以数字格式显示规则
# --stats/--rate: 显示连接数、速率
常见模式检查
- LVS-DR
# 后端 RealServer 绑定 VIP 到 lo
ip addr add 10.0.0.100/32 dev lo
# 防 ARP 冲突
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
- LVS-NAT
# RealServer 默认网关指向 LVS
ip route show | grep default
# LVS 上是否存在 SNAT
iptables -t nat -L -n | grep MASQUERADE
- LVS-TUN
# 检查 IPIP 模块与 MTU
lsmod | grep ipip
ip link show tunl0
3. 健康检查误判#
现象:后端正常但被摘除,或故障后仍调度。
排查示例
# 使用 curl 模拟健康检查
curl -s -o /dev/null -w "%{http_code}\n" http://10.0.0.201:80/health
# 检查 Keepalived 自定义检查脚本返回码
/opt/check_http.sh; echo $?
MISC_CHECK示例
virtual_server 10.0.0.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
real_server 10.0.0.201 80 {
weight 1
MISC_CHECK {
misc_path "/opt/check_http.sh"
misc_timeout 2
}
}
}
4. 连接不均衡或会话丢失#
现象:流量集中、会话频繁中断。
排查要点
- 调度算法是否匹配业务:rr/wrr/lc/wlc
- persistence_timeout 是否配置
- 客户端是否经过 NAT 造成源IP变化
示例配置
virtual_server 10.0.0.100 80 {
lb_algo wrr
persistence_timeout 300
}
5. 规则丢失或重启后异常#
现象:重启 Keepalived 后 IPVS 规则未恢复。
排查示例
# 检查配置语法
keepalived -t -f /etc/keepalived/keepalived.conf
# 查看启动日志
journalctl -u keepalived -n 100
6. 日志与抓包定位#
# 实时日志
journalctl -u keepalived -f
# VRRP 通告
tcpdump -i eth0 vrrp -nn
# VIP 流量路径
tcpdump -i eth0 host 10.0.0.100 -nn
7. 推荐排障流程(可执行清单)#
1) ip addr 检查 VIP 是否存在
2) journalctl 查看 VRRP 状态与切换日志
3) ipvsadm 检查 LVS 规则与连接统计
4) 后端 curl 健康检查与端口连通
5) 检查防火墙/内核参数(ARP/路由/模块)
6) 对比主备配置差异
练习:模拟故障并定位#
练习目标:模拟主节点故障,验证 VIP 漂移与转发恢复。
# 1) 在主节点停止 keepalived
systemctl stop keepalived
# 2) 在备节点确认 VIP 漂移
ip addr show dev eth0 | grep 10.0.0.100
# 3) 客户端访问 VIP
curl -I http://10.0.0.100
# 4) 恢复主节点并观察回切
systemctl start keepalived
journalctl -u keepalived -n 20
预期效果
- VIP 从主节点漂移到备节点
- 访问 VIP 返回 200 或业务正常响应
- 日志中出现状态切换记录