Схемы балансировки нагрузки для web-серверов

автор: Александр Качанов
перевод: n|a

Схемы распределения нагрузки во многомашинной системе

Аппаратное распределение нагрузки

Намного более надежной альтернативой круговому DNS является использование для распределения нагрузки специальных устройств. См. рис. ниже:

В сеть между другим сетевым оборудованием (сетевым экраном, маршрутизатором и т.д.) и web-серверами вставляется новый прибор, который называется аппаратным распределителем нагрузки (Hardware Load Balancer). Все запросы пользователей, адресованные на определенный URL проходят через распределитель. К нему подключается группа Web-серверов, которые ведут себя, как один сервер. Эта конфигурация называется кластером (cluster). Для всего внешнего мира весь кластер серверов имеет один IP-адрес.

При получении TCP/IP пакетов предназначенных для кластера, распределитель делает следующее:

- принимает решение, какому из серверов кластера следует направить следующий запрос

- опрашивает все сервера и приложения (т.е. определенный TCP/IP порт) - доступны ли они

- в некоторых случаях проверяет, возвращает ли сервер корректные данные. Это особенно критично в тех случаях, когда сервер отвечает, но вот в ответ он все время выдает "HTTP Error 404"

- переделывает IP-заголовок пакета так, что он уходит определенному серверу. Эта переделка называется "преобразованием сетевого адреса" (network address translation).

- Отправляет пакет на сервер

- Когда сервер отвечает клиенту, распределитель производит такое же преобразование всех пакетов и возвращает их клиенту. В результате этого второго преобразования клиент получает TCP/IP-пакеты в таком виде, как если бы они были получены от определенного IP-адреса, который закреплен за кластером.

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

Балансировка

Как определяет распределитель, какому из серверов направить запрос? Всякий раз это зависит от распределителя, хотя алгоритмы почти всегда одинаковы. Распределитель нагрузки собирает огромное количество информации об активности в сети. В том числе объем трафика, идущие к серверу или от него, скорость, с которой отвечает сервер на TCP/IP запросы, количество соединений, которое поддерживает в данный момент времени каждый сервер, история ответов на предыдущие запросы. В распределитель нагрузки заложено несколько алгоритмов, из которых администратор системы может выбирать любой. Алгоритмы включают в себя и круговое переключение адресов и пропорциональный перебор (круговой перебор адресов с коэффициентами). Благодаря этим алгоритмам распределитель может принять "умное" и эффективное решение по распределению нагрузки. Посмотрим снова на схему:

Использование процессора на сервере А достигло 100% из-за выполнения какого-то особенного запроса. Процессор же сервера В используется только на 10-15%. Распределитель нагрузки заметит, сервер А слишком медленно отвечает на запросы, и перенаправит все последующие запросы на сервер В. Он будет продолжать это делать до тех пор, пока уровень загрузки сервера А не вернется на приемлемый уровень. Таким образом мы получаем гораздо более эффективный результат, чем при использовании кругового DNS.

Отказоустойчивость

Обратимся опять к примеру кластера из двух серверов. Если сервер А "падает", аппаратный распределитель нагрузки не будет посылать ему данные. Машина сама по себе может работать, но если web-сервер на этой машине не отвечает (скажем вы остановили его), то распределитель удалит сервер А из своего списка серверов и направит весь трафик на сервер В. В результате устойчивость , как видите, тоже намного выше, чем при использовании кругового DNS.

Еще одно замечание об использовании распределителей. Ведь сам распределитель тоже может выйти из строя. Для решения этой проблемы обычно устанавливают второй распределитель, который работает как "всегда готовый резерв" (hot spare). См. рис.

Эта конфигурация с избыточной надежностью как правило очень устойчива. Распределители соединяются обычно через последовательное соединение, например через кабель RS-232. В каждом из приборов есть контрольное устройство (watchdog processor), которые постоянно поддерживают связь друг с другом. В каждый конкретный момент работает только один распределитель, а второй вступает в строй, если основной "упадет". В случае выхода прибора из строя или его необычного поведения, одно контрольное устройство "жалуется" другому и принимается решение, кто возьмет на себя операции по распределению нагрузки. Даже после выхода из строя первого распределителя, второй - выполняя работу - постоянно проверяет первый. Если первый распределитель вернулся в строй, второй возвращает все обязанности первому и переходит в режим ожидания.

Администрирование

В администрировании аппаратный распределитель нагрузке несколько сложнее, чем схема с круговым DNS, но вовсе не слишком утомительна. Установить и настроить распределитель не труднее, чем обычный маршрутизатор, и знаний вашего администратора сети несомненно будет достаточно для этого. Администрирование выполняется только на самом распределителе и никак не влияет на сами серверные машины. Это большое преимущество, так как администраторам не надо заниматься конкретно каждым сервером.

Как правило аппаратные распределители нагрузки - высокоинтеллектуальные приборы. Цена на них начинается от 20 тысяч долларов - то есть примерно столько же, сколько стоит хороший маршрутизатор… или 10 хороших серверов. Из-за того, что работа распределителя связана с преобразованием заголовков всех TCP/IP пакетов, пропускная способность системы уменьшается. Предел скорости работы распределите 45-50 Мбс на момент написания статьи. Казалось бы, скорость невероятная, но крупные сайты могут превысить (и превышают) этот предел в период пиковой нагрузки. При этом дополнительные пакеты просто игнорируются. Неприятно, конечно, но большинству Web-севреров это не грозит.

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

Обычно в набор функций распределителя входит возможность приписывать одному серверу один определенный IP-адрес или целое пространство адресов класса С. Эта функция называется "привязкой" ("affinity"). Но об этом позже. Также среди функций могут быть удаленное администрирование с помощью web-интерфейса, оповещение администратора о неполадках по пейджеру, генерация отчетов о работе сети в реальном времени и многое другое.

В качестве более экономичного, но менее функционального решения можно воспользоваться "усеченным" вариантом распределителя, который называется "переключателем нагрузки" (load director). Его интеллектуальность несколько пониже (например в них нет поддержки "привязки" (affinity), но зато и стоит он дешевле.

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

1. Нет денег на Cray? А зачем?
2. Web-сайты из нескольких серверов
3. Схемы распределения нагрузки во многомашинной системе
- Круговой DNS
- Аппаратное распределение нагрузки
- Программное распределение нагрузки
- Смешанные решения
4. Пару слов о "привязке"
5. Заключение

Rambler's Top100
Rating All.BY
Akavita
Valid XHTML 1.0!