12.7.5 运维巡检与故障预案

运维巡检目标与范围#

运维巡检聚焦于Keepalived高可用链路的稳定性与可预期性,覆盖VRRP状态、虚拟IP漂移、健康检查脚本、网络连通性、系统资源与依赖服务状态。巡检范围需包含主备节点、上游交换/路由设备、后端Real Server以及告警通道。

原理草图(巡检对象与链路)

文章图片

巡检清单与频率建议#

  • 每日巡检
  • VRRP状态与VIP归属是否符合预期
  • keepalived进程与配置一致性
  • 健康检查脚本执行结果与告警日志
  • 关键链路连通性(VIP、网关、后端服务端口)

  • 每周巡检

  • 配置变更回顾与漂移检查
  • 主备切换演练记录与切换耗时
  • 系统资源趋势(CPU、内存、网络丢包)

  • 每月巡检

  • 内核参数与防火墙策略复核
  • 高可用架构依赖项(LVS/负载均衡/网关)健康性
  • 备份与回滚策略验证

巡检命令示例(每日)

# 1) VRRP状态(主/备)
ip -4 addr show dev eth0 | grep -E "state|inet"
systemctl status keepalived --no-pager

# 2) VIP归属与ARP公告
ip -4 addr show | grep 10.0.0.10
arp -an | grep 10.0.0.10

# 3) 健康检查脚本日志
grep -E "track_script|health_check" /var/log/messages | tail -n 20

# 4) 关键链路连通性
ping -c 2 10.0.0.1     # 网关
curl -sS -m 2 http://10.0.0.10/healthz
nc -zv 10.0.0.10 80

命令解释
- ip -4 addr show dev eth0:查看本机VIP是否在预期网卡上。
- systemctl status keepalived:确认守护进程运行与最近日志。
- arp -an:观察VIP的邻居表是否异常抖动。
- curl/nc:验证VIP端口可达与业务存活。


巡检关键指标与阈值#

  • VRRP:状态稳定、无频繁抢占;切换次数低于预警阈值
  • VIP:ARP公告正常、邻居表无异常抖动
  • 健康检查:脚本超时率、失败率、误报率
  • 系统资源:CPU、内存、磁盘I/O、网络丢包与重传
  • 时间同步:NTP偏差在可接受范围内

关键指标采集示例

# VRRP切换次数(参考日志)
grep -E "Entering MASTER STATE|Entering BACKUP STATE" /var/log/messages | wc -l

# 丢包与重传
ip -s link show dev eth0
ss -s

# NTP偏差
chronyc tracking

故障预案设计原则#

  • 快速定位:标准化诊断命令与日志路径
  • 最小影响:先隔离后恢复,避免扩大故障域
  • 可回滚:配置变更与脚本更新必须可回退
  • 可演练:定期进行主备切换与故障注入演练

典型故障预案流程#

  1. 异常发现:监控告警或巡检发现VIP漂移异常、服务不可达
  2. 快速诊断:确认VRRP状态、VIP归属、健康检查结果
  3. 隔离与切换:视情况触发手动切换或降级
  4. 恢复与验证:修复根因后恢复主备,验证服务可用性
  5. 复盘与优化:记录故障时间线、影响范围与改进措施

故障诊断与切换示例(手动降级)

# 1) 查看VRRP状态
grep -E "Entering MASTER|Entering BACKUP" /var/log/messages | tail -n 5

# 2) 临时降低优先级(触发切换)
# /etc/keepalived/keepalived.conf 中 priority 从 150 调为 100
sed -i 's/priority 150/priority 100/' /etc/keepalived/keepalived.conf
systemctl reload keepalived

# 3) 验证VIP漂移到备机
ip -4 addr show | grep 10.0.0.10

排错要点(常见故障)
- VIP不漂移:检查nopreemptpriority配置、VRRP通告端口阻断(UDP 112)
- 脑裂:检查组播/单播连通性、vrrp_script误判
- 健康检查误报:脚本超时、依赖服务异常或网络抖动


预案文档与演练要求#

预案需包含联系方式、恢复时限、故障分类与处置步骤、脚本命令清单。至少每季度进行一次主备切换演练,并输出演练报告,确保预案可执行、人员可胜任、流程可落地。

演练脚本示例(预案验证)

#!/usr/bin/env bash
# 文件: /opt/keepalived/drill_failover.sh
# 作用: 模拟主机故障触发切换并验证VIP

VIP="10.0.0.10"
IFACE="eth0"

echo "[1] 降低优先级触发切换"
sed -i 's/priority 150/priority 100/' /etc/keepalived/keepalived.conf
systemctl reload keepalived
sleep 5

echo "[2] 验证本机是否仍持有VIP"
ip -4 addr show dev ${IFACE} | grep ${VIP} && echo "仍持有VIP(异常)" || echo "VIP已漂移"

echo "[3] 恢复优先级并回切"
sed -i 's/priority 100/priority 150/' /etc/keepalived/keepalived.conf
systemctl reload keepalived
sleep 5

echo "[4] 验证VIP回切"
ip -4 addr show dev ${IFACE} | grep ${VIP} && echo "VIP已回切" || echo "未回切"

安装与基础校验(用于巡检前置)#

# 安装(示例:CentOS/Alma/Rocky)
yum install -y keepalived

# 启动与自启
systemctl enable --now keepalived

# 配置校验
keepalived -t -f /etc/keepalived/keepalived.conf

配置片段(含健康检查脚本)

# 文件: /etc/keepalived/keepalived.conf
vrrp_script chk_web {
  script "/opt/keepalived/check_web.sh"
  interval 2
  fall 3
  rise 2
}

vrrp_instance VI_1 {
  state MASTER
  interface eth0
  virtual_router_id 51
  priority 150
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass 1111
  }
  virtual_ipaddress {
    10.0.0.10/24
  }
  track_script {
    chk_web
  }
}
# 文件: /opt/keepalived/check_web.sh
#!/usr/bin/env bash
curl -sS -m 1 http://127.0.0.1/healthz >/dev/null

练习题(运维巡检与预案)#

  1. 编写脚本每日巡检VIP归属并输出到日志,要求记录时间戳与网卡名。
  2. 在备机上验证VRRP通告是否可达(抓包或端口验证),并说明结果。
  3. 模拟健康检查脚本超时,观察Keepalived日志并记录切换耗时。
  4. 设计一份“VIP漂移异常”的故障预案卡片,包含诊断命令与回滚步骤。