Балансировщик нагрузки nginx

балансировка_nginx

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

Начнем с конфига для балансировщика nginx(конфиг сайта).

upstream backend {
ip_hash;
server backend1.example.com:80 weight=4 max_fails=2 fail_timeout=2s;
server backend2.example.com:80 weight=2 max_fails=2 fail_timeout=2s;
}
server {
listen 80;
server_name test.local;
location ~* \.()$ {
root /var/www/test.local; }
location / {
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 16 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_connect_timeout 30s;
proxy_pass https://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

Рассмотрим параметры:

Директивы

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

Удельный вес

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

Настройка балансировки нагрузки, которая включает удельный вес сервера, может выглядеть следующим образом:

upstream backend {
server backend1.example.com weight=1;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}

Значение удельного веса по умолчанию – 1. Сервер со значением 2 (backend2.example) будет получать вдвое больше трафика, чем сервер со значением 1 (backend1 в данном коде); соответственно, сервер backend3 со значением веса 4 будет получать вдвое больше трафика, чем сервер backend2 и вчетверо больше сервера backend1.

Хэш

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

Пример таких конфигураций:

upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}

Директива max_fails

Согласно настройкам round robin по умолчанию, Nginx будет продолжать передавать данные на виртуальные выделенные серверы, даже если серверы не отвечают. Директива max_fails (максимальное количество неудачных попыток) может автоматически предотвратить такое поведение, признавая не отвечающие серверы неработоспособными в течение определенного времени.

Директива max_fails связана с двумя факторами: max_fails и fall_timeout. Max_fails указывает максимальное количество неудачных попыток подключения к серверу, которые должны произойти для того, чтобы сервер считался неактивным. Fall_timeout задает определенный интервал времени, в течение которого сервер считается неработоспособным. Как только это время истечет, попытки установить связь с сервером возобновятся. Значение fall_timeout по умолчанию составляет 10 секунд.

Конфигурации могут выглядеть так:

upstream backend {
server backend1.example.com max_fails=3 fail_timeout=15s;
server backend2.example.com weight=2;
server backend3.example.com weight=4;

На этом всё.

Опубликовано в Nginx

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

 

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.