Запуск и удержание кластера
Считается, что после установления соединения по VPN соответствующие демоны, например, ipsec, сами обрабатывают исключительные ситуации типа внезапного пропадания коннекта и восстанавливают соединение при необходимости.
На практике же картина не столь радужна и приходится применять “ручные” средства контроля связности VPN и её восстановления. Одно из возможных решений описано ниже.
Скрипт /usr/local/sbin/check_vpn:
#!/bin/bash
# проверяем, не запущен ли другой экземпляр скрипта…
[ -z $CRONTAB ] && echo “Проверка на дубль”
[[ “2″ -ne `ps aux | grep -c check_vpn` ]] && exit# проверяем наличие интернета — пытаемся получить страницу ya.ru
[ -z $CRONTAB ] && echo “Проверка интернета”
if [[ ‘0′ -eq `wget –quiet –timeout=10 –tries=2 -O - ya.ru| grep -c ‘http://www.yandex.ru/yandsearch’` ]]; then
exit
fi# проверяем наличие vpn — пытаемся пинговать vpn-овский ip
[ -z $CRONTAB ] && echo “Проверка vpn”
if [[ ‘0′ -ne `ping -c 10 192.168.99.99 | grep -c ttl` ]]; then
exit
fi# насколько можно судить, в этот момент vpn отсутствует
echo “VPN отсутствует! Пытаюсь поднять…”
source /usr/local/sbin/restart_vpn
…проверка [ -z $CRONTAB ] в скрипте служит для вывода сообщений при
запуске из комстроки.
Скрипт /usr/local/sbin/restart_vpn:
#!/bin/bash
# полный останов всех служб vpn
/usr/sbin/vserver mainvshost stop
/etc/init.d/ipsec stop
/etc/init.d/ipsec zap # бывает, что “залипает” в started статусе…
/sbin/ifconfig ipsec0 down
/etc/init.d/heartbeat stop
/etc/init.d/drbd stop
sleep 30 # для подстраховки подождём…#начинаем поднимать обратно…
# после запуска ipsec таймаут обязателен, иначе drbd неправильно стартует
/etc/init.d/ipsec start
sleep 40# этот роутинг нужен только у меня в сети, иначе местные служебные сервера не видны
/sbin/route add -net 192.168.4.0 netmask 255.255.255.240 gw 192.168.5.7/etc/init.d/drbd start
sleep 10
/etc/init.d/heartbeat start
Выдержка из crontab -l :
CRONTAB=1
*/1 * * * * /usr/local/sbin/check_vpn

Write a Comment