Модуль 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