12.3.6 常见安装问题与解决思路

本节聚焦Keepalived安装阶段高频问题与定位思路,给出可执行命令、配置校验、排错步骤与练习,帮助快速恢复服务。

文章图片
  • 依赖缺失或版本不匹配
    现象:编译时报缺少头文件或库。
    处理示例(以 RHEL/CentOS 为例):
    ```bash
    # 安装常见依赖
    yum -y install gcc make openssl-devel libnl3-devel popt-devel \
    libnfnetlink-devel net-snmp-devel iproute

# 若缺库,先启用EPEL
yum -y install epel-release
yum -y install libnl3-devel
`` 命令解释:openssl-devel/libnl3-devel提供编译头文件;libnfnetlink-devel`用于网络相关功能。

  • 编译链接失败
    现象:undefined referencecannot find -lxxx
    排查与修复示例:
    ```bash
    # 检查库是否可见
    ldconfig -p | egrep 'nl|popt|ssl'

# 若库在非标准路径,指定LDFLAGS
./configure LDFLAGS="-L/usr/lib64" CPPFLAGS="-I/usr/include"
make && make install
`` 命令解释:ldconfig -p查看系统库缓存;LDFLAGS/CPPFLAGS`指定链接与头文件路径。

  • 启动失败或服务立即退出
    现象:服务起不来或启动后立刻退出。
    核心排查流程与示例:
    ```bash
    # 语法检查
    keepalived -t -f /etc/keepalived/keepalived.conf

# 查看日志
journalctl -u keepalived -e

# 示例:常见配置片段(注意脚本权限)
cat /etc/keepalived/keepalived.conf
conf
vrrp_script chk_nginx {
script "/usr/local/bin/chk_nginx.sh"
interval 2
weight -5
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 120
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100/24
}
track_script {
chk_nginx
}
}
bash
# 确保脚本可执行
chmod +x /usr/local/bin/chk_nginx.sh
`` 命令解释:keepalived -t仅验证配置语法;journalctl -u`查看服务日志。

  • VRRP通信不通(VIP不漂移)
    现象:主备不切换或VIP不在主节点。
    排查与解决:
    ```bash
    # 检查组播是否可达(抓包)
    tcpdump -ni eth0 vrrp

# 若网络不支持组播,改用单播配置示例
conf
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
unicast_src_ip 192.168.10.11
unicast_peer {
192.168.10.12
}
virtual_ipaddress {
192.168.10.100/24
}
}
`` 命令解释:tcpdump vrrp查看VRRP报文;unicast_*`切换为单播避免组播被拦。

  • 防火墙或安全策略阻断
    现象:VRRP或健康检查被拦截。
    临时验证与精细放行示例:
    ```bash
    # 临时关闭防火墙验证
    systemctl stop firewalld

# 放行VRRP协议(112)与健康检查端口示例
iptables -I INPUT -p vrrp -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
`` 命令解释:-p vrrp`允许VRRP协议;按实际健康检查端口放行。

  • 内核参数不合规
    现象:VIP绑定失败或LVS转发异常。
    示例调整(LVS-DR常见):
    ```bash
    # 临时生效
    sysctl -w net.ipv4.ip_nonlocal_bind=1
    sysctl -w net.ipv4.conf.all.arp_ignore=1
    sysctl -w net.ipv4.conf.all.arp_announce=2

# 持久化
cat >> /etc/sysctl.conf <<'EOF'
net.ipv4.ip_nonlocal_bind=1
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
EOF
sysctl -p
`` 命令解释:ip_nonlocal_bind=1允许绑定非本地IP;arp_ignore/arp_announce`避免ARP争夺。

  • SELinux导致脚本执行失败
    现象:vrrp_script无权限执行。
    排查与修复:
    ```bash
    # 临时验证
    setenforce 0

# 永久策略可后续补充,这里给出最小修复思路
chcon -t bin_t /usr/local/bin/chk_nginx.sh
`` 命令解释:setenforce 0`切换为宽松模式验证是否为SELinux导致。

  • 系统时间不同步导致抖动
    现象:主备频繁切换。
    解决示例:
    bash # 启用chrony并同步 yum -y install chrony systemctl enable --now chronyd chronyc sources -v
    命令解释:chronyc sources查看时间源状态。

  • 版本不兼容或功能缺失
    现象:配置项不识别或行为异常。
    核对版本示例:
    bash keepalived -v # 对照官方发布说明,统一生产环境版本

  • 典型排错速查流程(建议保存为运维手册)
    ```bash
    # 1) 语法检查
    keepalived -t -f /etc/keepalived/keepalived.conf

# 2) 查看日志
journalctl -u keepalived -e

# 3) 检查VIP
ip addr show dev eth0 | grep 192.168.10.100

# 4) VRRP报文
tcpdump -ni eth0 vrrp
```

  • 练习
    1) 刻意删除libnl3-devel后重新编译,记录报错信息并写出修复命令。
    2) 将vrrp_script脚本权限改为不可执行,观察日志并恢复。
    3) 切换组播到单播配置,验证VIP漂移是否恢复。