12.7.2 日志与状态诊断方法
日志与状态诊断方法#
Keepalived 故障诊断以“日志→状态→网络→配置”的闭环为主线,先确认 VRRP 角色、VIP 绑定、健康检查是否符合预期,再定位网络与配置差异。
原理草图(日志与状态诊断链路):
1. 日志与状态采集(必备命令与解释)#
# 1) 服务状态与最近日志摘要
systemctl status keepalived
# 关注 Active 状态、最近 10 行日志
# 2) 详细日志(systemd环境)
journalctl -u keepalived -n 200 --no-pager
# 关注 "Entering MASTER/BACKUP" "Adding VIP" "Removing VIP"
# 3) VIP 是否绑定在预期网卡
ip addr show dev eth0
# 预期:VIP 出现在 eth0 的 secondary 地址中
# 4) VRRP 相关内核信息与ARP邻居
ip neigh show
arp -an
# 预期:VIP 的 MAC 指向当前 MASTER 所在机器
# 5) 端口与进程状态
ss -lntp | grep -E '80|3306'
ps -ef | grep keepalived | grep -v grep
# 预期:依赖服务端口监听正常,keepalived 进程存在
# 6) 内核ARP参数检查(VIP 必需)
sysctl net.ipv4.conf.all.arp_ignore
sysctl net.ipv4.conf.all.arp_announce
# 预期:通常设置为 1/2,避免 ARP 异常
2. 日志关键字与定位要点(含示例)#
# 角色切换
Entering MASTER STATE
Entering BACKUP STATE
# VIP 绑定
Adding VIPs to interface eth0
Removing VIPs from interface eth0
# VRRP 异常
VRRP_Instance VI_1 timed out
VRRP_Instance VI_1: no response received
# 配置错误
CONFIG ERROR: Unknown keyword 'virtual_ipaddress'
诊断要点:
- 频繁切换:日志中反复出现 Entering MASTER/BACKUP,多由健康检查抖动或网络丢包导致。
- VIP 未绑定:检查 Adding VIP 是否出现;若无,多为配置错误或脚本返回非 0。
- 脑裂迹象:两端均出现 Entering MASTER,可能是单播配置错误或防火墙阻断。
3. 典型配置与日志联动示例(完整可执行)#
/etc/keepalived/keepalived.conf
vrrp_script chk_nginx {
script "/usr/local/bin/chk_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_nginx
}
}
/usr/local/bin/chk_nginx.sh
#!/bin/bash
# 返回 0 表示正常,非 0 触发降级
ss -lntp | grep -q ':80' && exit 0
exit 1
# 授权脚本
chmod +x /usr/local/bin/chk_nginx.sh
# 重载并观察日志
systemctl restart keepalived
journalctl -u keepalived -n 50 --no-pager
# 预期:出现 "Adding VIPs" 与 "Entering MASTER/BACKUP"
4. 安装与日志路径说明(不同发行版)#
# 安装(Debian/Ubuntu)
apt-get update && apt-get install -y keepalived
# 安装(RHEL/CentOS)
yum install -y keepalived
# 日志文件常见路径
# Debian/Ubuntu: /var/log/syslog
# RHEL/CentOS: /var/log/messages
5. 排错步骤(示例流程)#
场景:VIP 未绑定
# 1) 查看日志是否有 Adding VIP
journalctl -u keepalived -n 100 --no-pager | grep -E 'Adding VIP|Removing VIP|CONFIG ERROR'
# 2) 查看配置语法
keepalived -t -f /etc/keepalived/keepalived.conf
# 预期:Configuration OK
# 3) 检查脚本状态
/usr/local/bin/chk_nginx.sh ; echo $?
# 预期:返回 0,否则会导致降级
# 4) 确认网卡名
ip link show
# 预期:配置中的 interface 与实际一致
6. 练习与自测#
1) 练习:模拟健康检查失败
- 停止 Nginx:systemctl stop nginx
- 观察日志:journalctl -u keepalived -n 50 --no-pager
- 预期:出现降级与可能的 VIP 移除记录
2) 练习:验证主备切换日志
- 在 MASTER 上停止 keepalived:systemctl stop keepalived
- 在 BACKUP 上查看日志:
journalctl -u keepalived -n 50 --no-pager
- 预期:BACKUP 进入 MASTER 并绑定 VIP
3) 练习:ARP 参数影响
- 修改 ARP:sysctl -w net.ipv4.conf.all.arp_ignore=0
- 观察同网段主机 ARP 学习是否异常
- 恢复:sysctl -w net.ipv4.conf.all.arp_ignore=1
通过以上命令、配置与日志联动,可快速定位 Keepalived 的日志异常、VIP 绑定问题、切换失败与网络层故障。