img

Что из себя представляет балансировщик нагрузки HAProxy и как он работает?

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

 

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

На первых порах вы, скорее всего, обрадуетесь резкому приросту трафика. Это показатель того, что ваши продукты и ваша маркетинговая деятельность приносят свои плоды – на ваш сайт привлекаются все больше новых посетителей. Рано или поздно вы захотите привлечь новых клиентов, и увеличение трафика на вашем веб-сайте только поспособствует в этом. 

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

И все-таки, резкое увеличение трафика не должно становиться вашей головной болью. Благо, есть проверенные временем решения, которые предназначены именно для этого. Они называются балансировщиками нагрузки

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

Что такое балансировщик нагрузки?

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

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

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

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

Типы балансировщиков нагрузки

Существует несколько методов осуществления балансировки нагрузки:

  1. Аппаратная балансировка нагрузки
  2. Использование политики DNS для балансировки нагрузки
  3. Программная балансировка нагрузки

Прежде чем переходить к изучению HAProxy, необходимо получить представление о том, как работает каждый из этих методов. Это нужно для того, чтобы вы могли четко понимать, когда какой метод следует применять. 

Аппаратная балансировка нагрузки

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

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

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

Использование политики DNS для балансировки нагрузки

DNS – это система, с помощью которой мы можем получать доступ к веб-сайтам через Интернет. У этой системы есть возможность балансировать нагрузку по трафику между несколькими серверами. Система, в которой применяется балансировщик нагрузки, использующий политику DNS, использует циклический алгоритм для того, чтобы определять места перенаправления трафика. Таким образом, трафик может быть легко распределен между несколькими серверами, и при этом вы можете не контролировать используемый алгоритм балансировки. 

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

Программная балансировка нагрузки

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

При использовании такого типа балансировки часть программного обеспечения отвечает за выполнение балансировки запросов. Как правило, это происходит на платформе Linux с помощью набора различных алгоритмов, которые применяются для распределения серверов и ресурсов. Эти балансировщики нагрузки обычно устанавливаются прямо на сервере, но они также могут продаваться в качестве программного обеспечения как услуги. 

Вот одни из самых популярных программных балансировщиков нагрузки: Nginx, Neutrino, Avi Vantage Software Load Balancer и HAProxy. Последний мы рассмотрим более подробно!

Балансировщики нагрузки «уровня 4» и «уровня 7»: кто кого?

HAProxy позволяет производить балансировку нагрузки с помощью двух сетевых уровней: уровня 4 (транспортный уровень) и уровня 7 (прикладной уровень).

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

Балансировка нагрузки на «уровне 4»

Балансировка нагрузки на 4-ом уровне, транспортном уровне, - это самый простой способ балансировки сетевого трафика между несколькими серверами. В данном случае балансировщик нагрузки принимает не столь ответственные решения, касающиеся маршрутизации. Делает он это путем проверки нескольких пакетов в потоке протокола управления передачей данных (TCP - transmission control protocol).

Этот метод перенаправляет пользовательский трафик, основываясь на диапазоне IP-адресов и номере порта. Например, если был получен запрос для следующего адреса: http://yourdomain.com/example, тогда трафик перенаправляется на сервер, где все запросы к yourdomain.com обрабатываются через порт 80 (HTTP-порт).

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

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

Балансировка нагрузки на «уровне 7»

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

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

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

Здесь требуется расшифровка, что может немного снизить производительность. Кроме того, данный вид балансировки нагрузки, как правило, стоит дороже, чем более простые варианты, такие как балансировка нагрузки на 4-ом уровне. 

Что такое HAProxy?

HAProxy расшифровывается как «High Availability Proxy», то есть «проски-сервер высокой степени доступности». Он применяется для балансировки нагрузки с помощью приложений на основе HTTP и TCP. За последние несколько лет он стал стандартом среди балансировщиков нагрузки с открытым исходным кодом за счет своего высокого уровня производительности и надежности. HAProxy является абсолютно бесплатным и поставляется в комплекте с большинством дистрибутивов Linux.

Он был официально представлен публике в 2001 году как HAProxy 1.0. За это время он эволюционировал из базового инструмента для разгрузки трафика от аппаратных балансировщиков в полноценный балансировщик нагрузки, который для многих является неотъемлемой частью сетевой инфраструктуры. 

Для чего нужен HAProxy?

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

Настройка HAProxy может привести к серьезному улучшению приложения или веб-сайта, если говорить о производительности, надежности и эффективности. В большинстве случаев время отклика существенно сокращается, пропускная способность увеличивается, а обработка рабочей нагрузки становится более эффективной. 

А теперь давайте посмотрим, как работает HAProxy и какие алгоритма он использует для распределения трафика. 

Алгоритмы HAProxy

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

Вы можете указать для сервера не только алгоритм балансировки нагрузки, но и параметр веса, который отвечает за частоту выбора сервера в сравнении с другими серверами. 

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

Вот самые популярные алгоритмы:

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

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

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

Алгоритм на основе наименьшего количества подключений: как уже можно было понять из названия, этот алгоритм выбирает сервер по принципу «у кого меньше активных подключений». При этом внутренние серверы также меняются по очереди в динамическом циклическом режиме. Такой вариант балансировки больше всего подходит для длительных сессий, например, SQL или LDAP. Для более коротких сессий, например, HTTP, его лучше не использовать. 

Дополнительные возможности

Проверка работоспособности

У HAProxy есть довольно полезная функция под названием «проверка работоспособности». Она нужна для того, чтобы перед тем, как направлять трафик на внутренний сервер, можно было проверить, доступен ли он для обработки запросов. За счет этой функции пропадает необходимость самостоятельно удалять сервер с внутреннего интерфейса в случае, если он становится недоступным. 

По умолчанию проверка работоспособности подразумевает, что вы пытаетесь установить TCP-соединение с сервером. Иными словами, он проверяет, принимает ли сервер запросы с настроенного IP-адреса и порта. 

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

Sticky sessions («липкие» сессии)

Одна из проблем, связанная с использованием балансировщиков нагрузки, заключается в том, что по умолчанию трафик перескакивает с сервера на сервер. Если веб-сервер использует стандартную обработку сессий в PHP, то все данные сессии сохраняются в файл, который временно расположен на этом веб-сервере. Получается, что если пользователь входит на сервер 1, то данные его сессии сохраняются в файл на том же сервере 1. Но если балансировщик нагрузки перенаправляет его следующий запрос на сервер 2, то сервер 2 не сможет прочитать данные этой сессии, и в результате запускается новая сессия. 

Это происходит по той простой причине, что сервер 2 не имеет доступа к данным сессии, хранящимся на сервере 1, а веб-серверы не синхронизированы. Лучше всего, если пользователи будут подключены к одному и тому же внутреннему серверу, так как сессии являются довольно важной составляющей комфортного использования вашего веб-сайта. В частности, это касается интернет-магазинов – вы же не хотите, что корзины ваших пользователей были очищены!

Благо, у HAProxy есть решение этой проблемы – «липкие» сессии. Когда липкие сессии активны, пользователи буквально «прилипают» к определенному внутреннему веб-серверу до окончания срока действия cookie-файла для этой «липкой» сессии. По сути, «липкие» сессии позволяют балансировщику нагрузки гарантировать тот факт, что, когда пользователь будет повторно подключаться к внутреннему веб-серверу, он подключится к этому же самому серверу. 

Заключение

HAProsy есть что предложить – надежность, производительность и гибкость. Что касается балансировщиков нагрузки, то это один из самых лучших; и тот факт, что он есть практически во всех дистрибутивах Linux, говорит лишь о том, что нет никаких причин, чтобы игнорировать его!

 

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Системное администрирование
Скидка 10%
Администратор Linux
Стань Linux администратором и сделай весомый шаг в сторону карьеры в DevOps. Самые важные знания от сертифицированного и практикующего тренера с 20 летним стажем
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Fail2ban — это программное обеспечение, которое защищает ваш сервер от атак. ПО отслеживает журналы сервера и выявляет любую под
img
Виртуализация серверов — популярная тема в мире ИТ, особенно на уровне предприятий. Она позволяет разным операционным системам з
img
  Введение Системные вызовы выступают в роли посредников между приложениями и ядром. Они создают уровень абстракции, который защ
img
  Введение SWAP (SWAP-память или SWAP-пространство) – это раздел жесткого диска или SSD компьютера, где операционная система (ОС
img
  Введение Абсолютные и относительные пути определяют расположение файла или каталога в файловой системе. Это набор инструкций д
img
  Введение Файлы конфигурации Linux определяют поведение и функциональное наполнение операционной системы. Файлы конфигурации –
21 ноября
20:00
Бесплатный вебинар
Введение в Docker