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

Устанавливает размер буферов на зону, используемых для передачи содержимого зон. По умолчанию размер буфера равен одной странице памяти. Это либо 4К, либо 8К, в зависимости от платформы.

Один буфер должен быть достаточно большим, чтобы содержать любой элемент каждой синхронизируемой зоны.
Синтаксис: 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

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

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

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

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

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

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

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

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

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

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

Указывает секретный ключ в формате 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 SSL_CONF_cmd при установлении соединения с другим сервером кластера.

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

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

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

Указывает файл с отзывами сертификатов (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 TLSv1.1 TLSv1.2;
Контекст: 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 с доверенными сертификатами CA в формате 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-эндпоинты

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

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

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

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

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

© 2002-2021 Igor Sysoev
© 2011-2024 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