我最近将我的 keepalived 集群从版本 1.2.10 更新到 1.2.13。我注意到我的跟踪脚本(基本上只是 ping 另一个系统)不再起作用。我使用一个简单的 bash 脚本,如果一切正常且接收器在线,则返回 0,如果接收器不可用,则返回 1。
如果脚本返回 1,则集群发生变化并且另一个路由器变为活动状态,否则一切正常。keepalived.conf
:
global_defs {
router_id r_id
}
vrrp_script chk_myscript {
script "/etc/keepalived/chk_available.sh"
interval 4 # check every 4 seconds
fall 2 # require 2 failures for KO
}
vrrp_instance r_id {
state MASTER
interface enp0s3
virtual_router_id 10
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
10.0.25.3/24 dev enp0s3
}
track_script {
chk_myscript
}
}
脚本:
#!/bin/sh
ping_return()
{
ping -c2 8.8.8.8 > /dev/null #it's just an example ip
if [ $? -eq 0 ]
then
return 0
else
return 1
fi
}
ping_return
keepalived 启动过程结束后,日志信息告诉我:
VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
ROUTER keepalived_vrrp[2800]: Using LinkWatch kernel netlink reflector...
ROUTER keepalived_vrrp[2801]: VRRP_Instance(INSTANCE) NOW in FAULT state
我已经阅读了更新日志,因为我认为我可以从中获得一些有用的信息。但没有任何有用的信息(至少对于像我这样的新手来说)。
我现在的问题是:
为什么 keepalived 不能像以前的版本那样工作,我要做什么才能让 keepalive 再次工作?
答案1
SELinux 拒绝执行自定义脚本。
chcon -t keepalived_unconfined_script_exec_t /etc/keepalived/chk_available.sh