ヘッダーをスキップ
Oracle® Coherence開発者ガイド
リリース3.7.1
B65026-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

16 クォーラムの使用方法

この章の内容は次のとおりです。

16.1 概要

Coherenceでは、クォーラムとは、サービス・アクションを許可または禁止する前にクラスタに必要なサービス・メンバーの最小数のことです。クォーラムを使用すると、メンバー数がしきい値に達したときにクラスタが予測どおりに動作することが自動的に保証されるため、クォーラムは有用です。たとえば、パーティション・キャッシュのバックアップのクォーラムには、パーティション・キャッシュ・サービスがパーティションのバックアップを許可される前に、記憶域が有効なメンバーが5つ以上必要となる場合があります。

クォーラムはサービス固有で、クォーラム・ポリシー内で定義されます。クラスタ・サービスのクラスタ・クォーラム・ポリシー、パーティション・キャッシュ・サービスのパーティション・クォーラム・ポリシーおよびプロキシ・サービスのプロキシ・クォーラム・ポリシーがあります。クォーラムのしきい値は、キャッシュ構成ファイルを使用してポリシーに設定されます。

各クォーラムには、それぞれの特定のサービスに関する利点があります。ただし、一般的にクォーラムは次のとおりです。

16.2 クラスタ・クォーラムの使用方法

クラスタ・クォーラム・ポリシーによって、クラスタ・サービスに1つのクォーラム(タイムアウト・サバイバ・クォーラム)が定義されます。タイムアウト・サバイバ・クォーラムでは、疑いのあるメンバーをクラスタ・サービスが終了するときに、クラスタに保持しておく必要があるクラスタ・メンバーの最小数を指定する必要があります。メンバーは、ネットワーク通信に応答しておらず、クラスタから切断される危険が迫っている場合に、疑いがあると見なされます。クォーラムをすべてのメンバーに汎用的に指定することも、クライアント・メンバーやサーバー・メンバーなどクラスタ内で特定のロールを持っているメンバーに制約することもできます。クラスタ・メンバーのロール名の定義の詳細は、「member-identity」の<role-name>要素を参照してください。

このクォーラムは通常、ネットワーク・パフォーマンスが変化する環境で使用されます。たとえば、断続的なネットワーク停止によって多くのクラスタ・メンバーがクラスタから削除されてしまう場合があります。このクォーラムを使用すると、一定の数のメンバーが停止時に保持され、ネットワークの回復時に使用可能になります。また、この動作によって、メンバーの再起動に必要な手動の介在が最小限に抑えられます。当然ながら、応答していないノードからの協調関係を必要とするリクエストは完了できず、停止時間中はブロックされるか、またはタイムアウトになります。

16.2.1 クラスタ・クォーラム・ポリシーの構成

タイムアウト・サバイバ・クォーラムのしきい値は、<timeout-survivor-quorum>要素とオプションでrole属性を使用して、オペレーション・オーバーライド・ファイルに構成します。この要素は、<cluster-quorum-policy>要素内で使用する必要があります。次の例では、疑いのあるメンバーを削除するときに、serverロールが付与された5つのクラスタ・メンバーが常にクラスタに保持されるように、タイムアウト・サバイバ・クォーラムのしきい値が構成されます。

<cluster-config>
   <member-identity>
      <role-name>server</role-name>
   </member-identity>
   <cluster-quorum-policy>
      <timeout-survivor-quorum role="Server">5</timeout-survivor-quorum>
   </cluster-quorum-policy>
</cluster-config>

16.3 パーティション・キャッシュ・クォーラムの使用方法

パーティション・キャッシュ・クォーラム・ポリシーでは、様々なパーティション・キャッシュ・サービス操作の実行を許可する前に、必要なサービス・メンバーの数を指定する必要がある4つのクォーラムがパーティション・キャッシュ・サービス(DistributedCache)に定義されます。

これらのクォーラムは通常、分散キャッシュを意図された使用方法と要件で使用する場合に、様々なサービス操作が最適に実行されるサービス・メンバー・レベルを示すために使用されます。たとえば、小さな分散キャッシュで、適切にデータを格納し、予想されるリクエスト量を処理するために、記憶域が有効なメンバーが3つのみ必要な場合があります。一方、大きな分散キャッシュで、適切にデータを格納し、予想されるリクエスト量を処理するために、記憶域が有効なメンバーが10以上必要な場合があります。最適なメンバー・レベルは、開発時にテストし、それに合わせて本番環境で最小のサービス・メンバー・レベルが使用できるように設定します。

サービスを実行する、記憶域が有効なノードの数が、読取りまたは書込みクォーラムの構成レベルを下回った場合は、com.tangosol.net.RequestPolicyExceptionのスローによって対応するクライアント操作が拒否されます。記憶域が有効なノードの数が分散クォーラムの構成レベルを下回った場合は、クォーラムに達するまで一部のデータが消失の危険がある状態(バックアップがない)になることがあります。リストア・クォーラムを下回った場合は、クォーラムに達するかタイムアウトになるまで一部の操作がブロックされることがあります。

16.3.1 パーティション・キャッシュ・クォーラム・ポリシーの構成

パーティション・キャッシュ・クォーラムは、キャッシュ構成ファイルの<partitioned-quorum-policy-scheme>要素内で構成します。この要素は、<distributed-scheme>要素内で使用する必要があります。次の例では、パーティション・キャッシュ・クォーラムにしきい値を構成しています。しきい値には、操作の実行に必要なサービス・メンバーの最小数を指定することをお薦めします。

<distributed-scheme>
   <scheme-name>partitioned-cache-with-quorum</scheme-name>
   <service-name>PartitionedCacheWithQuorum</service-name>
   <backing-map-scheme>
      <local-scheme/>
   </backing-map-scheme>
   <partitioned-quorum-policy-scheme>
      <distribution-quorum>4</distribution-quorum>
      <restore-quorum>3</restore-quorum>
      <read-quorum>3</read-quorum>
      <write-quorum>5</write-quorum>
   </partitioned-quorum-policy-scheme>
   <autostart>true</autostart>
</distributed-scheme>

<partitioned-quorum-policy-scheme>要素では、スキーム参照の使用もサポートされています。次の例では、partitioned-cache-quorumという名前の<partitioned-quorum-policy-scheme>が、<distributed-scheme>要素内から参照されます。

<distributed-scheme>
   <scheme-name>partitioned-cache-with-quorum</scheme-name>
   <service-name>PartitionedCacheWithQuorum</service-name>
   <backing-map-scheme>
      <local-scheme/>
   </backing-map-scheme>
   <partitioned-quorum-policy-scheme>
      <scheme-ref>partitioned-cache-quorum</scheme-ref>
   </partitioned-quorum-policy-scheme>
   <autostart>true</autostart>
</distributed-scheme>
 
<distributed-scheme>
   <scheme-name>dist-example</scheme-name>
   <service-name>DistributedCache</service-name>
   <backing-map-scheme>
      <local-scheme/>
   </backing-map-scheme>
   <partitioned-quorum-policy-scheme>
      <scheme-name>partitioned-cache-quorum</scheme-name>
      <distribution-quorum>4</distribution-quorum>
      <restore-quorum>3</restore-quorum>
      <read-quorum>3</read-quorum>
      <write-quorum>5</write-quorum>
   </partitioned-quorum-policy-scheme>
   <autostart>true</autostart>
</distributed-scheme>

16.4 プロキシ・クォーラムの使用方法

プロキシ・クォーラム・ポリシーによって、プロキシ・サービスに1つのクォーラム(接続クォーラム)が定義されます。接続クォーラムでは、プロキシ・サービスでクライアント接続が許可される前に使用可能にしておく必要のあるプロキシ・サービス・メンバーの最小数を指定する必要があります。

このクォーラムは通常、指定のTCPクライアント・セットを最適にサポートするために十分なプロキシ・サービス・メンバーが使用可能であることを保証するために使用します。たとえば、少数のクライアントから2つのプロキシ・サービスを使用してクラスタに効率的に接続する場合があります。一方、多数のクライアントで、クラスタに効率的に接続するには3つ以上のプロキシ・サービスが必要な場合があります。最適なレベルは、開発時にテストし、それに合わせて本番環境で最小のサービス・メンバー・レベルが使用できるように設定します。

16.4.1 プロキシ・クォーラム・ポリシーの構成

接続クォーラムのしきい値は、キャッシュ構成ファイルの<proxy-quorum-policy-scheme>要素内で構成します。この要素は、<proxy-scheme>要素内で使用する必要があります。次の例では、プロキシ・サービスでTCPクライアント接続の受入れが許可される前にクラスタに必ず3つのプロキシ・サービス・メンバーが存在するように接続クォーラムのしきい値を構成しています。

<proxy-scheme>
   <scheme-name>proxy-with-quorum</scheme-name>
   <service-name>TcpProxyService</service-name>
   <acceptor-config>
      <tcp-acceptor>
         <local-address>
            <address>localhost</address>
            <port>32000</port>
         </local-address>
      </tcp-acceptor>
   </acceptor-config>
   <proxy-quorum-policy-scheme>
      <connect-quorum>3</connect-quorum>
   </proxy-quorum-policy-scheme>
   <autostart>true</autostart>
</proxy-scheme>

<proxy-quorum-policy-scheme>要素では、スキーム参照の使用もサポートされています。次の例では、proxy-quorumという名前の<proxy-quorum-policy-scheme>が、<proxy-scheme>要素内から参照されます。

<proxy-scheme>
   <scheme-name>proxy-with-quorum</scheme-name>
   <service-name>TcpProxyService</service-name>
   ...
   <proxy-quorum-policy-scheme>
      <scheme-ref>proxy-quorum</scheme-ref>
   </proxy-quorum-policy-scheme>
   <autostart>true</autostart>
</proxy-scheme>
<proxy-scheme>
   <scheme-name>proxy-example</scheme-name>
   <service-name>TcpProxyService</service-name>
   ...
   <proxy-quorum-policy-scheme>
      <scheme-name>proxy-quorum</scheme-name>
      <connect-quorum>3</connect-quorum>
   </proxy-quorum-policy-scheme>
   <autostart>true</autostart>
</proxy-scheme>

16.5 カスタムのアクション・ポリシーの有効化

カスタムのアクション・ポリシーは、クラスタ・サービス、パーティション・キャッシュ・サービスおよびプロキシ・サービスのデフォルトのクォーラム・ポリシーのかわりに使用できます。カスタムのアクション・ポリシーは、com.tangosol.net.ActionPolicyインタフェースを実装する必要があります。

カスタムのポリシーを有効にするには、実装クラスの完全修飾名が含まれるクォーラム・ポリシー・スキーム要素に<class-name>要素を追加します。次の例では、分散キャッシュ・スキーム定義のパーティション・クォーラム・ポリシーにカスタムのアクション・ポリシーが追加されます。

<distributed-scheme>
   <scheme-name>partitioned-cache-with-quorum</scheme-name>
   <service-name>PartitionedCacheWithQuorum</service-name>
   <backing-map-scheme>
     <local-scheme/>
   </backing-map-scheme>
   <partitioned-quorum-policy-scheme>
      <class-name>package.MyCustomAction</class-name>
   </partitioned-quorum-policy-scheme>
   <autostart>true</autostart>
</distributed-scheme>

代替案として、ファクトリ・クラスでカスタム・アクション・ポリシー・インスタンスを作成できます。ファクトリ・クラスを定義するには、<class-factory-name>要素を使用して、完全修飾クラス名と<method-name>要素を入力し、オブジェクトのインスタンス化を実行するファクトリ・クラス上で静的なファクトリ・メソッドの名前を指定します。次に例を示します。

<distributed-scheme>
   <scheme-name>partitioned-cache-with-quorum</scheme-name>
   <service-name>PartitionedCacheWithQuorum</service-name>
   <backing-map-scheme>
     <local-scheme/>
   </backing-map-scheme>
   <partitioned-quorum-policy-scheme>
      <class-factory-name>package.Myfactory</class-factory-name>
      <method-name>createPolicy</method-name>
   </partitioned-quorum-policy-scheme>
   <autostart>true</autostart>
</distributed-scheme>