モジュール 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 を設定します。デフォルトでは、バッファサイズは1つのメモリページと同じです。これは、プラットフォームに応じて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の1つ以上と等しいか、それより大きくする必要があります。デフォルトでは、バッファサイズはzone_sync_buffersの size に number を掛けたものに等しくなります。
| 構文 |
zone_sync_server |
|---|---|
| デフォルト | — |
| コンテキスト |
server |
クラスタノードの address を定義します。アドレスは、必須ポート付きのドメイン名またはIPアドレスとして、または「unix:」プレフィックスの後に指定されたUNIXドメインソケットパスとして指定できます。複数のIPアドレスに解決されるドメイン名は、一度に複数のノードを定義します。
resolveパラメーターは、ノードのドメイン名に対応するIPアドレスの変更を監視し、nginxを再起動する必要なく自動的に設定を変更するようにnginxに指示します。
クラスタノードは、resolveパラメーター付きの単一のzone_sync_serverディレクティブとして動的に指定されるか、パラメーターなしの複数のディレクティブのシリーズとして静的に指定されます。
各クラスタノードは一度だけ指定する必要があります。
すべてのクラスタノードは同じ設定を使用する必要があります。
resolveパラメーターを機能させるには、resolverディレクティブをstreamブロックで指定する必要があります。例
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形式の証明書を含む file を指定します。
| 構文 |
zone_sync_ssl_certificate_key |
|---|---|
| デフォルト | — |
| コンテキスト |
stream, server |
別のクラスタサーバーへの認証に使用されるPEM形式の秘密鍵を含む file を指定します。
| 構文 |
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)を含む file を指定します。
| 構文 |
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 Server Name Indication拡張機能(SNI、RFC 6066)を介したサーバー名の受け渡しを有効または無効にします。
| 構文 |
zone_sync_ssl_trusted_certificate |
|---|---|
| デフォルト | — |
| コンテキスト |
stream, server |
別のクラスタサーバーの証明書を検証するために使用される、PEM形式の信頼できるCA証明書を含む file を指定します。
| 構文 |
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 |
別のクラスタノードへの接続での2つの連続する読み取りまたは書き込み操作間の timeout を設定します。この時間内にデータが送信されない場合、接続は閉じられます。
APIエンドポイント
ノードの同期ステータスは、APIの/stream/zone_sync/エンドポイントを介して利用でき、次のメトリックを返します。
クラスタノードの起動、停止、削除
新しいノードを起動するには、新しいノードのIPアドレスでクラスタホスト名のDNSレコードを更新し、インスタンスを起動します。新しいノードは、DNSまたは静的構成から他のノードを検出し、それらに更新を送信し始めます。他のノードは最終的にDNSを使用して新しいノードを検出し、更新をプッシュし始めます。静的構成の場合、他のノードに更新を送信するには、他のノードをリロードする必要があります。
ノードを停止するには、インスタンスに QUIT シグナルを送信します。ノードはゾーン同期を完了し、開いている接続を正常に閉じます。
ノードを削除するには、クラスタホスト名のDNSレコードを更新し、ノードのIPアドレスを削除します。他のすべてのノードは、ノードが削除されたことを最終的に検出し、ノードへの接続を閉じ、それへの接続を試行しなくなります。ノードが削除されたら、上記のように停止できます。静的構成の場合、削除されたノードへの更新の送信を停止するには、他のノードをリロードする必要があります。