模块 ngx_stream_zone_sync_module

Example Configuration
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_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 endpoints
Starting, stopping, removing a cluster node

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

指令

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

指定filePEM 格式的证书,用于对另一台集群服务器进行身份验证。

句法: zone_sync_ssl_certificate_key file;
默认:
语境: stream,server

指定一个filePEM 格式的密钥,用于对另一个集群服务器进行身份验证。

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

指定filePEM 格式的已撤销证书 (CRL),用于验证 另一台群集服务器的证书。

句法: zone_sync_ssl_name name;
默认:
zone_sync_ssl_name host from zone_sync_server;
语境: stream,server

该指令出现在版本 1.15.7 中。

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

默认情况下,使用zone_sync_server地址 的主机部分,或者如果指定了 解析参数,则使用解析的 IP 地址。

句法: 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 服务器名称指示扩展(SNI、RFC 6066) 传递服务器名称 。

句法: zone_sync_ssl_trusted_certificate file;
默认:
语境: stream,server

指定file具有 PE​​M 格式的可信 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/端点获取,该端点返回以下 指标。

启动、停止、删除集群节点

要启动新节点,请使用新节点的 IP 地址更新集群主机名的 DNS 记录并启动实例。新节点将从 DNS 或静态配置中发现其他节点,并开始向它们发送更新。其他节点最终将使用 DNS 发现新节点并开始向其推送更新。在静态配置的情况下,需要重新加载其他节点才能将更新发送到新节点。

要停止节点,请将QUIT信号发送到实例。节点将完成区域同步并正常关闭打开的连接。

要删除节点,请更新集群主机名的 DNS 记录并删除该节点的 IP 地址。所有其他节点最终都会发现该节点已被删除,关闭与该节点的连接,并且将不再尝试连接到该节点。节点被移除后,可以按照上面的描述停止它。在静态配置的情况下,需要重新加载其他节点才能停止向已删除的节点发送更新。