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 reference或cannot 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漂移是否恢复。