Вы здесь

[SOLVED] Apache повесить на Failover IP, насколько это нормально?

Здравствуйте.

Есть два сервера. На обоих apache, MySQL, memcache и еще немного. Оба сервера настроены таким образом, что один из них продакшен, другой бэкап. Исходный код WEB сервиса идентичен (кроме настроек подключений), настроена репликация. Но он слабее в раза так 2 чем основной.

В DNS изначально прописан маленький TTL (3600) и указан IP адрес продакшен сервера. Если я укажу в hosts IP адрес бэкапа и зайду на него, то сам WEB сервис будет работать корректно.

Изначально была задумка, в случае необходимости переключения на бэкап с продакшена или в случае аварии на нем (тьфу тьфу тьфу ))) у меня прописаны N баш скриптов, которые я запускаю и тем самым переключаю работу на резервный. Далее я меняю DNS запись и простой будет не такой уж большой. Кол-во запросов в день 250-400к. В основном на рабочее время приходит все с 7 до 22.

Но как то недавно в Интернете на форуме наткнулся на обсуждение подобной ситуации. Один из пользователей написал про возможность использования Failover IP. Сервера на хетзнере, там такая услуга есть. Важно, что я могу менять по API запросу какому из серверов этот ип адрес назначать. Я подключил один ип адрес, включил на резервном сервере его таким образом:
config_eth0="XXX.XXX.XXX.XXX/26 YYY.YYY.YYY.YYY/32"

где XXX.XXX.XXX.XXX - осноной ип адрес, YYY.YYY.YYY.YYY - failover

Прописал в apache настройки, создал временную директорию, завел временный поддомен и указал IP адрес failover у него. Все заработало.

Вопрос буде такой, насколько это нормально вешать продакшен WEB ресурс, который принимает по 250-400к запросов в день на Failover IP. Или это ненужные костыли? и стабильность может потеряться таким образом?

Как вариант, если я правильно понимаю, и он правильнее.. это взять 3ий сервер, на нем запустить ngnix и делать балансировку именно на нём. В случае недоступности 1 сервера, то отправлять на 2ой. Но это в любом случае доп. затраты, силы (никогда не работал с ngnix за все время своё) чтобы разобраться и т.п. А тут наткнулся на такой вариант, то вот решил спросить.

Буду благодарен, если выскажите своё мнение. Спасибо.

На самом деле никакой мистики тут нет, и failover адрес на самом деле это просто alias или multihoming. Чтобы все это реально заработало извне, надо еще помудрить с маршрутизацией и т.д.
Кстати, в качестве балансера может и Апач быть, но на твои задачи доп. коробка - явный перебор, да и что будет, если она откажет?!.. ;)
Тебе надо что-то попроще, типа этого, только не рекомендую сразу делать свой ебилд. как они рекомендуют... начни со стандартного из репы.

Если Apache будет стабильно работать на этом ип адресе, то меня это в принципе устроит.
На данный момент я пробовал прописать его в httpd.conf и в vhost на резервной машине и все у меня работает. где может быть подводный камень в маршрутизации?.

Между серверами OpenVPN. Все службы nodejs и apache+php подключаются к MySQL, memcache, memcacheq по IP адресу vpn. Я написал bash скрипты, которые:
- сначала все аккуратно останавливают;
- затем переписывают конфиги подключений к MySQL, memcache, memcacheq и т.п.;
- затем сохраняют информацию по мастер логу с резервного, и меняет мастер и слейв местами;
- ну и стартуют все заново.

В этом случае я бы встроил бы bash скрипт для API команды в хетзнер перед стартом всех служб, чтобы этот псевдо FailoverIP адрес кинуть на другой сервер + правку конфига апач.

Так не получится? Или замылился глаз у меня и не видит чего то?

Пробуй! :)

У тебя сервер свободен с 22 до 7 - вот и дерзай!.. ;)

А свое мнение и решение я уже озвучил. Делать/анализировать за тебя как-то не хочется...

ну он относительно свободен )) за ночь прилетает плюс минус 30к запросов.
спасибо за мнение, оно важное для меня... попробую проверить сегодня ночью, как сработает.. отпишусь.
ну и надо будет найти время почитать про Corosync

beba написал:
ну он относительно свободен...

На виртуалках поиграйся.

Наконец то добрался до этой задачи и закончил вопрос.

Все получилось очень даже неплохо.

WEB-платформа работает на failover ип адресе, который дал Hetzner. В DNS прописан он же.
Подключение к БД, к memcache, к другим сервисам идет по OpenVPN ип адресу.
OpenVPN между серверами по внешним ип адресам.

В результате, когда падает сервер основной я через bash скрипт:
1) Останавливаю все сервисы платформы;
2) Устанавливаю Failover ип адрес на другой сервер;
3) Меняю настойки WEB-платформы, фоновых сервисов платформы;
4) Запускаю всё

Время простоя после обнаружения проблемы 1-2 минуты. Что для сервиса, очень важно.

Всем удачи в решениях вопроса. SysA отдельное спасибо и хорошего дня.

p.s. На LVEE опять не доехал, дети заболели и сорвалось в последний момент. Буду в Минске как нибудь, с удовольствием угостил бы тебя пивом.. если будет желание у тебя конечно.

На два хоста OpenVPN не сложно поднять, но лучше использовать для внутренней связи бесплатную фичу Hetzner vSwitch

у нас еще два сервера есть в РБ.. я работаю тоже только через OpenVPN соединение с серверами.
OpenVPN не сложно развернуть, поэтому и использую... единственное с гаджетов не получалось пока зайти по OpenVPN. Но не заморачивался пока. Все же работа с серверами это больше хобби.

Рад, что помог. Все бы так адекватно понимали помощь! :)

Но ты сделал не до конца - я имел ввиду и привел пример для автоматического переключения, тогда это было бы не 2мин, а 2сек! Можно и меньше, но выше вероятность "дребезга". Непонятно зачем ты рестартуешь процессы (т.е. понятно почему, но не понятно зачем ты так делаешь). По идее процессы должны привязываться к локальным адресам, а внешние запросы переадресуются/маскируются. Это я и имел ввиду "помудрить с маршрутизацией".

Для справки: при применении балансировщика время переключение вообще нулевое - просто следующий/повторный запрос идет на живой сервер. Но там все сложнее...

Кстати, на LVEE я тоже в итоге не поехал, дела заели... но с чего ты решил, что я из Минска?!.. ;) Я просто думал, что мы там сможем пересечься.

> Непонятно зачем ты рестартуешь процессы (т.е. понятно почему, но не понятно зачем ты так делаешь). По идее процессы должны привязываться к локальным адресам, а внешние запросы переадресуются/маскируются. Это я и имел ввиду "помудрить с маршрутизацией".
думаю тут накладываются ограничения в ресурсах и особенностях построения системы. У меня используется и веб-сервер, и nodejs, и memcacheq, и MySQL, и memcachedb, и OpenVPN и очень много но.
С удовольствием обсудил бы эти моменты, т.к. моего опыта именно в сфере администрирования очевидно не хватает для правильной организации.

> Для справки: при применении балансировщика время переключение вообще нулевое - просто следующий/повторный запрос идет на живой сервер. Но там все сложнее...
да, планировал почитать в эту сторону.. но со временем пока беда ((

> но с чего ты решил, что я из Минска?!.. ;) Я просто думал, что мы там сможем пересечься.
даже не знаю, чего я так решил.. Сам с Гродно. Если будешь рядом с Гродно, пиши, встречу, накормлю.. ))) ну или в Минске может будешь как нибудь проездом, напиши.. мне надо будет попасть до НГ, то я пока не рвусь... может получится совместить..
Еще раз спасибо. Хорошего дня.