Учебник для начинающих по HAProxy

Ucebnik Dla Nacinausih Po Haproxy



По мере масштабирования вашего приложения возникает необходимость добавлять больше серверов для обработки большего трафика. Чем больше трафика получает ваше приложение, тем выше вероятность простоя из-за перегрузки сервера. Однако существуют такие инструменты, как HAProxy, которые позволяют вам определить, как обрабатывается трафик, чтобы сбалансировать нагрузку на ваш сервер. Идея состоит в том, чтобы гарантировать, что ни один сервер не будет перегружен. High Availability Proxy — это программное обеспечение с открытым исходным кодом, разработанное для обеспечения надежной балансировки нагрузки и одновременно выступающее в качестве обратного прокси-сервера для приложений TCP/HTTP.

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

Зачем использовать HAProxy

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







  1. Балансировка нагрузки - С HAProxy вы можете удобно распределять трафик между разными серверами, чтобы не перегружать один сервер. Таким образом, ваше приложение не столкнется с проблемами простоя, и вы добьетесь более быстрого реагирования, надежности и доступности.
  2. Ведение журнала и мониторинг – Вы получите подробные журналы мониторинга ваших серверов, которые помогут устранить неполадки. Кроме того, у HAProxy есть страница статистики, на которой вы можете получить аналитику производительности вашего балансировщика нагрузки в режиме реального времени.
  3. Проверка здоровья – Даже ваши серверы требуют проверки работоспособности, чтобы определить их статус. HAProxy часто выполняет проверки работоспособности, чтобы узнать состояние вашего сервера и повысить его надежность. Если обнаруживается неработоспособный сервер, он перенаправляет трафик на другой сервер.
  4. Обратный прокси – Одним из способов повышения безопасности является сокрытие внутренней структуры. К счастью, HAProxy позволяет вам получать трафик от клиентов и направлять его на соответствующие серверы. Таким образом, ваша внутренняя структура скрыта от глаз хакера.
  5. ACL (списки контроля доступа) – С помощью HAProxy вы можете определить, как должна происходить маршрутизация трафика, используя различные критерии, такие как пути, заголовки и IP-адреса. Таким образом, определение пользовательской логики маршрутизации для вашего трафика становится проще.
  6. Прекращение SSL – По умолчанию SSL/TLS разгружается внутренними серверами, что приводит к снижению производительности. Однако при использовании HAProxy завершение SSL/TLS происходит на балансировщике нагрузки, разгружая задачу на внутренних серверах.

Установка HAProxy

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



Если вы используете системы Ubuntu или Debian, HAProxy можно установить из менеджера пакетов APT. Выполните следующую команду:



$ sudo apt обновление
$ sudo apt установить haproxy

Аналогично, если вы используете системы на базе RHEL или CentOS, HAProxy доступен из менеджера пакетов «yum». Выполните следующие команды:





$ sudo yum обновление
$ sudo yum установить haproxy

В нашем случае мы используем Ubuntu. Таким образом, наша команда имеет следующий вид:



Затем мы можем проверить его версию, чтобы убедиться, что нам удалось успешно установить HAProxy.

$ хапрокси --версия

Как настроить HAProxy

Установив HAProxy, вы можете открыть его файл конфигурации ( / etc/haproxy/haproxy.cfg) и определите настройки, которые вы хотите использовать для своего балансировщика нагрузки.

Откройте файл конфигурации с помощью редактора, например nano или vim.

$ sudo nano /etc/haproxy/haproxy.cfg

Вы получите файл конфигурации, подобный приведенному ниже:

Из файла конфигурации вы заметите, что он состоит из двух основных разделов:

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

Вот пример раздела «По умолчанию»:

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

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

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

Давайте приведем пример

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

Шаг 1. Настройка раздела по умолчанию

В разделе «По умолчанию» мы устанавливаем значения, которые будут использоваться всеми узлами. В нашем случае мы устанавливаем режим HTTP и устанавливаем таймауты для клиента и сервера. Вы можете настроить время в соответствии с вашими потребностями.

Помните, что все эти изменения находятся в конфигурации HAProxy, расположенной в файле «/etc/haproxy/haproxy.cfg». После настройки раздела по умолчанию давайте определим интерфейс.

Шаг 2. Настройка раздела внешнего интерфейса

В разделе внешнего интерфейса мы определяем, как мы хотим, чтобы клиенты получали доступ к приложению или веб-сайту в Интернете. Мы даем IP-адреса для приложения. Но в данном случае мы работаем с локальным хостом. Следовательно, наш IP-адрес является резервным адресом 127.0.0.1, и мы хотим принимать соединения через порт 80.

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

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

$ sudo systemctl перезапустить haproxy

На этом этапе мы можем попробовать отправить запросы на наш сайт с помощью команды «curl». Запустите команду и добавьте целевой IP-адрес.

$ curl

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

Шаг 3. Настройка серверной части

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

Ошибка 503, которую мы получили ранее, возникла из-за того, что у нас не было серверной части для обработки запросов. Давайте начнем с определения «default_backend» для обработки запросов. Вы определяете это в разделе внешнего интерфейса. Для этого случая мы назвали его «linux_backend».

Затем создайте внутренний раздел с тем же именем, что и тот, который определен в разделе внешнего интерфейса. Затем вы должны использовать ключевое слово «сервер», за которым следует имя вашего сервера и его IP-адрес. На следующем изображении показано, что мы определили сервер «linuxhint1», используя IP 127.0.0.1 и порт 8001:

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

Чтобы протестировать созданный балансировщик нагрузки HAProxy, мы создаем веб-сервер, используя Python3, для привязки внутренних портов с использованием указанного нами IP-адреса. Мы запускаем команду следующим образом:

$ python3 -m http.server 8001 --bind 127.0.0.1

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

На другом терминале давайте воспользуемся командой «curl» для отправки запроса на сервер.

$ curl

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

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

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

Работа с правилами

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

Следуя тем же шагам, что и раньше, давайте оставим наш раздел по умолчанию нетронутым и определим другие IP-адреса в разделе внешнего интерфейса. Мы привязываем один и тот же IP-адрес, но принимаем соединения с разных портов.

Более того, у нас есть «default_backend» и еще один «use_backend», который представляет собой разные пулы серверов, которые мы будем использовать в зависимости от порта, с которого поступают запросы. В следующей конфигурации все запросы через порт 81 обрабатываются серверами в «Linux2_backend». Любые другие запросы обрабатываются «default_backend».

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

Быстро перезапустите службу HAProxy.

Давайте создадим веб-сервер, используя Python3, и привяжем запросы к порту 8002, который является альтернативным внутренним сервером.

При отправке запросов на него мы указываем порт 81, чтобы балансировщик нагрузки отправлял запросы на альтернативный сервер, который не является сервером по умолчанию.

Перепроверив наш веб-сервер, мы видим, что ему удается получать и обрабатывать запросы и выдает ответ 200 (успех).

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

Заключение

HAProxy — идеальное решение для балансировки нагрузки для приложений TCP/HTTP. После установки вы можете удобно редактировать файл конфигурации, чтобы определить разделы по умолчанию, внешний и внутренний интерфейсы, чтобы определить, как будет работать ваш балансировщик нагрузки. Этот пост представляет собой руководство для начинающих по HAProxy. Все началось с определения HAProxy и его функций. Далее он углубился в понимание того, как настроить HAProxy, и в заключение привел пример использования HAProxy в качестве балансировщика нагрузки.