Модуль Upstream Ngingx

Модуль Upstream Ngingx

Модуль Upstream Ngingx

Модуль ngx_stream_upstream_module (1.9.0) используется для определения групп серверов, на которые может ссылаться директива proxy_pass .



Пример конфигурации

upstream backend {

hash $remote_addr consistent;

server backend1.example.com:12345 weight=5;

server backend2.example.com:12345;

server unix:/tmp/backend3;

server backup1.example.com:12345 backup;

server backup2.example.com:12345 backup;

}

server {

listen 12346;

proxy_pass backend;

}



Динамически настраиваемая группа с периодическими проверками health checks доступна как часть нашей commercial subscription.



e



Директивы

 

Syntax:

upstream name { ... }

Default:

Context:

stream



Определяет группу серверов. Серверы могут слушать через разные порты. Кроме того серверы, прослушивающие TCP и сокеты домена UNIX, могут быть смешаны.

Например:



pstream backend {

server backend1.example.com:12345 weight=5;

server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;

server unix:/tmp/backend2;

server backend3.example.com:12345 resolve;



server backup1.example.com:12345 backup;

}



По умолчанию соединения распределяются между серверами с использованием преимущественно циклического метода балансировки. В приведенном выше примере каждые 7 подключений будут распределены следующим образом: 5 подключений пойдут на backend1.example.com:12345 и по одному подключению к каждому из второго и третьего серверов. Если во время связи с сервером возникает ошибка, соединение переместится на следующий сервер и другие, пока не будут опробованы все активные серверы. Если связь со всеми серверами будет потеряна, соединение будет закрыто.

Syntax:

server address [parameters];

Default:

Context:

upstream




Context:

upstream


Он определяет адрес и другие параметры сервера. Адрес может быть определен как имя домена или IP-адрес с обязательным портом или как путь к домену UNIX, указанный после префикса «unix:». Доменное имя, которое разрешается в различные IP-адреса, идентифицирует одновременно несколько серверов.

Следующие параметры можно определить как:

weight=number

устанавливает вес сервера, по умолчанию 1.

max_conns=number

Ограничивает максимальное количество одновременных подключений к прокси-серверу (1.11.5.). Значение по умолчанию - ноль, что означает отсутствие ограничения. Если группа серверов не включена в shared memory, ограничение действует для каждого рабочего процесса.

До 1.11.5 этот параметр был доступен в рамках нашей коммерческой подписки.

max_fails=number

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

fail_timeout=time


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

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

 

По умолчанию параметр установлен на 10 секунд.

 

Резервное копирование

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

 

Down

Помечает сервер как постоянно недоступный.

 

Кроме того, в рамках нашей  commercial subscription доступны следующие параметры.

Resolve

Отслеживает изменения IP-адреса, соответствующие домену сервера и автоматически изменяет конфигурацию восходящего потока без необходимости перезапуска nginx. Группа серверов должна находиться в shared memory.

 

Чтобы этот параметр работал, в блоке потока должна быть определена директива преобразователя. Образец:

stream {

resolver 10.0.0.1;

 

upstream u {

zone ...;

...

server example.com:12345 resolve;

}

}

service=name


Разрешает разрешение записей DNS SRV и устанавливает имя службы (1.9.13). Чтобы этот параметр работал, необходимо определить параметр resolve для сервера и указать имя хоста без номера порта.

 

Если имя службы не содержит точки ("."), Тогда настраивается RFC-совместимое имя и добавляется префикс службы протокола TCP. Например, для поиска в SRV-записи; _http._tcp.backend.example.com вам необходимо установить директиву:

server backend.example.com service=http resolve;

Если служба содержит одно или несколько имен служб, то она настраивается путем добавления имени, префикса службы и имени сервера. Например; для поиска SRV записей _http._tcp.backend.example.com и server1.backend.example.com необходимо указать следующие рекомендации:

server backend.example.com service=_http._tcp resolve;

server example.com service=server1.backend resolve;

Записи SRV с наивысшим приоритетом (с записями с самым низким значением приоритета) разрешаются как главные серверы, остальные записи SRV разрешаются как серверы резервного копирования. Если параметр backup (резервного копирования) определен для сервера, записи SRV с высоким приоритетом разрешаются как серверы резервного копирования, оставшиеся записи SRV игнорируются.

slow_start=time

Он регулирует время, в течение которого сервер корректирует свой вес от нуля до номинального значения, когда неисправный сервер становится healthy (исправным) или когда сервер присутствует через некоторое время, он считается недоступным. Значение по умолчанию равно нулю, это означает что медленный старт не работает. Параметр нельзя использовать с методом балансировки хэш-нагрузки.

Если в группе только один сервер, параметры max_fails, fail_timeout и slow_start игнорируются, такой сервер никогда не будет считаться неиспользуемым.

Syntax:

zone name [size];

Default:

Context:

upstream

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

Кроме того, в рамках нашей commercial subscription такие группы позволяют изменять членство в группах и изменять определенные настройки сервера без перезапуска nginx. Доступ к конфигурации можно получить через модуль API (1.13.3).

До версии 1.13.3 доступ к конфигурации можно было получить только через определенное место, обрабатываемое upstream_conf.

Syntax:

state file;

Default:

Context:

upstream

1.9.7. Эта директива, появившаяся в версии,

Задает файл, который поддерживает динамически настраиваемое состояние группы

Примеры:

state /var/lib/nginx/state/servers.conf; # path for Linux

state /var/db/nginx/state/servers.conf; # path for FreeBSD

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

Изменения, внесенные во время обновления binary upgrade или configuration reload могут быть потеряны.

Эта директива доступна в рамках нашей commercial subscription .

Syntax:

hash key [consistent];

Default:

Context:

upstream

Сопоставление клиент-сервер определяет метод балансировки нагрузки для группы серверов, где он зависит от значения хешированного ключа. Ключевой текст может содержать переменные и их комбинации (1.11.2). Пример использования:

hash $remote_addr;

Обратите внимание, что добавление или удаление сервера из группы может привести к перезаписи многих ключей для разных серверов. Метод Cache::Memcached совместим с библиотекой Perl.

Если указан параметр согласованности, вместо него будет использоваться метод согласованного хеширования  ketama consistent hashing. Этот метод гарантирует, что только несколько ключей будут записаны на разные серверы, когда сервер добавляется или удаляется из группы. Это помогает достичь более высокого коэффициента попадания в кэш для серверов кеширования. Метод совместим с библиотекой Cache::Memcached::Fast Per с параметром ketama_points, установленным на 160.

Syntax:

least_conn;

Default:

Context:

upstream

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

Syntax:

least_time connect | first_byte | last_byte [inflight];

Default:

Context:

upstream

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

Если указан параметр подключения, время используется для подключения к вышестоящему серверу. Если указан параметр first_byte, время используется для получения последнего байта данных. Если указан параметр inflight (1.11.6), учитываются и незавершенные ссылки.

До 1.11.6 незавершенные ссылки считались по умолчанию.

Эта директива доступна в рамках нашей  commercial subscription.

 

Встроенные переменные

Модуль ngx_stream_upstream_module поддерживает следующие встроенные переменные:

$ upstream_addr

Он резервирует IP-адрес и порт или путь к сокету UNIX-домена вышестоящего сервера (1.11.4). Если во время прокси-сервера обращались к различным серверам, их адреса разделяются запятыми. «192.168.1.1:12345, 192.168.1.2:12345, unix: / tmp / sock». Если сервер не может быть выбран, переменная сохраняет имя группы серверов.

$ upstream_bytes_sent

Количество байтов, отправленных вышестоящему серверу (1.11.4). Значения, состоящие из множества ссылок, разделяются запятыми, например адреса в переменной  $upstream_addr

$ upstream_bytes_received

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

$ upstream_connect_time

Пора подключиться к вышестоящему серверу (1.11.4); время хранится в секундах с точностью до миллисекунд. Время, состоящее из множества соединений, разделяется запятыми, например; адреса в переменной $upstream_addr

$ upstream_first_byte_time

Время получить первый байт данных (1.11.4); Время хранится в секундах с разрешением до миллисекунд. Время, состоящее из множества соединений разделяется запятыми, например; адреса в переменной $upstream_addr

$ upstream_session_time

Продолжительность сеанса в секундах с точностью до миллисекунды (1.11.4). Времена, состоящие из множества соединений, разделяются запятыми, например, адреса в переменной $upstream_addr

Модуль Upstream Ngingx
Обновление до Mysql на се...
  • 2020-10-08
  • 1
  • 59
Модуль Upstream Ngingx
Резервное Копирование и ...
  • 2020-10-05
  • 1
  • 66
Модуль Upstream Ngingx
Что такое Ioncube и для ч...
  • 2020-10-06
  • 1
  • 75
Модуль Upstream Ngingx
Что такое FTP и каковы е...
  • 2020-10-07
  • 1
  • 51
Модуль Upstream Ngingx
Что такое выделенный серв...
  • 2020-10-07
  • 1
  • 40
Модуль Upstream Ngingx
Wordpress Litespeed
  • 2020-10-09
  • 1
  • 470