Недавно я обновил свой кластер поддержки активности с версии 1.2.10 до 1.2.13. Я заметил, что мой скрипт отслеживания, который в основном просто пингует другую систему, больше не работает. Я использую простой сценарий 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
Я уже читал журнал изменений, потому что думал, что смогу получить некоторую полезную информацию. Но ничего полезного не было (по крайней мере, для такого новичка, как я).
Мой вопрос сейчас:
Почему функция поддержки активности не работает, как в предыдущей версии, и что мне нужно сделать, чтобы она снова заработала?
SELinux запрещает выполнение пользовательского сценария.
chcon -t keepalived_unconfined_script_exec_t /etc/keepalived/chk_available.sh