Один IP на два сервера

Идея и начало положено отсюда
https://toster.ru/q/2549

Имеем два сервера в общей подсети. Задача - заданный IP висит на основном сервере, при падении IP вешается на второй сервер. При поднятии первого IP со второго убирается.

Скрипт в дальшейшем будет использоваться для создания отказоустойчевого сервера

192.168.10.100 - первый сервер (Master)
192.168.10.101 - второй сервер (Slave)
192.168.10.105 - IP aliase, по этому IP будут доступны сервера в зависимости от доступности.
192.168.10.1 - общий шлюз
eth0 - интерфейс на обоих машинах, на который будет вешаться aliase
sleep_Time - интервал проверки master-сервера

На первом (Master):
  • ifconfig eth0:1 192.168.10.105 netmask 255.255.255.0 
  • arping -c 1 -s 192.168.10.105 192.168.10.1

На втором (Slave):

Создаем скипт
mkdir /opt/sustainability
nano /opt/sustainability/sustainability.sh

#!/bin/bash
MASTERHOST="192.168.10.100"
IP1="192.168.10.105"
MASK1="255.255.255.0"
INERFACE1="eth0:1"
GATE1="192.168.10.1"
sleep_Time=10

sleep 10

Master_enable () {
                logger "setupip :: Host $MASTERHOST is UP at $(date); Shutting down $IP1"
                ifconfig $INERFACE1 down
}

Master_disable () {
    #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
}

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
             Master_disable
        fi
else
        if [ $localip -gt 0 ]; then
             Master_enable
        fi
fi

sleep $sleep_Time
done



Комментарии

Популярные сообщения из этого блога

mikbill расшифровка завершений сессий

Accel-ppp команды

Zabbix agent установка и настройка