• Совместное использование IP адреса на двух серверах

    @Bodik Автор вопроса
    А все таки оказалось быстрее и проще написать самому. Расскажу подробней, ибо вещь полезная. Я не рассписываю как на разных системах, но должно работать без проблем на любых 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 у себя


    Все тесты закончились хорошо. Переменные должны быть интуитивно понятны.
    Думаю кому-то этот скрипт пригодиться.
    Ответ написан
    1 комментарий