А все таки оказалось быстрее и проще написать самому. Расскажу подробней, ибо вещь полезная. Я не рассписываю как на разных системах, но должно работать без проблем на любых redhat'о подобных.
ТЗ:
два сервера с главными айпишками 10.10.10.20 и 10.10.10.30
необходимая третья айпишка 10.10.10.40, которая и будет подниматься на живом сервере если другой упал
Пусть 20 сервер будет главным, прописываем ему в /etc/rc.local поднимание айпишки и риквест очистить кеш::
ifconfig eth0:1 10.10.10.40 netmask 255.255.255.0
arping -c 1 -s 10.10.10.40 10.10.10.1
Другой — 30 сервер будет на поддержке, если вдруг первый откажет. На нем создаем скрипт /usr/local/sbin/setupip, внутри:
#!/bin/bash
MASTERHOST="10.10.10.20"
IP1="10.10.10.40"
MASK1="255.255.255.0"
INERFACE1="eth0:1"
GATE1="10.10.10.1"
sleep 10
while true; do
count=$(ping -c 1 $MASTERHOST | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }')
localip=$(ifconfig | grep "$IP1 " | wc -l)
if [ $count -eq 0 ]; then
if [ $localip -eq 0 ]; then
#if IP is not set - do add it, send ARP cache clear
logger "setupip :: Host $MASTERHOST is down at $(date); Binding up $IP1"
ifconfig $INERFACE1 $IP1 netmask $MASK1
arping -c 1 -s $IP1 $GATE1
fi
else
if [ $localip -gt 0 ]; then
logger "setupip :: Host $MASTERHOST is UP at $(date); Shutting down $IP1"
ifconfig $INERFACE1 down
fi
fi
sleep 10
done
Делаем его исполняемым, засовываем скрипт в /etc/rc.local, для запуска при старте:
/usr/local/sbin/setupip &
Reboot. Все готово.
В результате имеем:
- каждые 10 секунд второй сервер пингует первый
- если первый лежит — второй поднимает у себя нужную IP, чистит ARP кеш, и делает запись в syslog (/var/log/messages)
- если первый поднимается, он запускает у себя IP и чистить ARP кеш от себя и принимает все риквесты на себя
- второй видит что первый поднялся, и ложит IP у себя
Все тесты закончились хорошо. Переменные должны быть интуитивно понятны.
Думаю кому-то этот скрипт пригодиться.