我正在尝试使用 keepalived(仅 VRRP)、conntrackd 和 OSFP 在 quagga 下创建 HA 防火墙/路由器对,所有这些都作为标准 Centos 和软件包安装。这类似于解决非对称 HA 防火墙/路由器但是我使用的是 OSPF 而不是 BGP,并且我的子网都是内部的。
为了避免不对称路由和状态防火墙的问题,我正在尝试 OP 提到但后来没有再次提及的建议,“啊,在备份状态下停止 BGP 守护进程并在主状态下启动它是否可以?”我在状态更改期间由 keepalived 调用的 primary-backup.sh 脚本中添加了一些 systemctl 命令:
#!/usr/bin/bash
SYSTEMCTL_BIN=/usr/bin/systemctl
OSPFD=/usr/sbin/ospfd
CONNTRACKD_BIN=/usr/sbin/conntrackd
CONNTRACKD_LOCK=/var/lock/conntrack.lock
CONNTRACKD_CONFIG=/etc/conntrackd/conntrackd.conf
case "$1" in
primary)
#
# start OSPF daemon
#
command="${SYSTEMCTL_BIN} start $OSPFD"
output=$(command)
rc=$?
if [ ${rc} -eq 0 ]
then
logger "DEBUG: keepalived successfully invoked '${command}', output <${output}>"
else
logger "ERROR: keepalived failed to invoke '${command}'; return code ${rc}, output <${output}>"
fi
...
;;
backup)
#
# stop OSPF daemon
#
command="${SYSTEMCTL_BIN} stop $OSPFD"
output=$(command)
rc=$?
if [ ${rc} -eq 0 ]
then
logger "DEBUG: keepalived successfully invoked '${command}', output <${output}>"
else
logger "ERROR: keepalived failed to invoke '${command}'; return code ${rc}, output <${output}>"
fi
...
例如,当我强制将主服务器的状态从主服务器更改为备份服务器时,我会在原始主服务器的 /var/log/messages 中看到如下条目:
Apr 29 13:18:12 xxxxxx-a logger: DEBUG: keepalived successfully invoked '/usr/bin/systemctl stop /usr/sbin/ospfd', output <>
在原始备份上如下操作:
Apr 29 13:18:12 xxxxxx-b logger: DEBUG: keepalived successfully invoked '/usr/bin/systemctl start /usr/sbin/ospfd', output <>
其余一切都按预期运行(VIP 地址从原始主服务器移动到原始备份服务器,并且 conntrack 条目已同步)。但是,尽管有 DEBUG 日志消息,ospfd 仍在原始主服务器上运行,而未在原始备份服务器上运行。
我做错了什么?我应该在哪里查找有关实际发生情况的更多详细信息?欢迎提出所有建议。
答案1
当我将 primary-backup.sh 复制到我想要运行的位置时,我忘记了 SELinux。我运行
chcon -t keepalived_unconfined_script_exec_t /etc/conntrackd/primary-backup.sh
并且权限问题已修复。