LINUX.ORG.RU
ФорумAdmin

Приоритет для A/AAAA-записей в DNS


0

1

Есть горстка VPS'ок, различной степени доступности и надежности, расположенные физически в разных уголках планеты.

На моем локалхосте хостятся сервисы (почта, жаббер, веб), и до каждой VPS хочу пробросить туннель, чтобы при обращении к домену все сервисы были доступны.

# ssh -f -N -n -T -R 8000:localhost:80 $VPS0
# ssh -f -N -n -T -R 8000:localhost:80 $VPS1
# ssh -f -N -n -T -R 8000:localhost:80 $VPS2
сейчас это делается так...

Теперь на домене добавляются несколько A-записей с IP-адресами всех VPS. И при обращении к домену DNS выдает случайный IP адрес (A-запись) одной из VPS, - проблема в том, что какой-то сервер может отвалиться.

Нужно сделать что-то сродни распределению нагрузки, только не о нагрузке речь, и сделать это на уровне DNS, чтобы если IP недоступен - обращался к другому IP этого домена. Как-то так. Кажется, это невозможно, но тыкните, если кто знает...
Или просто, если кто знает, как можно повысить надежность сервисов, имея несколько серверов - буду рад услышать. Зеркалировать все подряд не вариант. Хотя, если есть способ сделать это легко, почему бы и нет.

Мр-бр-бр. Вот хорошо, у MX и SRV записей есть приоритет, и когда хост в MX/SRV недоступен - обращение идет к следующему по списку. Для A-записей похоже такого не предусмотрели...

Если нужно делать это именно на уровне DNS — то DNS-серверу и мониторить доступность серверов и убирать занятые из round-robin. Для некоторых есть готовые решения (http://www.eyrie.org/~eagle/software/lbcd/readme.html + lbnamed из старого, хз, чем это сейчас модно делать). Обычно это делают не на уровне dns, впрочем.

x3al ★★★★★ ()

Я вот подумал... А что если попробовать динамически обновлять IP-адреса? Просто следить, что если туннель отвалился - значит отвалился VPS и обновлять запись с IP адресом на DNS, и в таком случае запись должна быть всего одна... В теории, прокатит?

gayevskiy ()
Ответ на: комментарий от x3al

Обычно это делают не на уровне dns, впрочем.

Интересно рассмотреть любые варианты, поделитесь пожалуйста, если знаете.

gayevskiy ()
Ответ на: комментарий от gayevskiy

Когда разные VPS физически в разных странах, это будет мягко говоря вытаскиванием гланд через заднее место. Обычно кластеризуют всё это.

Да, как именно мониторить — побоку, смысл ты понял: на dns обновлять список IP (даже если он 1) при нерабочем сервере.

x3al ★★★★★ ()

Без внешнего балансёра это невозможно. Либо писать какой-то свой хитрый DNS (или скрипт для управления), который при отказе одного из хостов будет удалять его из зоны. Ну и ТТЛ зоны должен быть минимален.

blind_oracle ★★★★★ ()

Зависит от того, как часто будет меняться IP VPSки, и как быстро вы хотите увидеть это изменение в Интернете. Если не часто и не сверхбыстро - скрипт для управления dns и правильная подборка ttl для зоны, VPS выделить желательно в отдельную зону, чтобы все остальное имело нормльный ttl. Если важна быстрая реакция на изменение - load-blancer, в том из его вариантов какой вас устроит. Очень уж их много.

eabi ()

У меня было подобное ТЗ. Все сводится к тому, что обеспечивать отказоустойчивость на уровне ДНС очень нестабильно.
Во первых, скорее всего придется ДНС сервер держать у себя чтоб обеспечить максимальную гибкость в настройке (скрипты или какие-то самописные/готовые приблуды). В этом случае, добавляется дополнительная точка отказа. Лег ДНС - легло все.
Во вторых, между падением сервера, переключением ДНС и обновлением зоны у клиента может пройти довольно длительное время. Даже одна минута недоступности сервера заставляет клиента уйти. В третьих, чем меньше TTL зоны - тем больше нагрузка на ДНС сервер.

Подобный механизм round-robin DNS применяют лишь в целях балансировки нагрузки и никак не для отказоустойчивости. При вашем ТЗ, ИМХО, отказоустойчивости можно добиться лишь кластеризировав айпишник хотя бы между двумя серверами (VPS) в одном ДЦ. Главное требование к ДЦ - возможность перемещение айпишника в случае падения сервера - это раз. Два - между серсивом и клиентом поставить haproxy и уже с него швырять на сокет через что угодно. К примеру, локальный серсис сделать основным, все остальные через VPN сделать резервными. Кластеризировать айпишник можно чем угодно. К примеру, heartbeat или uwsgi+legion. У меня в основном работающие на php сервисы, по сему uwsgi+legion для меня оказался более приемлем.

iron ★★★★★ ()
Ответ на: комментарий от Komintern

Решает, только при больших объемах трафика дешевле арендовать несколько серверов нежели кормить Амазон.

iron ★★★★★ ()
Ответ на: комментарий от iron

Подобный механизм round-robin DNS применяют лишь в целях балансировки нагрузки и никак не для отказоустойчивости.

Не в полной мере верно. DNS RR выдаёт клиенту все имеющиеся A/AAAA записи для зоны, некоторые клиенты (например не слишком тухлые браузеры) умеют по очереди стучаться к кажому из полученных IP пока не найдут рабочий.
Хотя это конечно-же не самый лучший вариант обеспечения высокой доступности.

P.S. тему читал по не внимательно, вы уж извините если ответил невпопад.

MrClon ★★★★★ ()
Ответ на: комментарий от MrClon

Не в полной мере верно. DNS RR выдаёт клиенту все имеющиеся A/AAAA записи для зоны, некоторые клиенты (например не слишком тухлые браузеры) умеют по очереди стучаться к кажому из полученных IP пока не найдут рабочий. Хотя это конечно-же не самый лучший вариант обеспечения высокой доступности.

Спасибо за поправку, не знал об этом.

iron ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.