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 或业务正常响应
- 日志中出现状态切换记录