Spec-Zone.ru › nginx

Модуль ngx_stream_zone_sync_module

  • Пример конфигурации
  • Директивы
  • zone_sync
  • zone_sync_buffers
  • zone_sync_connect_retry_interval
  • zone_sync_connect_timeout
  • zone_sync_interval
  • zone_sync_recv_buffer_size
  • zone_sync_server
  • zone_sync_ssl
  • zone_sync_ssl_certificate
  • zone_sync_ssl_certificate_key
  • zone_sync_ssl_ciphers
  • zone_sync_ssl_conf_command
  • zone_sync_ssl_crl
  • zone_sync_ssl_name
  • zone_sync_ssl_password_file
  • zone_sync_ssl_protocols
  • zone_sync_ssl_server_name
  • zone_sync_ssl_trusted_certificate
  • zone_sync_ssl_verify
  • zone_sync_ssl_verify_depth
  • zone_sync_timeout
  • Конечные точки API
  • Запуск, остановка и удаление узла кластера

Модуль ngx_stream_zone_sync_module (1.13.8) предоставляет необходимые средства для синхронизации содержимого зон разделяемой памяти между узлами кластера. Для включения синхронизации определённой зоны соответствующий модуль должен поддерживать эту функцию. В настоящее время можно синхронизировать HTTP-сеансы с закреплением, сведения об избыточных HTTP-запросах и пары «ключ-значение» как в http, так и в stream.

Этот модуль доступен в рамках нашей коммерческой подписки.

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

Минимальная конфигурация:

http {
    ...

    upstream backend {
       server backend1.example.com:8080;
       server backend2.example.com:8081;

       sticky learn
              create=$upstream_cookie_examplecookie
              lookup=$cookie_examplecookie
              zone=client_sessions:1m sync;
    }

    ...
}

stream {
    ...


    server {
        zone_sync;

        listen 127.0.0.1:12345;

        # cluster of 2 nodes
        zone_sync_server a.example.com:12345;
        zone_sync_server b.example.com:12345;

    }

Более сложная конфигурация с включённым SSL и узлами кластера, определяемыми через DNS:

...

stream {
    ...

    resolver 127.0.0.1 valid=10s;

    server {
        zone_sync;

        # the name resolves to multiple addresses that correspond to cluster nodes
        zone_sync_server cluster.example.com:12345 resolve;

        listen 127.0.0.1:4433 ssl;

        ssl_certificate     localhost.crt;
        ssl_certificate_key localhost.key;

        zone_sync_ssl on;

        zone_sync_ssl_certificate     localhost.crt;
        zone_sync_ssl_certificate_key localhost.key;
    }
}

Директивы

Синтаксис: zone_sync;
По умолчанию: —
Контекст: server

Включает синхронизацию зон разделяемой памяти между узлами кластера. Узлы кластера задаются директивами zone_sync_server.

Синтаксис: zone_sync_buffers number size;
По умолчанию: zone_sync_buffers 8 4k|8k;
Контекст: stream, server

Задаёт number и size буферов для каждой зоны, используемых для передачи содержимого зон. По умолчанию размер буфера равен размеру одной страницы памяти. В зависимости от платформы он составляет 4K или 8K.

Один буфер должен быть достаточно большим, чтобы вместить любую запись из каждой синхронизируемой зоны.
Синтаксис: zone_sync_connect_retry_interval time;
По умолчанию: zone_sync_connect_retry_interval 1s;
Контекст: stream, server

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

Синтаксис: zone_sync_connect_timeout time;
По умолчанию: zone_sync_connect_timeout 5s;
Контекст: stream, server

Задаёт время ожидания при установлении соединения с другим узлом кластера.

Синтаксис: zone_sync_interval time;
По умолчанию: zone_sync_interval 1s;
Контекст: stream, server

Задаёт интервал опроса обновлений в зоне разделяемой памяти.

Синтаксис: zone_sync_recv_buffer_size size;
По умолчанию: zone_sync_recv_buffer_size 4k|8k;
Контекст: stream, server

Задаёт size буфера приёма для каждого соединения, который используется для разбора входящего потока сообщений синхронизации. Размер буфера должен быть не меньше размера одного буфера, заданного директивой zone_sync_buffers. По умолчанию размер буфера равен размеру буфера, заданному директивой zone_sync_buffers, size умноженному на number.

Синтаксис: zone_sync_server address [resolve];
По умолчанию: —
Контекст: server

Задаёт address узла кластера. Адрес можно указать как доменное имя или IP-адрес с обязательным портом либо как путь к сокету домена UNIX, указанный после префикса «unix:». Доменное имя, разрешающееся в несколько IP-адресов, задаёт сразу несколько узлов.

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

Узлы кластера задаются либо динамически — одной директивой zone_sync_server с параметром resolve, либо статически — несколькими директивами без этого параметра.

Каждый узел кластера следует указывать только один раз.
Для всех узлов кластера должна использоваться одна и та же конфигурация.

Чтобы параметр resolve работал, в блоке stream необходимо указать директиву resolver. Пример:

stream {
    resolver 10.0.0.1;

    server {
        zone_sync;
        zone_sync_server cluster.example.com:12345 resolve;
        ...
    }
}
Синтаксис: zone_sync_ssl on | off;
По умолчанию: zone_sync_ssl off;
Контекст: stream, server

Включает протокол SSL/TLS для соединений с другими серверами кластера.

Синтаксис: zone_sync_ssl_certificate file;
По умолчанию: —
Контекст: stream, server

Задаёт file с сертификатом в формате PEM, используемым для аутентификации на другом сервере кластера.

Синтаксис: zone_sync_ssl_certificate_key file;
По умолчанию: —
Контекст: stream, server

Задаёт file с секретным ключом в формате PEM, используемым для аутентификации на другом сервере кластера.

Синтаксис: zone_sync_ssl_ciphers ciphers;
По умолчанию: zone_sync_ssl_ciphers DEFAULT;
Контекст: stream, server

Задаёт разрешённые шифры для соединений с другими серверами кластера. Шифры задаются в формате, который понимает библиотека OpenSSL.

Полный список можно просмотреть с помощью команды «openssl ciphers».

Синтаксис: zone_sync_ssl_conf_command name value;
По умолчанию: —
Контекст: stream, server

Эта директива появилась в версии 1.19.4.

Задаёт произвольные команды конфигурации OpenSSL при установлении соединения с другим сервером кластера.

Директива поддерживается при использовании OpenSSL версии 1.0.2 или выше.

На одном уровне можно указать несколько директив zone_sync_ssl_conf_command. Эти директивы наследуются с предыдущего уровня конфигурации только в том случае, если на текущем уровне не определены директивы zone_sync_ssl_conf_command.

Обратите внимание: непосредственная настройка OpenSSL может привести к неожиданному поведению.
Синтаксис: zone_sync_ssl_crl file;
По умолчанию: —
Контекст: stream, server

Задаёт file со списком отозванных сертификатов (CRL) в формате PEM, используемым для проверки сертификата другого сервера кластера. При использовании промежуточных сертификатов их списки отзыва следует указать в том же файле.

Синтаксис: zone_sync_ssl_name name;
По умолчанию: zone_sync_ssl_name host from zone_sync_server;
Контекст: stream, server

Эта директива появилась в версии 1.15.7.

Позволяет переопределить имя сервера, используемое для проверки сертификата сервера кластера и передаваемое через SNI при установлении соединения с сервером кластера.

По умолчанию используется часть адреса zone_sync_server, содержащая имя узла, либо разрешённый IP-адрес, если указан параметр resolve.

Синтаксис: zone_sync_ssl_password_file file;
По умолчанию: —
Контекст: stream, server

Задаёт file с парольными фразами для секретных ключей; каждая парольная фраза указывается на отдельной строке. При загрузке ключа парольные фразы перебираются по очереди.

Синтаксис: zone_sync_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
По умолчанию: zone_sync_ssl_protocols TLSv1.2 TLSv1.3;
Контекст: stream, server

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

Синтаксис: zone_sync_ssl_server_name on | off;
По умолчанию: zone_sync_ssl_server_name off;
Контекст: stream, server

Эта директива появилась в версии 1.15.7.

Включает или отключает передачу имени сервера через расширение TLS Server Name Indication (SNI, RFC 6066) при установлении соединения с другим сервером кластера.

Синтаксис: zone_sync_ssl_trusted_certificate file;
По умолчанию: —
Контекст: stream, server

Задаёт file с доверенными сертификатами центров сертификации в формате PEM, используемыми для проверки сертификата другого сервера кластера.

Синтаксис: zone_sync_ssl_verify on | off;
По умолчанию: zone_sync_ssl_verify off;
Контекст: stream, server

Включает или отключает проверку сертификата другого сервера кластера.

Синтаксис: zone_sync_ssl_verify_depth number;
По умолчанию: zone_sync_ssl_verify_depth 1;
Контекст: stream, server

Задаёт глубину проверки цепочки сертификатов другого сервера кластера.

Синтаксис: zone_sync_timeout timeout;
По умолчанию: zone_sync_timeout 5s;
Контекст: stream, server

Задаёт timeout между двумя последовательными операциями чтения или записи при соединении с другим узлом кластера. Если в течение этого времени данные не передаются, соединение закрывается.

Конечные точки API

Статус синхронизации узла доступен через конечную точку API /stream/zone_sync/, которая возвращает следующие метрики.

Запуск, остановка и удаление узла кластера

Чтобы запустить новый узел, обновите DNS-запись имени хоста кластера, добавив IP-адрес нового узла, и запустите экземпляр. Новый узел обнаружит остальные узлы через DNS или статическую конфигурацию и начнёт отправлять им обновления. Остальные узлы со временем обнаружат новый узел через DNS и начнут передавать ему обновления. При статической конфигурации остальные узлы необходимо перезагрузить, чтобы они начали отправлять обновления новому узлу.

Чтобы остановить узел, отправьте экземпляру сигнал QUIT. Узел завершит синхронизацию зон и корректно закроет открытые соединения.

Чтобы удалить узел, обновите DNS-запись имени хоста кластера и удалите IP-адрес узла. Все остальные узлы со временем обнаружат, что узел удалён, закроют соединения с ним и перестанут пытаться подключиться к нему. После удаления узел можно остановить, как описано выше. При статической конфигурации остальные узлы необходимо перезагрузить, чтобы они перестали отправлять обновления удалённому узлу.

© 2002-2021 Igor Sysoev
© 2011-2026 Nginx, Inc.
Licensed under the BSD License.
https://nginx.org/en/docs/stream/ngx_stream_zone_sync_module.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API