keepalived可通过自定义vrrp_script监控磁盘使用率实现主备切换:当根分区或/var/log分区使用率超90%时,脚本返回1使优先级降20,触发vip漂移;需配置script路径、interval 10、fall 3、rise 2及track_script关联。

Keepalived 本身不直接监控磁盘空间,但可以通过自定义健康检查脚本(vrrp_script)把磁盘使用率纳入主备切换逻辑——当根分区或日志所在分区使用率超过阈值(如 90%),就主动降低本节点优先级,触发 VIP 漂移,避免服务因磁盘写满而中断。
编写磁盘空间检测脚本
在所有 Keepalived 节点上创建可执行脚本,例如 /etc/keepalived/check_disk.sh:
- 脚本需有执行权限:
chmod +x /etc/keepalived/check_disk.sh - 内容示例(监控
/和/var/log分区):
ROOT_USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
LOG_USAGE=$(df /var/log 2>/dev/null | awk 'NR==2 {print $5}' | sed 's/%//' || echo 0)
MAX_USAGE=90
if [ "$ROOT_USAGE" -gt "$MAX_USAGE" ] || [ "$LOG_USAGE" -gt "$MAX_USAGE" ]; then
exit 1 # 告知 keepalived 当前状态异常
else
exit 0 # 状态正常
fi
在 keepalived.conf 中配置 vrrp_script
在 vrrp_instance 块外(全局作用域)添加监控定义:
script "/etc/keepalived/check_disk.sh"
interval 10
fall 3
rise 2
weight -20
}
-
interval 10:每 10 秒执行一次检测 -
fall 3:连续 3 次失败才判定为异常 -
rise 2:连续 2 次成功才恢复为正常 -
weight -20:异常时,将当前节点优先级减去 20(确保低于 backup 节点)
关联脚本到 VRRP 实例
在对应 vrrp_instance VI_1 { ... } 块内加入:
check_disk
}
- 必须与上面
vrrp_script名称完全一致 - Keepalived 启动后会自动加载并周期调用该脚本
- 一旦脚本返回非 0,weight 生效,优先级动态下调;恢复后自动加回
验证与注意事项
启动前检查:
- 确认脚本路径、权限、语法无误(可手动执行测试返回值)
- 主备节点的初始
priority应预留足够差值(如 master=100,backup=90),确保 -20 权重能真正触发切换 - 建议配合日志轮转(logrotate)和定期清理策略,脚本只作为最后一道防线
- 若监控的是 LVM 或挂载点特殊路径(如
/data/logs),需在脚本中替换对应df参数










