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
故障预案设计原则#
- 快速定位:标准化诊断命令与日志路径
- 最小影响:先隔离后恢复,避免扩大故障域
- 可回滚:配置变更与脚本更新必须可回退
- 可演练:定期进行主备切换与故障注入演练
典型故障预案流程#
- 异常发现:监控告警或巡检发现VIP漂移异常、服务不可达
- 快速诊断:确认VRRP状态、VIP归属、健康检查结果
- 隔离与切换:视情况触发手动切换或降级
- 恢复与验证:修复根因后恢复主备,验证服务可用性
- 复盘与优化:记录故障时间线、影响范围与改进措施
故障诊断与切换示例(手动降级)
# 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不漂移:检查nopreempt与priority配置、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
练习题(运维巡检与预案)#
- 编写脚本每日巡检VIP归属并输出到日志,要求记录时间戳与网卡名。
- 在备机上验证VRRP通告是否可达(抓包或端口验证),并说明结果。
- 模拟健康检查脚本超时,观察Keepalived日志并记录切换耗时。
- 设计一份“VIP漂移异常”的故障预案卡片,包含诊断命令与回滚步骤。