模块 ngx_stream_zone_sync_module

示例配置
Directives
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_证书
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 请求的信息、 以及 HTTPStream 中的键值对。

此模块作为我们商业订阅的一部分提供。

示例配置

最低配置:

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;
    }
}

Directives

语法: zone_sync;
默认值:
上下文: server

启用集群节点之间的共享内存区域同步。 集群节点是使用 zone_sync_server Directives定义的。

语法: zone_sync_buffers number size;
默认值:
zone_sync_buffers 8 4k|8k;
上下文: stream,server

设置numbersize的 用于推送区域内容的每区域缓冲区。 默认情况下,缓冲区大小等于一个内存页。 这是 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用于解析的 per-connection receive buffer 同步消息的传入流。 缓冲区大小必须等于或大于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_serverDirectives替换为 这resolveparameter 的 S S 的 Alpha S Directives。

每个群集节点只应指定一次。

所有群集节点都应使用相同的配置。

为了让resolve参数工作, resolver Directives 必须在 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

指定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

该Directives出现在版本 1.19.4 中。

在与其他集群服务器建立连接时设置任意 OpenSSL 配置命令

使用 OpenSSL 1.0.2 或更高版本时,支持该Directives。

几个zone_sync_ssl_conf_commandDirectives 可以在同一级别上指定。 这些Directives继承自之前的配置级别 当且仅当存在 不zone_sync_ssl_conf_commandDirectives 在当前级别上定义。

请注意,直接配置 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

该Directives出现在版本 1.15.7 中。

允许覆盖用于验证集群服务器证书的服务器名称,并在与集群服务器建立连接时通过 SNI 传递服务器名称。

默认情况下,使用 zone_sync_server 地址的 host 部分, 或解析的 IP 地址(如果指定了 resolve 参数)。

语法: zone_sync_ssl_password_file file;
默认值:
上下文: stream,server

指定file使用 secret keys 的密码,其中每个密码都在单独的行上指定。 加载密钥时依次尝试密码。

语法: 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

该Directives出现在版本 1.15.7 中。

启用或禁用通过 TLS 传递服务器名称 服务器名称指示扩展 (SNI、RFC 6066) 与其他集群服务器建立连接时。

语法: zone_sync_ssl_trusted_certificate file;
默认值:
上下文: stream,server

指定file使用 PEM 格式的受信任 CA 证书 用于验证其他集群服务器的证书。

语法: 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 和 开始向其推送更新。 在静态配置的情况下, 需要重新加载其他节点才能将更新发送到新节点。

要停止节点,请发送QUITsignal 传递给实例。 节点将完成区域同步 并优雅地关闭打开的连接。

要删除节点,请更新集群主机名的 DNS 记录 并删除节点的 IP 地址。 所有其他节点最终会发现该节点已被删除, 关闭与节点的连接,并且不再尝试连接到该节点。 删除节点后,可以如上所述停止该节点。 如果是静态配置,则需要重新加载其他节点 以停止向已删除的节点发送更新。