Галантерея | Принцип балансировки нагрузки Nginx и пример конфигурации

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

Руководство по серии Nginx

10-минутное руководство для начинающих по Nginx для Xiaobai

Компиляция и установка Nginx и общие команды

Подробные шаги для полного удаления nginx

Подробный файл конфигурации Nginx

Поймите разницу между прямым прокси и обратным прокси

В этой статье вы познакомитесь с обратным прокси-сервером Nginx.

В этой статье вы познакомитесь с директивой location в nginx.

предисловие

nginx

Nginx — высокопроизводительныйhttp 服务器/反向代理服务器а также电子邮件(IMAP/POP3) прокси-сервер. Официальный тестовый nginx может поддерживать5万Одновременные соединения и потребление ресурсов, таких как процессор и память, очень низкие, а работа очень стабильная.

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

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

1. Введение в балансировку нагрузки Nginx

Введение в концепции обратного прокси и балансировки нагрузки

Строго говоря,Nginxкак толькоNginx Proxy反向代理Он используется, потому что эффект этой функции обратного прокси-сервера — это эффект кластера балансировки нагрузки, поэтому в этой статье он называется балансировкой нагрузки Nginx. Так,В чем разница между обратным прокси и балансировкой нагрузки?

  • Обычное программное обеспечение балансировки нагрузки, такое как знаменитый LVS, на самом деле работает только для пересылки (и, возможно, перезаписи) и доставки пакетов запросов. Очевидная особенность режима DR заключается в том, что с точки зрения нод-сервера под балансировщиком нагрузки полученный запрос все еще является реальным пользователем от клиента, обращающегося к балансировщику нагрузки.

  • Обратный прокси-сервер отличается.После того, как обратный прокси-сервер получит запрос пользователя доступа, он будет проксировать пользователя для повторной инициации сервера узла под прокси-сервером запроса и, наконец, вернет данные пользователю-клиенту. сервер узла, сервер узла, к которому осуществляется доступ Клиентский пользователь является обратным прокси-сервером, а не реальным посетителем веб-сайта.

  • Одним словом, балансировка нагрузки, такая как LVS, предназначена для пересылки пакетов данных, запрошенных пользователями, в то время как обратный прокси-сервер Nginx предназначен для прокси-сервера пользователя для повторной инициации сервера узла под прокси-сервером запроса после получения запроса пользователя.

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

Есть два основных компонента для реализации балансировки нагрузки Nginx:

  • ngx_http_upstream_module

    Модуль балансировки нагрузки может реализовать функцию балансировки нагрузки веб-сайта и проверку работоспособности узлов.

  • ngx_http_proxy_module

    Модуль прокси используется для пересылки запросов на серверные узлы или пулы вышестоящих серверов.

2.1, восходящий модуль

(1) Введение в восходящий модуль

Модуль upstream позволяет Nginx определять одну или несколько групп групп серверов узла.При использовании запрос веб-сайта может быть отправлен на имя соответствующей группы upstream, определенное заранее, с помощью прокси-метода proxy_pass.Конкретный метод записи:

proxy_pass http://server_pools

где server_pools — это имя группы серверов вышестоящего узла.

(2) случай восходящей конфигурации

 范例1:基本的upstream配置案例:
upstream server_pools {
upstream是关键字必须有,后面的server_pools是upstream集群组的名字,可自定义名称,调用时就用这个名字。
server 192.168.1.251:80 weight=5;
server 192.168.1.252:80 weight=10;
server 192.168.1.253:80 weight=15;
server关键字是固定的,后面可以接域名或IP。如果不指定端口,默认是80端口。weight代表权重,数值越大被分配的请求越多。
}
范例2:较完整的upstream配置案例:
upstream blog__pools {
server 192.168.0.223;   #这行标签和下行是等价的
server 192.168.0.224:80 weight=1 max_fails=1 fail_timeout=10s;       #这行标签和上一行是等价的,此行多余的部分就是默认配置,不写也可以。
server 192.168.0.225:80 weight=1 max_fails=2 fail_timeout=20s backup;
   server最后面可以加很多参数,具体参数作用看下文的表格
}

(3) параметры восходящего модуля

  • server

Конфигурация RS за нагрузкой может быть IP или доменным именем.

  • weight

Вес сервера запросов. Значение по умолчанию равно 1, и чем больше значение, тем больше доля принятых запросов.

  • max_fails

Количество неудачных попыток nginx подключиться к серверному хосту.

Это значение должно совпадатьproxy_net_upstream,fastcgi_next_upstreamа такжеmemcached_next_upstreamЭти три параметра используются.

Когда nginx получает код состояния, определяемый этими тремя параметрами, возвращаемыми внутренним сервером, он перенаправляет запрос на обычный работающий внутренний сервер, например 404, 502, 503.

  • fail_timeout

существуетmax_failsПосле определенного количества сбоев интервал времени от следующей проверки, по умолчанию 10 с

  • backup

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

  • down

Указывает, что этот сервер никогда не доступен и может использоваться с ip_hash.

пример:

upstream web_pools {
server linux.example.com weight=5; 
server 127.0.0.1:8080 max_fail=5 fail_timeout=10s;
// 当5次连续检查失败后,间隔10s后重新检测。
server linux.example.com:8080 backup; 
// 指定备份服务器。作用:等上面服务器全部不可访问时就向它转发请求。
}

2.2, модуль http_proxy_module

(1) Введение в инструкцию proxy_pass

proxy_passинструкция принадлежитngx_http_proxy_moduleмодуль, этот модуль может пересылать запросы на другой сервер. В реальной работе обратного прокси он будет проходить черезlocationФункция сопоставляет указанный URI, а затем сопоставляет полученное совпадение.URIзапрос черезproxy_passк определенномуupstreamпул узлов.

содержание местоположения, ссылка:В этой статье подробно рассматривается директива location в nginx.

(2) Варианты использования proxy_pass

location /web/ {
proxy_pass http://127.0.0.1/abc/;
}

Отправлять запросы, соответствующие URI как веб-сайту, на http://127.0.0.1/abc/

(3) параметры модуля http-прокси

  • proxy_set_header

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

  • client_body_buffer_size

Используется для указания размера буфера темы запроса клиента.

  • proxy_connect_timeout

Указывает период ожидания для соединения между обратным прокси-сервером и сервером внутреннего узла, то есть период ожидания для инициирования рукопожатия и ожидания ответа.

  • proxy_send_timeout

Указывает время возврата данных бэкенд-сервера прокси, то есть в течение указанного времени бэкенд-сервер должен передать все данные, иначе nginx разорвет соединение

  • proxy_read_timeout

Установите время, в течение которого nginx будет получать информацию от внутреннего сервера прокси-сервера, указав, что после успешного установления соединения nginx ожидает время ответа внутреннего сервера, которое на самом деле является временем, которое nginx ожидает в фоновом режиме. конец для обработки

  • proxy_buffer_size

Установите размер буфера.По умолчанию размер буфера равен размеру, заданному командой proxy_buffers.

  • proxy_buffers

Установите номер и размер буфера, в буфер будет помещаться ответная информация, полученная nginx от внутреннего сервера прокси.

  • proxy_busy_buffers_size

Используется для установки размера proxy_buffers, который можно использовать, когда система очень загружена.Официальный рекомендуемый размер: proxy_bufer*2.

  • proxy_temp_file_write_size

Указывает размер временных файлов кэша прокси.

3. Алгоритм планирования балансировки нагрузки Nginx

(1) rr опрос (по умолчанию)

Алгоритм планирования по умолчанию назначается разным внутренним серверам один за другим по запросу клиента, а время простоя автоматически удаляется из пула узловых серверов.

upstream server_pools {
    server 192.168.1.251;
    server 192.168.1.252;
    }

Примечание: для серверов性能不同кластеры, алгоритм склонен к资源分配不合理И другие вопросы.

(2) wrr взвешенный опрос (вес)

На основе алгоритма опроса rr добавляется вес, и вес пропорционален доступу пользователя, чем больше значение веса, тем больше запросов пересылается.

upstream server_pools {
    server 192.168.1.251 weight=5;
    server 192.168.1.252 weight=10;
}

Взвешенный циклический перебор используется в кластерах с неравной производительностью серверов для рационализации распределения ресурсов.

(3) ip_hash (сохранение сеанса)

за запрос по IP доступаhashРаспределение результата, каждый посетитель фиксированно обращается к бэкэнд серверу, что можно решитьsessionНе делитесь проблемой.

upstream server_pools {
    ip_hash;
    server 192.168.1.251;
    server 192.168.1.252;
    }

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

(4) справедливый (алгоритм динамического планирования)

Запросы распределяются в соответствии со временем отклика сервера внутреннего узла, и приоритет отдается тем, у которых короткое время отклика.

upstream server_pools {
    server 192.168.1.251;
    server 192.168.1.252;
    fair;
    }

Это более умный алгоритм планирования, но Nginx本身不支持Алгоритм справедливого планирования. Если вам нужно использовать справедливое планирование, вы должны загрузить модули, связанные с Nginx.upstream_fair.

(5) алгоритм url_hash (узел веб-кеша)

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

upstream server_pools {
server qll:9001;
server qll:9002;
hash $request_uri;
hash_method crc32;
}

Точно так же сам Nginx не поддерживает url_hash.Если вам нужно использовать этот алгоритм планирования, вы должны установить пакет хэш-модуля Nginx.

4. Пример настройки балансировки нагрузки Nginx

(1) Осознайте эффект

Введите адрес в браузереhttp://www.qll.com, для достижения эффекта балансировки нагрузки (средний доступ к двум серверам)

(2) Подготовка

а) Подготовьте 3 сервера nginx следующим образом:

Имя процессора айпи адрес Описание роли
web01 10.43.187.251 сервер nginx web01
web02 10.43.187.252 сервер nginx web01
lb 10.43.187.253 сервер балансировки нагрузки nginx

Не делайте)三台服务器均安装nginx

Установите nginx, см.:Компиляция и установка Nginx и общие команды

c) Настройте веб-сервис для тестирования

Уведомление: Этот подраздел находится в两台Nginx WebОперация на сервере

[root@web01 nginx]# cat conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html/www;
            index  index.html index.htm;
        }
	access_log logs/access_www.log main;
    }
}

Создать данные тестового файла

[root@web01 ~]# cd /usr/local/nginx/html/
[root@web01 html]# mkdir www
[root@web01 www]# echo "`hostname` www" > index.html

查看创建的文件内容: [root@qll251 www]# cat index.html web01 www

Не забудьте запустить службу nginx

г) Настройте сервер балансировки нагрузки nginx.

[root@lb01 nginx]# cat conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream www_server_pools {         #这里定义Web服务器池,包含了251,252两个Web节点
	server 10.43.187.251:80 weight=1;
	server 10.43.187.252:80 weight=1;
	}
    server {            #这里定义代理的负载均衡域名虚拟主机
        listen       80;
        server_name  www.qll.com;
        location / {
		proxy_pass http://www_server_pools;     #访问www.qll.com,请求发送给www_server_pools里面的节点
        }
    }
}

e) Разрешение доменного имени

Поскольку это не настоящая среда, используется доменное имяwww.qll.comОн используется для тестирования, поэтому разрешение www.qll.com можно задать только в файле hosts.

Открыть:

C:\Windows\System32\drivers\etc\hosts

Добавьте в конце:

10.43.187.253 www.qll.com

(3) Тестовая проверка

Открытый доступ в браузереwww.qll.com, вы обнаружите, что все запросы распределяются между web01 (10.43.187.251) и web02 (10.43.187.252) сервером балансировки нагрузки (10.43.187.253), достигая эффекта балансировки нагрузки.

Эпилог

Добро пожаловать в публичный аккаунт WeChat »开源Linux』, фокусируется на совместном использовании контента, связанного с Linux/Unix, включая эксплуатацию и обслуживание Linux, разработку системы Linux, сетевое программирование и техническую галантерею, такую ​​как виртуализация и облачные вычисления. Отвечу на «Обучение» в фоновом режиме и отправлю вам серию книг для изучения Linux, с нетерпением жду встречи с вами.