проверка активности проверки, которая является мастер-узлом

У меня есть 2 сервера приложений, настроенных для запуска задания php cron, но только 1 может выполнять задание в любое время. Поскольку я уже использую keepalived для других целей, я думаю о том, чтобы в задании cron была некоторая логика, чтобы проверить, есть ли у узла виртуальный IP-адрес, а затем выполнить задание. Таким образом, теоретически, даже если оба сервера выполняют задание cron одновременно, только 1 будет выполнять «настоящее» задание.

Но у меня вопрос, как проверить, есть ли у узла вип? Может ли кто-нибудь посоветовать мне это?

Спасибо.


person twb    schedule 23.08.2013    source источник


Ответы (2)


Я просто должен был сделать это. Если вы просто хотите проверить, является ли поле, на котором вы находитесь, плавающим общедоступным IP-адресом, а IP-адрес, скажем, a.b.c.d, тогда достаточно запустить:

ip a | grep a.b.c.d

Я почти уверен, что в bash вы можете использовать вывод этой команды как условное выражение. Если машина не использует общедоступный IP-адрес, вывод должен быть пустым, поэтому оценка должна быть ложной, и если есть совпадение для IP-адреса, то она должна быть оценена как истинная.

person cadmium    schedule 14.02.2014
comment
С несколькими десятками определений virtual_ipaddress в keepalived v1.2.7 в Ubuntu 14.04 я не вижу существенной разницы в результатах ip addr show между главным и вторичным узлами. - person parhamr; 03.03.2016

Вот обобщенный скрипт, который я предлагаю для этого вызвать 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
person Jeffiekins    schedule 19.03.2019
comment
Отлично, воспользуюсь! Но я изменю предлагаемое имя и эхо-строки на master и backup, так как это имена, используемые keepalived. Я думаю, что добавление нового набора имен для одной и той же вещи как бы запутывает вещи. - person UlfR; 18.12.2019