Настройка конфигурации#
По умолчанию в конфигурационном файле балансировщика нагрузки заданы следующие настройки:
общие настройки;
настройки журналов и формат записей;
количество соединений, которые может одновременно обрабатывать один рабочий процесс;
настройки HTTP;
типы файлов;
настройки основного сервера и дополнительные маршруты.
Вы можете настроить балансировщик нагрузки под свои цели, отредактировав его конфигурацию. Тип балансировки нагрузки зависит от конкретных задач. Для работы на низком уровне (TCP, UDP) доступна stream-балансировка, для приложений и веб-сервисов — балансировка на уровне приложений (HTTP). В Angie ADC поддерживаются статические и динамические механизмы распределения запросов между серверами. Механизм Описание HTTP TCP/UDP Запросы распределяются по серверам последовательно (используется по умолчанию). Запросы распределяются по серверам учетом веса каждого сервера. Сервер выбирается с помощью хэш-функции на основе IP-адреса клиента, что обеспечивает “липкость сессии”. Новый запрос направляется на сервер с минимальным количеством активных соединений (наименее загруженный). Вероятность передачи соединения активному серверу обратно пропорциональна среднему времени его ответа. Балансировка нагрузки по обратной связи (по произвольному параметру из ответа на основной или проверочный запрос). Балансировка на основе наименьшего потребления полосы пропускания. Балансировка на основе наименьшего числа пакетов в единицу времени. Чтобы отредактировать конфигурацию балансировщика нагрузки, выполните следующие действия: Откройте консоль Angie ADC. На вкладке Откроется экран мониторинга с детальной информацией. Нажмите кнопку Откроется конфигурационный файл балансировщика нагрузки. Внесите необходимые изменения. Примеры настройки см. ниже. Сохраните файл, нажав кнопку Изменения будут применены сразу. Angie ADC можно использовать в качестве высокоэффективного HTTP-балансировщика нагрузки для распределения трафика между несколькими серверами приложений, тем самым улучшая производительность, масштабируемость и надежность веб-приложений. Самая простая конфигурация для балансировки нагрузки с помощью Angie ADC может выглядеть следующим образом: В приведенном примере: Группа серверов На этих серверах работают три экземпляра одного и того же приложения. Используется метод балансировки Все запросы на порт Балансировка нагрузки по наименее загруженному серверу. Модуль балансировки нагрузки Пример конфигурации: В этом примере: Директива Для балансировки нагрузки определены три проксируемых сервера. Входящие запросы к серверу проксируются в группу Преимущества метода: Динамическая балансировка: непрерывно отслеживает количество
активных соединений для адаптации к текущей нагрузке на каждом сервере. Простота: работает без необходимости дополнительных параметров или сложных
настроек. Совместимость: совместим с другими конфигурациями проксируемых серверов,
включая веса, максимальное количество сбоев и время ожидания после сбоя. Балансировка нагрузки с сохранением сессий. Методы Пример конфигурации: Метод Взвешенная балансировка нагрузки. С помощью директивы Пример: В этой конфигурации каждые пять запросов будут распределены следующим образом:
три запроса попадут на Метод Балансировка нагрузки на основе наименьшего времени ответа. Модуль балансировки нагрузки Когда использовать Переменная нагрузка: запросы распределяются на серверы, которые обрабатывают их быстрее. Высокая доступность: уменьшается время ожидания для пользователей. Гетерогенные серверы: если серверы имеют разное оборудование или настройки, Пример конфигурации: В этом примере Балансировка по произвольному параметру из ответа на основной или проверочный запрос. Модуль балансировки нагрузки Пример конфигурации: Эта конфигурация категоризирует ответы серверов по уровням обратной связи
на основе определенных оценок из полей заголовков ответа,
а также добавляет условие на TCP/UDP-балансировка нагрузки позволяет распределять TCP- или UDP-трафик между несколькими серверами. Это полезно для таких задач, как балансировка баз данных, почтовых серверов или других TCP/UDP-сервисов. В этой конфигурации задана группа серверов, участвующих в балансировке ( максимальное время ожидания ответа от сервера максимальное время для установления соединения с сервером Для приложений, работающих через протокол UDP, конфигурация аналогична TCP, но с настройками для UDP-трафика. Балансировка на основе наименьшего потребления полосы пропускания. Алгоритм периодически вычисляет среднее использование полосы пропускания для каждого апстрим-сервера, используя формулу скользящего среднего для сглаживания колебаний со временем.
Когда начинается новая сессия,
модуль балансировки нагрузки Пример конфигурации: В этом примере: В директиве Коэффициент сглаживания установлен равным 80, что влияет на скорость адаптации
среднего значения к изменениям в использовании пропускной способности. Для балансировки нагрузки определены два проксируемых сервера. Преимущества метода: Динамическая балансировка: непрерывно отслеживает использование
пропускной способности для адаптации к текущей нагрузке на каждом сервере. Коэффициент сглаживания Режимы: позволяет выбирать балансировку на основе входящей пропускной
способности, исходящей пропускной способности или обоих вариантов, в зависимости от
потребностей приложения. Совместим с другими конфигурациями проксируемых серверов,
включая веса, максимальное количество сбоев и время ожидания после сбоя. Балансировка на основе наименьшего числа пакетов в единицу времени. Средняя скорость пакетов для каждого проксируемого сервера периодически проверяется
с использованием формулы скользящего среднего для сглаживания колебаний со временем.
Когда инициируется новый сеанс, модуль балансировки нагрузки Пример конфигурации: В этом примере: В директиве Коэффициент сглаживания установлен равным 80, что влияет на то, как быстро
среднее значение адаптируется к изменениям скорости пакетов. Определены два проксируемых сервера для балансировки нагрузки. Преимущества метода: Динамическая балансировка: непрерывно отслеживает скорость
пакетов для адаптации к текущей нагрузке на каждом сервере. Параметр Режимы: позволяет выбирать балансировку на основе числа входящих пакетов,
исходящих пакетов или обоих значений. Совместим с другими конфигурациями проксируемых серверов,
включая веса, максимальное количество сбоев и время ожидания после сбоя. Контекстное хэширование. Поддерживается метод Пример: Для защиты можно использовать ограничения IP через Пример: В этом примере разрешена только локальная сеть, остальным доступ запрещен. Angie ADC включает встроенные проверки состояния серверов. Если сервер начинает отвечать с ошибками (например, код В этой конфигурации сервер помечается как недоступный после двух неудачных запросов подряд (О механизмах балансировки#
round-robin
Редактирование конфигурации балансировщика нагрузки#
Панель мониторинга
выберите виджет балансировщика нагрузки и нажмите на него.Конфигурация
в верхней правой части экрана.Сохранить
.Примеры HTTP-балансировки нагрузки#
Базовая настройка
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
myapp1
содержит три сервера srv1
, srv2
и srv3
.round-robin
(по умолчанию).80
перенаправляются через группу серверов myapp1
.least_conn
least_conn
в модуле HTTP позволяет распределять нагрузку более равномерно, направляя новые запросы на серверы с наименьшим количеством активных соединений. Этот метод рекомендуется, если время обработки запросов может сильно варьироваться.http {
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
least_conn
включает метод балансировки нагрузки по наименьшему
числу соединений.backend
.ip-hash
round-robin
и least-conn
не гарантируют, что запросы от одного клиента будут обрабатываться одним и тем же сервером. Если важно, чтобы клиент всегда направлялся на один сервер (например, при использовании сессионных данных), можно использовать метод ip-hash
.upstream myapp1 {
ip_hash;
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
ip-hash
гарантирует, что запросы от одного клиента будут попадать на один сервер, если этот сервер доступен.weight
weight
можно указать, какой сервер должен обрабатывать больше запросов. Этот способ рекомендуется, если серверы имеют разную производительность. По умолчанию вес сервера равен 1
.upstream myapp1 {
server srv1.example.com weight=3;
server srv2.example.com;
server srv3.example.com;
}
srv1
, один запрос — на srv2
и еще один — на srv3
.weight
может использоваться в комбинации с методами round-robin
и least-conn
.least_time
least_time
задает для группы метод балансировки нагрузки, при котором вероятность передачи соединения активному серверу обратно пропорциональна среднему времени его ответа; чем оно меньше, тем больше соединений будет получать сервер.least_time
?least_time
помогает уравновесить нагрузку.http {
upstream backend {
least_time header;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
}
least_time header
: балансировка основана на времени отклика до получения заголовка ответа от сервера.feedback
feedback
Задает в upstream
механизм балансировки нагрузки по обратной связи. Он динамически корректирует решения при балансировке, умножая вес каждого проксируемого сервера на среднее значение обратной связи, которое меняется с течением времени в зависимости от значения переменной и подчиняется необязательному условию. По умолчанию параметр factor
равен 90
.upstream backend {
zone backend 1m;
feedback $feedback_value factor=80 account=$condition_value;
server backend1.example.com;
server backend2.example.com;
}
map $upstream_http_custom_score $feedback_value {
"high" 100;
"medium" 75;
"low" 50;
default 10;
}
map $upstream_probe $condition_value {
"high_priority" "1";
"low_priority" "0";
default "1";
}
$upstream_probe
,
чтобы учитывать только ответы от активной проверки high_priority
или ответы на обычные клиентские запросы.Примеры TCP/UDP-балансировки нагрузки#
Конфигурация для TCP
stream {
upstream tcp_backend {
server 192.168.1.10:3306 weight=2;
server 192.168.1.11:3306;
server 192.168.1.12:3306;
}
server {
listen 3306;
proxy_pass tcp_backend;
proxy_timeout 10s;
proxy_connect_timeout 5s;
}
}
tcp_backend
).
Настроен вес для серверов, чтобы более мощный сервер получал больше запросов (weight=2
),
Сервер слушает входящие соединения на порту 3306
(используется для MySQL).
Трафик перенаправляется к группе серверов tcp_backend
.
Настроены тайм-ауты:10s
;5s
.Конфигурация для UDP
stream {
upstream udp_backend {
server 192.168.1.20:53;
server 192.168.1.21:53;
}
server {
listen 53 udp;
proxy_pass udp_backend;
proxy_responses 1;
proxy_timeout 10s;
}
}
least_bandwidth
least_bandwidth
выбирает проксируемый сервер
с наименьшим средним использованием пропускной способности, скорректированным с учетом веса сервера, если он указан.
Этот механизм гарантирует, что сессии направляются на серверы,
которые в настоящее время используют меньше пропускной способности,
что способствует равномерному распределению сетевой нагрузки.stream {
upstream backend {
least_bandwidth both factor=80;
server backend1.example.com:12345;
server backend2.example.com:12345;
}
server {
listen 12345;
proxy_pass backend;
}
}
least_bandwidth
настроен учет как входящей, так и исходящей
пропускной способности.factor
контролирует отзывчивость
расчета скользящего среднего; более высокий коэффициент означает более
медленную адаптацию к изменениям.least_packets
least_packets
в потоковом модуле выбирает проксируемый сервер с наименьшей средней скоростью передачи пакетов,
скорректированной с учетом веса сервера.
Этот процесс гарантирует, что сеансы направляются на серверы, которые в настоящее время наименее загружены
с точки зрения обработки пакетов, что способствует равномерному распределению сетевой нагрузки.stream {
upstream backend {
least_packets both factor=80;
server backend1.example.com:12345;
server backend2.example.com:12345;
}
server {
listen 12345;
proxy_pass backend;
}
}
least_packets
настроен учет как входящих, так и исходящих
пакетов.factor
контролирует отзывчивость
расчета скользящего среднего; более высокий коэффициент означает более
медленную адаптацию к изменениям.hash
hash
(например, по IP или произвольному значению). Если сервер из пула станет недоступным или будет добавлен новый сервер, минимальное количество клиентов перенаправится на другие серверы. Используется для “липких сессий”, когда важно, чтобы запросы от одного клиента всегда обрабатывались одним и тем же сервером.upstream tcp_backend {
hash $remote_addr consistent;
server 192.168.1.10:3306;
server 192.168.1.11:3306;
}
Ограничение IP
allow
и deny
.server {
listen 3306;
allow 192.168.1.0/24;
deny all;
proxy_pass tcp_backend;
}
Проверка работоспособности серверов#
500
), Angie ADC временно исключает его из пула доступных серверов.Пример настройки
upstream myapp1 {
server srv1.example.com max_fails=2 fail_timeout=10s;
server srv2.example.com;
server srv3.example.com;
}
max_fails=2
).
Через десять секунд сервер снова проверяется на доступность (fail_timeout=10s
). Если он восстановился, запросы снова начинают отправляться на этот сервер.