ngx_stream_zone_sync_module モジュール
ngx_stream_zone_sync_module
モジュール (1.13.8) はクラスタのノード間での共有メモリ領域の内容の同期のために必要なサポートを提供します。特定の領域の同期を有効にするには、対応するモジュールがこの機能をサポートしなければなりません。現在、httpとstreamの両方で、HTTP sticky セッション、excessive HTTP リクエストに関する情報、key-value値のペアを同期することが可能です。
このモジュールは商用許可の一部として利用可能です。
設定例
最小構成:
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の1つ以上である必要があります。デフォルトでは、バッファサイズはzone_sync_buffers size
をnumber
で乗算したものと等しくなります。
構文: |
zone_sync_server |
---|---|
デフォルト: | - |
コンテキスト: |
server |
クラスタノードのアドレス
を定義します。アドレスはドメイン名あるいは必須のポートを持つIPアドレス、あるいは“unix:
” プリフィックスの後に指定されたUNIX-ドメインソケットとして指定することができます。幾つかのIPアドレスに解決されるドメイン名は複数のノードを1度に定義します。
resolve
はnginxにノードのドメイン名に対応するIPアドレスの変更を監視し、nginxの再起動の必要なしに設定を自動的に修正するように伝えます。
クラスタノードは、resolve
パラメータを持つzone_sync_server
ディレクティブとして動的に、あるいはパラメータを持たない幾つかのディレクティブの連続として静的のどちらかで指定されます。
各クラスタノードは1度だけ指定されなければなりません。
全てのクラスタノードは同じ設定を使わなければなりません。
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形式の秘密鍵の ファイル
を指定します。
構文: |
zone_sync_ssl_ciphers |
---|---|
デフォルト: |
zone_sync_ssl_ciphers DEFAULT; |
コンテキスト: |
stream , server |
他のクラスタサーバへの接続で有効なcipherを指定します。cipherはOpenSSLライブラリで理解される形式で指定されます。
全てのリストは"openssl ciphers
"コマンドを使ってみることができます。
構文: |
zone_sync_ssl_crl |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
他のクラスタサーバの証明書をverifyするために使われるPEM形式の無効な証明書(CRL)のfile
を指定します。
構文: |
zone_sync_ssl_name |
---|---|
デフォルト: |
zone_sync_ssl_name host from zone_sync_server; |
コンテキスト: |
stream , server |
このディレクティブはバージョン1.15.7から導入されました。
クラスタされるサーバの証明書をverifyするために使われるサーバ名を上書きし、クラスタサーバと接続を確立する時にpassed through SNIできます。
デフォルトでは、zone_sync_serverアドレスのホスト部分、またはresolveパラメータが指定された場合は解決されたIPアドレスが使われます。
構文: |
zone_sync_ssl_password_file |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
secret keysのためのそれぞれのパスフレーズが一行に指定されている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 extension (SNI, RFC 6066) を使ってサーバ名を渡すことを有効または無効にします。
構文: |
zone_sync_ssl_trusted_certificate |
---|---|
デフォルト: | - |
コンテキスト: |
stream , server |
他のクラスタサーバの証明書をverifyするために使われる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つの連続する読み込みあるいは書き込み操作のタイムアウト
を設定します。この時間の間に何もデータが転送されない場合、接続は閉じられます。
API エンドポイント
ノードの同期状態はfollowing メトリクスを返すAPIの/stream/zone_sync/ エンドポイントを使って利用可能です。
クラスタノードの開始、停止、削除
新しいノードを開始するには、新しいノードのIPアドレスを使ってクラスタのホスト名のDNSレコードを更新し、インスタンスを開始します。新しいノードは他のノードをDNSあるいは静的な設定から見つけ、それらに更新を送信し始めるでしょう。他のノードは最終的にDNSを使う新しいノードを発見し、更新をそれに送信し始めます。静的な設定の場合、他のノードは更新を新しいノードに送信するためにリバランスをする必要があります。
ノードを停止するには、インスタンスにQUIT
シグナルを送信します。ノードは領域の同期を終了し、新しい接続をグレースフルに閉じるでしょう。
ノードを削除するには、クラスタのホスト名のDNSレコードを更新し、ノードのIPアドレスを削除します。他の全てのノードは最終的にノードが削除されたことを発見し、ノードへの接続を閉じ、もうそれに接続しようとしなくなるでしょう。ノードが削除された後で、上で説明したように停止することができます。静的な設定の場合、他のノードは削除されたノードに更新を送信することを止めるためにリバランスする必要があります。