Поиск по сайту:

Как использовать Nginx в качестве балансировщика нагрузки HTTP в Linux


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

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

Рекомендуется к прочтению: полное руководство по обеспечению безопасности, усилению защиты и повышению производительности веб-сервера Nginx.

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

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

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

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

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

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

Настройка среды тестирования

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

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

A Record   		@   		192.168.58.7

Эта запись сообщает клиентским запросам, куда домен должен направлять запросы, в данном случае на балансировщик нагрузки (192.168.58.7). Записи DNS A принимают только значения IPv4. Альтернативно, файл /etc/hosts на клиентских компьютерах также можно использовать в целях тестирования со следующей записью.

192.168.58.7  	tecmintapp.lan

Настройка балансировки нагрузки Nginx в Linux

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

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

Затем создайте файл блока сервера с именем /etc/nginx/conf.d/loadbalancer.conf (дайте имя по вашему выбору).

sudo vi /etc/nginx/conf.d/loadbalancer.conf

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

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        proxy_set_header    X-Real-IP $remote_addr;
	        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
	        proxy_set_header    Host $http_host;
		proxy_pass http://backend;
	}
}

В приведенной выше конфигурации директива proxy_pass (которая должна быть указана внутри местоположения, в данном случае /) используется для передачи запроса на прокси-серверы HTTP, на которые ссылается использование слово backend в директиве upstream (используется для определения группы серверов). Кроме того, запросы будут распределяться между серверами с использованием механизма взвешенной циклической балансировки.

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

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

А чтобы включить механизм сохранения сеанса ip_hash, используйте:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

Вы также можете повлиять на решение о балансировке нагрузки, используя веса сервера. При использовании следующей конфигурации при наличии шести запросов от клиентов серверу приложений 192.168.58.5 будет назначено 4 запроса, а 2 – 192.168.58.8.

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

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

sudo nginx -t

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

sudo systemctl restart nginx
sudo systemctl enable nginx

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

Чтобы протестировать балансировку нагрузки Nginx, откройте веб-браузер и используйте следующий адрес для навигации.

http://tecmintapp.lan

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

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