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 绑定问题、切换失败与网络层故障。