Балансировка нагрузки: циклический перебор DNS перед аппаратными балансировщиками нагрузки. Как поделиться липкостью?

DNS Round Robin (DRR) позволяет выполнять дешевую балансировку нагрузки (лучше использовать термин «распределение»). Его преимущество в том, что он допускает бесконечное горизонтальное масштабирование. Минус в том, что если один из веб-серверов выходит из строя, некоторые клиенты продолжают использовать сломанный IP-адрес в течение нескольких минут (минимум TTL 300) или более, даже если DNS реализует отказоустойчивость.

Аппаратный балансировщик нагрузки (HLB) прозрачно обрабатывает такие сбои веб-сервера, но не может бесконечно масштабировать свою пропускную способность. Также нужен горячий запас.

Хорошим решением кажется использование DRR перед группой пар HLB. Каждая пара HLB никогда не выходит из строя, поэтому DRR никогда не останавливает клиентов. Кроме того, когда пропускной способности недостаточно, вы можете добавить в группу новую пару HLB.

Проблема: DRR случайным образом перемещает клиентов между парами HLB, и поэтому (насколько мне известно) привязка сеанса не может работать.

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

Вопрос: возможна ли/существует ли реализация HLB, в которой экземпляр может совместно использовать свое сопоставление (идентификатор сеанса, веб-сервер) с другими экземплярами?

Если это возможно, то клиент будет перенаправлен на тот же веб-сервер независимо от HLB, который перенаправил запрос.

Заранее спасибо.


person Valentino Miazzo    schedule 24.09.2009    source источник


Ответы (4)


Современные балансировщики нагрузки обладают очень высокой пропускной способностью (гигабит). Так что, если вы не работаете с огромным сайтом (например, Google), добавление пропускной способности не является причиной, по которой вам понадобится новая пара балансировщиков нагрузки, тем более что большинство крупных сайтов разгружают большую часть своей пропускной способности на CDN (сети доставки контента), такие как Akamai. Если вы прокачиваете гигабит данных, не поддерживающих CDN, через свой сайт и еще не имеете глобальной стратегии балансировки нагрузки, у вас есть проблемы посерьезнее, чем сходство кеша. :-)

Вместо ограничения пропускной способности сайты, как правило, добавляют дополнительные пары LB для географического распределения серверов в отдельных центрах обработки данных, чтобы пользователи, разбросанные по всему миру, могли общаться с ближайшим к ним сервером.

Для этого последнего сценария компании, занимающиеся балансировкой нагрузки, предлагают решения для геолокации, которые (по крайней мере, до нескольких лет назад, когда я следил за этим материалом) были основаны на пользовательских реализациях DNS, которые смотрели на клиентские IP-адреса и разрешались в пары балансировщика нагрузки. Виртуальный IP-адрес, который является «ближайшим» (по сетевой топологии или производительности) к клиенту. В наши дни CDN, такие как Akamai, также предлагают глобальные услуги балансировки нагрузки (например, http://www.akamai.com/html/technology/products/gtm.html). Хостинг Amazon EC2 также поддерживает такую ​​функцию для размещенных там сайтов (см. http://aws.amazon.com/elasticloadbalancing /).

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

Имейте в виду, что определение географического местоположения очень сложно, так как вам также необходимо определить географическое местоположение ваших данных, чтобы убедиться, что ваша внутренняя сеть между центрами обработки данных не перегружена.

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

Нет-нет, на вашем месте я бы не беспокоился о нескольких парах балансировщиков нагрузки. Получите одну пару и, если у вас нет много денег и времени на проектирование, сотрудничайте с хостером, который хорошо поддерживает работу сети своего центра обработки данных.

Тем не менее, если сходство кеша настолько важно для вашего приложения, что вы думаете о том, чтобы выложить большие $$$ для нескольких пар балансировщиков нагрузки, возможно, стоит рассмотреть некоторые изменения архитектуры приложения (например, использование внешнего кэширующего кластера). . Такие решения, как memcached (для Linux), предназначены для этого сценария. У Microsoft также есть один, который называется «Velocity.

В любом случае, надеюсь, что это полезная информация — по общему признанию, прошло некоторое время с тех пор, как я был глубоко вовлечен в эту область (я был частью команды, которая разработала продукт для балансировки нагрузки приложений для крупного поставщика программного обеспечения), так что вы можете удвоить - проверьте мои предположения выше с фактами, которые вы можете получить в Интернете от F5 и других поставщиков LB.

person Justin Grant    schedule 25.09.2009

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

Проблема: [DNS Round Robin] случайным образом перемещает клиентов между парами HLB, и поэтому (насколько мне известно) привязка сеанса не может работать.

Эта предпосылка, насколько я могу судить, неточна. Кажется, никто на самом деле не знает, что такое старый браузеры могут это делать, но предположительно каждое окно браузера будет оставаться на одном и том же IP-адресе, пока оно открыто. Более новые операционные системы, вероятно, подчиняться правилу "соответствовать самому длинному префиксу". Таким образом, не должно быть много «колеблющихся», случайных переключений с одного IP-адреса балансировщика нагрузки на другой.

Однако, если вы по-прежнему беспокоитесь о том, что пользователи будут случайным образом переназначены на новую пару балансировщиков нагрузки, вам может помочь небольшая модификация классической настройки балансировки нагрузки L3/4 и L7:

  • Публикуйте записи циклического перебора DNS, которые переходят к виртуальным IP-адресам высокой доступности, которые обрабатываются балансировщиками нагрузки L4.
  • Настройте балансировщики нагрузки L4 для переадресации на пары балансировщиков нагрузки L7 на основе исходного IP-адреса, т. е. используйте согласованное хеширование на основе IP-адресов конечных пользователей, чтобы всегда направлять конечных пользователей к одному и тому же балансировщику нагрузки L7.
  • Пусть ваши балансировщики нагрузки L7 используют «липкие сеансы» по вашему желанию.

По сути, это всего лишь небольшая модификация того, что Вилли Тарро (создатель HAProxy) написал много лет назад< /а>.

person Jesper M    schedule 06.02.2011

спасибо за то, что поставили вещи в правильном свете. Я согласен с тобой.

Я немного почитал и нашел:

LB очень высокого уровня, такой как это, может масштабироваться:

  • 200 000 рукопожатий SSL в секунду
  • 1 миллион TCP-соединений в секунду
  • 3,2 миллиона HTTP-запросов в секунду
  • 36 Гбит/с пропускной способности TCP или HTTP

Поэтому вы правы, ЛБ вряд ли может стать узким местом.

Во всяком случае, я нашел эту (старую) статью http://www.tenereillo.com/GSLBPageOfShame.htm где объясняется, что DNS с учетом геолокации может создавать проблемы с доступностью.

Кто-нибудь может прокомментировать эту статью?

Спасибо,

Валентино

person Valentino Miazzo    schedule 29.09.2009
comment
Подвопрос перемещен в serverfault .com/questions/69864/ - person Valentino Miazzo; 30.09.2009

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

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

Я искал это, но не нашел DNS-сервера, который это реализует (хотя у Bind есть некоторые возможности с представлениями).

person SjorsH    schedule 29.04.2014
comment
Неуместно, что нет известного вам DNS-сервера, который делает это, но вы все еще называете это простым. :) - person Tim Lovell-Smith; 10.07.2014