模組 ngx_stream_zone_sync_module
ngx_stream_zone_sync_module
模組 (1.13.8) 提供了在叢集節點之間同步共享記憶體區域內容的必要支援。要為特定區域啟用同步,相應的模組必須支援此功能。目前,可以同步 HTTP sticky 會話、關於過多的 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。
叢集節點可以動態指定為具有 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 |
指定一個 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 位址的主機部分,如果指定 resolve 參數,則使用解析的 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 位址。所有其他節點最終將發現該節點已移除,關閉與該節點的連線,並且不再嘗試連線到它。移除節點後,可以按照上述說明停止它。在靜態設定的情況下,需要重新載入其他節點,才能停止將更新傳送至已移除的節點。