模块 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 |
设置用于推送区域内容的每个区域缓冲区的 数字
和 大小
。默认情况下,缓冲区大小等于一个内存页。根据平台的不同,它可能是 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 |
设置用于解析传入同步消息流的每个连接接收缓冲区的 大小
。缓冲区大小必须等于或大于 zone_sync_buffers 之一。默认情况下,缓冲区大小等于 zone_sync_buffers 的 大小
乘以 数字
。
语法 |
zone_sync_server |
---|---|
默认值 | — |
上下文 |
server |
定义集群节点的 地址
。地址可以指定为带必需端口的域名或 IP 地址,或者作为在“unix:
”前缀后指定的 UNIX 域套接字路径。解析为多个 IP 地址的域名会同时定义多个节点。
resolve
参数指示 nginx 监视与节点域名相对应的 IP 地址的更改,并在无需重新启动 nginx 的情况下自动修改配置。
集群节点是动态地指定为带有 resolve
参数的单个 zone_sync_server
指令,还是静态地指定为一系列不带参数的多个指令。
每个集群节点只能指定一次。
所有集群节点都应使用相同的配置。
为了使 resolve
参数能够工作,必须在 stream 块中指定 resolver 指令。示例
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 |
指定用于对另一个集群服务器进行身份验证的 PEM 格式证书的 文件
。
语法 |
zone_sync_ssl_certificate_key |
---|---|
默认值 | — |
上下文 |
stream 、server |
指定用于对另一个集群服务器进行身份验证的 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 |
指定用于 验证 另一个集群服务器证书的 PEM 格式吊销证书 (CRL) 的 文件
。
语法 |
zone_sync_ssl_name |
---|---|
默认值 |
zone_sync_ssl_name host from zone_sync_server; |
上下文 |
stream 、server |
此指令出现在 1.15.7 版中。
允许覆盖用于 验证 集群服务器证书的服务器名称,并在与集群服务器建立连接时 通过 SNI 传递。
默认情况下,使用 zone_sync_server 地址的主机部分,或者如果指定了 resolve 参数,则解析 IP 地址。
语法 |
zone_sync_ssl_password_file |
---|---|
默认值 | — |
上下文 |
stream 、server |
指定包含 密钥 密码的 文件
,其中每个密码都单独一行。加载密钥时,将依次尝试密码。
语法 |
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 |
指定用于 验证 另一个集群服务器证书的 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 |
设置连接到另一个集群节点上的两次连续读或写操作之间的 超时时间
。如果在此时间内没有传输数据,则连接将关闭。
API 端点
节点的同步状态可通过 API 的 /stream/zone_sync/ 端点获得,该端点返回 以下 指标。
启动、停止、移除集群节点
要启动新节点,请使用新节点的 IP 地址更新集群主机名的 DNS 记录,然后启动实例。新节点将从 DNS 或静态配置中发现其他节点,并开始向其发送更新。其他节点最终将使用 DNS 发现新节点,并开始向其推送更新。对于静态配置,需要重新加载其他节点才能向新节点发送更新。
要停止节点,请向实例发送 QUIT
信号。节点将完成区域同步并优雅地关闭打开的连接。
要移除节点,请更新集群主机名的 DNS 记录并移除节点的 IP 地址。所有其他节点最终将发现节点已被移除,关闭与节点的连接,并且不再尝试连接到它。移除节点后,可以按照上述说明停止它。对于静态配置,需要重新加载其他节点才能停止向已移除的节点发送更新。