Nginx балансировка нагрузки

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

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

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

Существует несколько подходов и реализаций, но сначала проверьте наличие модуля ngx_http_upstream_module:

Если он отсутствует, то вам придется перестроить Nginx, добавив этот модуль. После этого можно приступать к настройке веб-сервера. Чтобы включить балансировку, добавьте директиву upstream (секция http) в конфигурационный файл Nginx:

Теперь необходимо указать перенаправление нужной группы:

Кроме того, Nginx поддерживает дополнительные параметры и методы балансировки нагрузки.

Выбор метода балансировки

Nginx предлагает несколько методов балансировки нагрузки.

Round-robin

По умолчанию веб-сервер равномерно распределяет запросы между бэкендами (но с учетом веса). Это стандартный метод в Nginx, поэтому директива включения отсутствует.

least_conn

Запросы сначала отправляются на бэкенд с наименьшим количеством активных соединений (но с учетом веса):

Хэш и IP-хэш

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

 

IP-хэш работает только с HTTP, это предопределенная опция, в которой хэш вычисляется по IP-адресу клиента:

Вес бэкенда

Если некоторые бэкенды в стеке мощнее других, то пригодятся веса:

В этом примере из каждых 16 запросов первый бэкенд обработает 10, второй - 5, а третий - 1. В этом случае резервный сервер будет получать запросы только в том случае, если три основных бэкенда будут недоступны.

Мониторинг

Если Nginx считает, что внутренний сервер недоступен, он временно прекращает отправку запросов к нему. За это отвечают две директивы:

max_fails - устанавливает количество неудачных попыток соединения, после которых бэкенд считается недоступным в течение определенного времени;
fail_timeout - время, в течение которого сервер считается недоступным.

Параметры выглядят следующим образом:

Заключение

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий