Список вопросов
Как зайти в Даркнет?!
25th January, 01:11
8
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
900
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
952
0
Очень долго работает Update запрос Oracle
27th January, 09:58
916
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
907
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
942
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1727
0
период по дням
25th October, 10:44
3957
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3722
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4614
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4382
0
Помогите пожалуйста решить задачи
24th November, 23:53
6088
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4352
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4400
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Совместное использование IP адреса на двух серверах
Просмотров: 306
 
Ответов: 4
Есть два виртуальных сервера с HAProxy, размещенные на рахных физических машинах, задача — сделать failover, тоесть поднимать IP адрес на машине которая сейчас доступна, если другая перестанет отвечать.
Все IP адерса из одного пула, бродкаст один и тот же, но одна машина не видит то что другая шлет в бродкаст, поэтому такие решения как keepalived, ucarp, heartbeat не подходят. Почему не видят — незнаю, но так как доступа нету ни к сети ни к ксеновским гипервизорам то с этой стороны ничего не исправить. Что еще можно использовать для достижения результата без бродкаста? (Слать в бродкаст не проблема — все равно придется слать ARP риквест к ближашему роутеру для изменения IP. Проблема — читать другой ВПСке из бродкаста).
Спасибо.
А все таки оказалось быстрее и проще написать самому. Расскажу подробней, ибо вещь полезная. Я не рассписываю как на разных системах, но должно работать без проблем на любых 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 у себя
Все тесты закончились хорошо. Переменные должны быть интуитивно понятны.
Думаю кому-то этот скрипт пригодиться.
необходимая третья айпишка 10.10.10.40, которая и будет подниматься на живом сервере если другой упал
ifconfig eth0:1 10.10.10.40 netmask 255.255.255.0
arping -c 1 -s 10.10.10.40 10.10.10.1#!/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
/usr/local/sbin/setupip &
Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться