keepalived检查哪个是主节点

时间:2013-08-23 04:04:08

标签: cron keep-alive virtual-ip-address

我有2个app服务器都配置为运行php cron作业,但只有1个可以随时运行该作业。由于我已经将keepalived用于其他目的,我正在考虑在cron作业中使用一些逻辑来检查节点是否具有虚拟IP,然后执行该作业。因此理论上即使两台服务器同时运行cron作业,也只有1台将执行“真正的”工作。

但我的问题是如何检查节点是否有vip?有人可以就此提出建议吗?

感谢。

2 个答案:

答案 0 :(得分:4)

我必须这样做。如果你只是想检查你所在的盒子是否正在浮动公共IP而ip是a.b.c.d,那么它就足够了:

ip a | grep a.b.c.d

我很确定在bash中你可以使用该命令的输出作为条件本身。如果机器没有浮动公共IP,则输出应为空,因此评估为false,如果ip匹配,则应评估为true。

答案 1 :(得分:0)

这是一个通用脚本,我建议调用 is_primary 来实现:

#!/bin/bash
#
# Tells you if this node is the primary or secondary with keepalived

conf=/etc/keepalived/keepalived.conf
# Not sure why I can't do this in 1 step, but this works:
vip=$(expr "$(cat $conf)" : '.*\bvirtual_ipaddress\s*{\s*\(.*\)/*}')
vip=`expr "$vip" : '\([^ ]*\)' | sed 's/\./\\\\./g'`
if ip addr | grep -q "$vip"
then    echo Primary ; exit 0
else    echo Secondary ; exit 1
fi