Cron keepalived检查哪个是主节点

Cron keepalived检查哪个是主节点,cron,keep-alive,virtual-ip-address,Cron,Keep Alive,Virtual Ip Address,我有两个应用服务器都配置为运行php cron作业,但在任何时候只有一个可以运行该作业。因为我已经将KeepAlive用于其他目的,所以我考虑在cron作业中使用一些逻辑来检查节点是否具有虚拟ip,然后执行作业。因此,从理论上讲,即使两台服务器同时运行cron作业,也只有1台服务器在执行“真实”作业 但是我的问题是如何检查节点是否有vip?有人能给我一些建议吗 谢谢。我不得不这么做。如果您只想检查您所在的框中是否浮动了公共ip,并且ip是(比如)a.b.c.d,那么就可以运行: ip a | g

我有两个应用服务器都配置为运行php cron作业,但在任何时候只有一个可以运行该作业。因为我已经将KeepAlive用于其他目的,所以我考虑在cron作业中使用一些逻辑来检查节点是否具有虚拟ip,然后执行作业。因此,从理论上讲,即使两台服务器同时运行cron作业,也只有1台服务器在执行“真实”作业

但是我的问题是如何检查节点是否有vip?有人能给我一些建议吗


谢谢。

我不得不这么做。如果您只想检查您所在的框中是否浮动了公共ip,并且ip是(比如)a.b.c.d,那么就可以运行:

ip a | grep a.b.c.d

我很确定在bash中,您可以将该命令的输出作为条件本身使用。如果计算机未浮动公共ip,则输出应为空,因此计算结果应为false,如果ip匹配,则计算结果应为true。

以下是一个通用脚本,我建议调用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

在Ubuntu14.04上的
keepalived v1.2.7
中有几十个
virtual\u ipaddress
定义,我看不到主节点和次节点之间的
ip addr show
结果有显著差异。当然,我会使用它!但我会将建议的名称和回显的字符串更改为master和backup,因为这是keepalive使用的名称。我认为,为同一事物添加一组新名称有点令人困惑。