模块 ngx_stream_zone_sync_module
该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 |
---|---|
默认: |
zone_sync_buffers 8 4k|8k; |
语境: |
stream ,server |
设置用于推送区域内容的每个区域缓冲区的number
和。size
默认情况下,缓冲区大小等于一页内存。这是 4K 或 8K,具体取决于平台。
单个缓冲区必须足够大以容纳正在同步的每个区域的任何条目。
句法: |
zone_sync_connect_retry_interval |
---|---|
默认: |
zone_sync_connect_retry_interval 1s; |
语境: |
stream ,server |
定义与另一个集群节点的连接尝试之间的间隔。
句法: |
zone_sync_connect_timeout |
---|---|
默认: |
zone_sync_connect_timeout 5s; |
语境: |
stream ,server |
定义与另一个集群节点建立连接的超时。
句法: |
zone_sync_interval |
---|---|
默认: |
zone_sync_interval 1s; |
语境: |
stream ,server |
定义轮询共享内存区域中更新的时间间隔。
句法: |
zone_sync_recv_buffer_size |
---|---|
默认: |
zone_sync_recv_buffer_size 4k|8k; |
语境: |
stream ,server |
size
用于解析传入的同步消息流的每个连接接收缓冲区
集。缓冲区大小必须等于或大于zone_sync_buffers之一
。默认情况下,缓冲区大小等于
zone_sync_buffers size
乘以number
。
句法: |
zone_sync_server |
---|---|
默认: | — |
语境: |
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 |
---|---|
默认: |
zone_sync_ssl off; |
语境: |
stream ,server |
启用 SSL/TLS 协议以连接到另一个群集服务器。
句法: |
zone_sync_ssl_certificate |
---|---|
默认: | — |
语境: |
stream ,server |
指定file
PEM 格式的证书,用于对另一台集群服务器进行身份验证。
句法: |
zone_sync_ssl_certificate_key |
---|---|
默认: | — |
语境: |
stream ,server |
指定一个file
PEM 格式的密钥,用于对另一个集群服务器进行身份验证。
句法: |
zone_sync_ssl_ciphers |
---|---|
默认: |
zone_sync_ssl_ciphers DEFAULT; |
语境: |
stream ,server |
指定为连接到另一个群集服务器而启用的密码。密码以 OpenSSL 库可以理解的格式指定。
可以使用“ ”命令查看完整列表openssl ciphers
。
句法: |
zone_sync_ssl_conf_command |
---|---|
默认: | — |
语境: |
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 |
---|---|
默认: | — |
语境: |
stream ,server |
指定file
PEM 格式的已撤销证书 (CRL),用于验证
另一台群集服务器的证书。
句法: |
zone_sync_ssl_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 |
---|---|
默认: | — |
语境: |
stream ,server |
指定file
带有密钥的密码短语
,
其中每个密码短语在单独的行上指定。加载密钥时会依次尝试密码。
句法: |
zone_sync_ssl_protocols
[ |
---|---|
默认: |
zone_sync_ssl_protocols TLSv1 TLSv1.1 TLSv1.2; |
语境: |
stream ,server |
启用指定的协议以连接到另一个群集服务器。
句法: |
zone_sync_ssl_server_name |
---|---|
默认: |
zone_sync_ssl_server_name off; |
语境: |
stream ,server |
该指令出现在版本 1.15.7 中。
与另一个集群服务器建立连接时, 启用或禁用通过TLS 服务器名称指示扩展(SNI、RFC 6066) 传递服务器名称 。
句法: |
zone_sync_ssl_trusted_certificate |
---|---|
默认: | — |
语境: |
stream ,server |
指定file
具有 PEM 格式的可信 CA 证书,用于验证
另一台集群服务器的证书。
句法: |
zone_sync_ssl_verify |
---|---|
默认: |
zone_sync_ssl_verify off; |
语境: |
stream ,server |
启用或禁用另一个集群服务器证书的验证。
句法: |
zone_sync_ssl_verify_depth |
---|---|
默认: |
zone_sync_ssl_verify_depth 1; |
语境: |
stream ,server |
设置另一个集群服务器证书链中的验证深度。
句法: |
zone_sync_timeout |
---|---|
默认: |
zone_sync_timeout 5s; |
语境: |
stream ,server |
设置timeout
连接到另一个群集节点的两个连续读取或写入操作之间的间隔。如果在此时间内没有数据传输,则连接被关闭。
API端点
节点的同步状态可通过 API 的 /stream/zone_sync/端点获取,该端点返回以下 指标。
启动、停止、删除集群节点
要启动新节点,请使用新节点的 IP 地址更新集群主机名的 DNS 记录并启动实例。新节点将从 DNS 或静态配置中发现其他节点,并开始向它们发送更新。其他节点最终将使用 DNS 发现新节点并开始向其推送更新。在静态配置的情况下,需要重新加载其他节点才能将更新发送到新节点。
要停止节点,请将QUIT
信号发送到实例。节点将完成区域同步并正常关闭打开的连接。
要删除节点,请更新集群主机名的 DNS 记录并删除该节点的 IP 地址。所有其他节点最终都会发现该节点已被删除,关闭与该节点的连接,并且将不再尝试连接到该节点。节点被移除后,可以按照上面的描述停止它。在静态配置的情况下,需要重新加载其他节点才能停止向已删除的节点发送更新。