Необходимо решение, которое в случае неработоспособности одного сервера, перенаправит входящий трафик на другой сервер?

Есть 4 реальных IР адреса от одного провайдера: 3 IР уже используются (1.1.1.1, 2.2.2.2, 3.3.3.3) на 3х рядом стоящих серверах в его дата-центре и один IР свободен (4.4.4.4)

Есть еще 1 IР (5.5.5.5) от другого провайдера, который используется сервером размещенном в его дата центре.



Допустим клиенты жестко привязаны к IР 1.1.1.1. Необходимо решение, которое в случае неработоспособности 1.1.1.1 перенаправит весь трафик к 5.5.5.5 (другой дата центр).

Знаю что это делает itpables, но загвоздка в том, что он это будет делать когда установлен на 1.1.1.1 и когда этот сервер включен. А необходимо, чтобы была возможность сделать перенаправление даже если сервер 1.1.1.1 выключен. При этом ставить перед ним отдельный сервер который будет этим рулить нежелательно, потому что если он упадет, никакого перенаправления вообще не будет. То есть, делать в этой цепи ГЛАВНОЕ звено нельзя, необходимо быть взаимозаменяемым. Например временно назначать IР 1.1.1.1 рядом стоящему 2.2.2.2 который и будет перенаправлять на 5.5.5.5, а когда 1.1.1.1 вернется к нормальной работе, то вернуть IР и отменять политику фаерволла на 2.2.2.2. Но в этой схеме на каждую машину надо ставить iptables, и следить за ними, чтобы включать и выключать нужные\ненужные фаерволлы. Это не совсем, как я понимаю, правильно.



Подскажите более элегантное решение этой задачи
  • Вопрос задан
  • 3081 просмотр
Пригласить эксперта
Ответы на вопрос 7
shadowalone
@shadowalone
В вашем, конкретном, случае, только настроить через DNS, потому как:
1. Вы не хотите ставить дополнительное оборудование.
2. Сервера в разных сетях.

Сделать короткий TTL для A записи, скажем 3-5 минут. На DNS сервере повесить скрипт в крон, или демон, который будет проверять доступность первого сервера и в случае недоступности, менять A запись в доменной зоне на IP второго сервера и перечитывать зону, при возвращении к к жизни первого сервера, соответственно менять обратно.

максимальные задержки = TTL*2
Ответ написан
taliban
@taliban
php программист
Может я глупость скажу, но нс записи не для этого делают разные на домен?
Ответ написан
Комментировать
@smartlight
читайте про кластеры
Ответ написан
Комментировать
@DAzgluk
Попробуйте посмотреть в сторону CARP, единственное что для его работы нужно 3 адреса находящиеся в одной сети.
Схема такая, делаем 1.1.1.1 CARP адресом > В случае доступности сервера все работает как есть, в случае недоступности, отвечает другой сервер, ну а дальше перенаправляет трафик в другой датацентр.

На самом деле очень критично допустимое время Downtime, в случае с CARP это пара секунд. А так, да, DNS
Ответ написан
Комментировать
akzhan
@akzhan
CARP, в худшем случае HA Proxy или nginx.

На входной адрес не вешается ничего, кроме балансера.
Ответ написан
Комментировать
strib
@strib
1) Посмотрите на продукцию компании radware
2) Делали heart-beat между серверами. И после ряда проверок (приложение живо? сервер жив?) происходила подмена IP адреса.
Ответ написан
Комментировать
@igordata
надо ставить сервак, который уже перенаправляет людей на другие серваки за ним. Т.к. он сам только перенаправляет, то он и не падает. Остальные уже как повезёт. Т.е. когда падает один сервак за ним, он должен перестать направлять трафик на тот, что упал, и распределять его по другим. Усё. Иначе никак. Все остальные способы завязаны на смену IP.

Альтернатива:
В вашем приложении вы можете при подключении к главному серверу получать с него адрес того сервера, на который отправить конкретного пользователя. Заодно и нагрузку размазать можно будет. Но тут уж нет жесткой привязки к IP, что и хорошо.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы