ngx_stream_zone_sync_module モジュール

設定例
ディレクティブ
     zone_sync
     zone_sync_buffers
     zone_sync_connect_retry_interval
     zone_sync_connect_timeout
     zone_sync_interval
     zone_sync_recv_buffer_size
     zone_sync_server
     zone_sync_ssl
     zone_sync_ssl_certificate
     zone_sync_ssl_certificate_key
     zone_sync_ssl_ciphers
     zone_sync_ssl_conf_command
     zone_sync_ssl_crl
     zone_sync_ssl_name
     zone_sync_ssl_password_file
     zone_sync_ssl_protocols
     zone_sync_ssl_server_name
     zone_sync_ssl_trusted_certificate
     zone_sync_ssl_verify
     zone_sync_ssl_verify_depth
     zone_sync_timeout
API endpoints
Starting, stopping, removing a cluster node

ngx_stream_zone_sync_module モジュール (1.13.8) はクラスタのノード間での共有メモリ領域の内容の同期のために必要なサポートを提供します。特定の領域の同期を有効にするには、対応するモジュールがこの機能をサポートしなければなりません。現在、httpstreamの両方で、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 number size;
デフォルト:
zone_sync_buffers 8 4k|8k;
コンテキスト: stream, server

領域の内容をプッシュするために使われる領域ごとのバッファの サイズ を設定します。デフォルトでは、バッファサイズはメモリページと同じサイズです。これは4Kあるいは8kです。プラットフォームに依存します。

単一のバッファは、同期される各ゾーンのエントリを保持するのに十分な大きさである必要があります。

構文: zone_sync_connect_retry_interval time;
デフォルト:
zone_sync_connect_retry_interval 1s;
コンテキスト: stream, server

他のクラスタノードへの接続の試行間の間隔を定義します。

構文: zone_sync_connect_timeout time;
デフォルト:
zone_sync_connect_timeout 5s;
コンテキスト: stream, server

他のクラスタノードと接続を確立するためのタイムアウトを定義します。

構文: zone_sync_interval time;
デフォルト:
zone_sync_interval 1s;
コンテキスト: stream, server

共有メモリ領域内の更新をポールするための間隔を定義します。

構文: zone_sync_recv_buffer_size size;
デフォルト:
zone_sync_recv_buffer_size 4k|8k;
コンテキスト: stream, server

やってくる同期メッセージのストリームをパースするために使われる接続毎の受信バッファのサイズ を設定します。バッファサイズは、zone_sync_buffersの1つ以上である必要があります。デフォルトでは、バッファサイズはzone_sync_buffers sizenumber で乗算したものと等しくなります。

構文: zone_sync_server address [resolve];
デフォルト: -
コンテキスト: 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 on | off;
デフォルト:
zone_sync_ssl off;
コンテキスト: stream, server

他のクラスタサーバへの接続のためのSSL/TLSプロトコルを有効にします。

構文: zone_sync_ssl_certificate file;
デフォルト: -
コンテキスト: stream, server

他のクラスタサーバへの認証に使われるPEM形式の証明書を持つfileを指定します。

構文: zone_sync_ssl_certificate_key file;
デフォルト: -
コンテキスト: stream, server

他のクラスタサーバへの認証に使われるPEM形式の秘密鍵の ファイルを指定します。

構文: zone_sync_ssl_ciphers ciphers;
デフォルト:
zone_sync_ssl_ciphers DEFAULT;
コンテキスト: stream, server

他のクラスタサーバへの接続で有効なcipherを指定します。cipherはOpenSSLライブラリで理解される形式で指定されます。

全てのリストは"openssl ciphers"コマンドを使ってみることができます。

構文: zone_sync_ssl_conf_command name value;
デフォルト: -
コンテキスト: 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 file;
デフォルト: -
コンテキスト: stream, server

他のクラスタサーバの証明書をverifyするために使われるPEM形式の無効な証明書(CRL)のfileを指定します。

構文: zone_sync_ssl_name 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 file;
デフォルト: -
コンテキスト: stream, server

secret keysのためのそれぞれのパスフレーズが一行に指定されているfileを指定します。パスフレーズはキーがロードされる時に順番に試されます。

構文: zone_sync_ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3];
デフォルト:
zone_sync_ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
コンテキスト: stream, server

他のクラスタサーバへの接続のために指定されたプロトコルを有効にします。

構文: zone_sync_ssl_server_name on | off;
デフォルト:
zone_sync_ssl_server_name off;
コンテキスト: stream, server

このディレクティブはバージョン1.15.7から導入されました。

他のクラスタサーバと接続を確立する時に、TLS Server Name Indication extension (SNI, RFC 6066) を使ってサーバ名を渡すことを有効または無効にします。

構文: zone_sync_ssl_trusted_certificate file;
デフォルト: -
コンテキスト: stream, server

他のクラスタサーバの証明書をverifyするために使われるPEM形式の信頼されたCA証明書のfileを指定します。

構文: zone_sync_ssl_verify on | off;
デフォルト:
zone_sync_ssl_verify off;
コンテキスト: stream, server

他のクラスタサーバの証明書の検証を有効または無効にします。

構文: zone_sync_ssl_verify_depth number;
デフォルト:
zone_sync_ssl_verify_depth 1;
コンテキスト: stream, server

他のクラスタサーバの証明書チェーンの検証の深さを設定します。

構文: zone_sync_timeout timeout;
デフォルト:
zone_sync_timeout 5s;
コンテキスト: stream, server

他のクラスタノードへの接続の2つの連続する読み込みあるいは書き込み操作のタイムアウトを設定します。この時間の間に何もデータが転送されない場合、接続は閉じられます。

API エンドポイント

ノードの同期状態はfollowing メトリクスを返すAPIの/stream/zone_sync/ エンドポイントを使って利用可能です。

クラスタノードの開始、停止、削除

新しいノードを開始するには、新しいノードのIPアドレスを使ってクラスタのホスト名のDNSレコードを更新し、インスタンスを開始します。新しいノードは他のノードをDNSあるいは静的な設定から見つけ、それらに更新を送信し始めるでしょう。他のノードは最終的にDNSを使う新しいノードを発見し、更新をそれに送信し始めます。静的な設定の場合、他のノードは更新を新しいノードに送信するためにリバランスをする必要があります。

ノードを停止するには、インスタンスにQUIT シグナルを送信します。ノードは領域の同期を終了し、新しい接続をグレースフルに閉じるでしょう。

ノードを削除するには、クラスタのホスト名のDNSレコードを更新し、ノードのIPアドレスを削除します。他の全てのノードは最終的にノードが削除されたことを発見し、ノードへの接続を閉じ、もうそれに接続しようとしなくなるでしょう。ノードが削除された後で、上で説明したように停止することができます。静的な設定の場合、他のノードは削除されたノードに更新を送信することを止めるためにリバランスする必要があります。

TOP
inserted by FC2 system