Как один домен может маршрутизироваться к постоянно меняющемуся пулу серверов?

Как один домен может маршрутизироваться к постоянно меняющемуся пулу серверов?

Я уверен, что это простое решение, просто я не слишком хорошо знаком с тем, как работает DNS, и связано ли это вообще с этой проблемой.

Если я запускаю веб-сервис на Amazon EC2, распределенный по многим экземплярам, ​​как мне сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов, который будет время от времени меняться?

Поскольку экземпляры могут присутствовать в одну секунду, но исчезнуть в следующую (и наоборот), мне нужен способ случайного выбора активного члена кластера для маршрутизации. Обновления должны быть мгновенными. Возможно ли это вообще, с кэшированием DNS и всем остальным?

решение1

Для этого есть несколько подходов, некоторые из которых вам по силам.

В вашем случае я рекомендую просто иметь несколько записей DNS с относительно коротким TTL. Распределение не оптимально, и клиенты могут не выбрать узел с наименьшей задержкой. Однако это чрезвычайно просто: все, что вам нужно сделать, это иметь возможность добавлять записи DNS. Это широко используемый и проверенный метод.

Если вам нужно удалить сервер из пула, просто удалите его записи DNS, и большинство клиентов перестанут его использовать после истечения TTL. То же самое касается новых серверов: добавьте их, и после истечения TTL клиенты начнут их использовать.

Например, Google использует это как часть своих методов балансировки:

$ dig A google.com

;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             297     IN      A       74.125.77.99
google.com.             297     IN      A       74.125.77.104
google.com.             297     IN      A       74.125.77.147

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

решение2

Обновления должны быть мгновенными. Возможно ли это вообще, с кэшированием DNS и всем остальным?

Нет, с DNS это невозможно.Записи DNS обслуживаются с указанием времени жизни (TTL), которое определяет количество времени, в течение которого кэши могут использовать запись.безперепроверка с авторитетным DNS-сервером. И по разным причинам DNS TTL не может быть меньше 10 минут. DNS round robing — этонетрешение для балансировки нагрузки, по крайней мере, если вам нужна бесперебойность работы сервиса. Смотрите fx thisстарый вопрос Джеффа Этвуда.

ТыможетиспользоватьСторонние DNS-сервисы, которые сочетают DNS Round Robin с проактивным мониторингомсерверов и автоматически удалять мертвые серверы из DNS. Это не очень хорошее решение, но оно может быть достаточно хорошим для менее важных сайтов, и его легко настроить с помощью fx DNSMadeEasy или EdgeDirector.

Стандартный в отрасли способ управления доступностью веб-сервера — этоБалансировщик нагрузки уровня 4 или уровня 7перед веб-серверами.

веб-сервис на amazon ec2, распределенный по многим экземплярам, ​​как сделать так, чтобы одно доменное имя можно было использовать для доступа ко всему пулу серверов?

Amazon предлагает услугу plug-n-play для этого,называется АмазонЭластичная балансировка нагрузки. По сути, это управляемая услуга от Amazon, которая устанавливает балансировщик нагрузки уровня 7 (HTTP) или уровня 4 (TCP) перед вашими веб-серверами EC2.

Другой распространенный вариант — настроить экземпляр EC2 с балансировщиком нагрузки L7, таким как nginx, HAProxy, Apsis Pound, Apache 2.2, Zeus Load Balancer или что-то еще (их несколько). Но если вы пойдете по этому пути, вам придется управлять ОС + ПО балансировки нагрузки самостоятельно и подумать, как сделать сам экземпляр балансировщика нагрузки EC2 достаточно высокодоступным.

Связанный контент