twb
twb

Reputation: 1368

keepalived check which is master node

I have 2 app servers both configured to run a php cron job, but only 1 can run the job at any time. Since I am already using keepalived for other purposes, I am thinking of having some logic in the cron job to check if the node has the virtual ip, then execute the job. So theoretically even though both servers are running the cron job at the same time, only 1 will be executing the 'real' job.

But my question is how to check if the node has the vip? Can someone advise me on that?

Thanks.

Upvotes: 7

Views: 22989

Answers (3)

Reini
Reini

Reputation: 71

my one-liner for multiple virtual ipv4 addresses which returns "aktive member" or "passive member" or "no keepalived.conf":

[ -r /etc/keepalived/keepalived.conf ] && (ip -br -4 a | grep -qE "$(sed -n '/virtual_ipaddress\s*{/,/}/p' /etc/keepalived/keepalived.conf | sed -n 's/^\s*\([0-9.]\{7,15\}\)\/.*/\1/p' | tr '\n' '|' | sed 's/|$//')" && echo active member || echo passive member) || echo no keepalived.conf

Upvotes: 1

Jeffiekins
Jeffiekins

Reputation: 579

Here's a generalized script I suggest calling is_primary to do that:

#!/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

Upvotes: 3

cadmium
cadmium

Reputation: 61

I just had to do this. If you just want to check if the box you are on is floating the public ip and the ip is, say, a.b.c.d, then it is enough to run:

ip a | grep a.b.c.d

I'm pretty sure in bash you can use the output of that command as a conditional itself. If the machine is not floating the public ip, the output should be empty, hence evaluate to false and if there is a match for the ip, then it should evaluate to true.

Upvotes: 6

Related Questions