5 Coherenceクラスタの概要
この章の内容は次のとおりです。
- クラスタの概要
Coherenceクラスタは、Coherenceを実行するJVMプロセスのネットワークです。JVMは、自動的に結合されてクラスタを形成し、クラスタ・メンバーまたはクラスタ・ノードと呼ばれます。 - クラスタ化されたサービスの理解
Coherenceの機能はサービスの概念に基づいています。各クラスタ・メンバーは、サービスを登録、提供および利用できます。 - TCMPの理解
TCMPは、クラスタ・メンバーの検出、クラスタの管理、サービスのプロビジョニングおよびデータの伝送に使用する、IPベースのプロトコルです。
親トピック: Coherenceクラスタの使用
クラスタの概要
クラスタには、そのクラスタのすべてのメンバーで共有するサービスがあります。このサービスの例として、接続サービス(ルート・クラスタ・サービスなど)、キャッシュ・サービス(分散キャッシュ・サービス)、処理サービス(呼出しサービスなど)があります。各クラスタ・メンバーでは、このようなサービスの提供や利用が可能です。クラスタの最初のメンバーは上位メンバーと呼ばれ、多くの場合は、そのクラスタの作成に必要なコア・サービスを開始します。クラスタの上位メンバーがシャットダウンした場合は、他のいずれかのクラスタ・メンバーが上位メンバーの役割を引き受けることが前提となっています。
親トピック: Coherenceクラスタの概要
クラスタ化されたサービスの理解
サービスは、機能に基づいて次のカテゴリに分類されます。カテゴリは明確化のために使用されているもので、実際のコンポーネントやサービス間の関係を示すものではありません。
接続サービス
-
クラスタ・サービス: クラスタ・ノードがクラスタに参加する必要がある場合に自動的に起動され、多くの場合ルート・クラスタ・サービスと呼ばれます。各クラスタ・ノードでは、常にこのタイプのサービスが1つのみ実行されます。このサービスの役割は、他のクラスタ・ノードの検出、クラスタ・ノードの障害の検出およびクラスタ内の他のサービスの可用性の登録です。
-
プロキシ・サービス: このサービスを使用すると、クラスタの外部で稼動しているクライアントからの接続(TCPを使用)が可能になります。多くのアプリケーションは、すべてのクライアントがクラスタ・メンバーでもあるように構成しますが、クラスタ外部でクライアントを実行することが望ましい場合も少なくありません。数百から数千のクライアント・プロセスが存在する場合、クライアントがJavaプラットフォーム上で稼働していない場合、またはきわめて高度な分離が必要な場合には、リモート・クライアントが特に便利です。
処理サービス
-
起動サービス: このサービスはクラスタ化された起動を提供し、グリッド・コンピューティング・アーキテクチャをサポートします。このサービスを使用すると、クライアントにある任意のノード、ノードの任意のグループ、またはクラスタ全体に対してアプリケーションからエージェントを起動できます。エージェントの起動には、リクエスト/レスポンス方式、fire and forget方式、または非同期のユーザー定義可能な方式を使用できます。
データ・サービス
-
分散型キャッシュ・サービス: このサービスを使用すると、クラスタ・ノードからクラスタ間にデータを分散(パーティション化)できます。これにより、キャッシュにある各データは、1つのクラスタ・ノードでのみ管理(保持)されます。分散キャッシュ・サービスは、ペシミスティック・ロックをサポートしています。また、データ損失のないフェイルオーバーをサポートするために、各データが1つ以上の他のクラスタ・ノードにバックアップされるように、このサービスを構成することも可能です。さらには、一部のクラスタ・ノードのみデータをまったく保持しないように構成することもできます。これは、分散データを保持しないようにアプリケーション・サーバー・プロセスを設定し、追加のキャッシュ・サーバーJVMを実行して分散キャッシュ記憶域を提供することで、アプリケーション・サーバー・プロセスのJavaヒープ・サイズを制限する場合などに有用です。分散キャッシュの理解を参照してください。
-
フェデレーテッド・キャッシュ・サービス: このサービスは、フェデレーションの参加者である、地理的に分散したクラスタ間でキャッシュデータをレプリケートおよび同期する分散キャッシュ・サービスのバージョンです。クラスタ参加者間のレプリケーションは、フェデレーション・トポロジによって制御されます。トポロジには、アクティブ/アクティブ、アクティブ/パッシブ、ハブとスポーク、および集中型のレプリケーションなどがあります。必要に応じて、カスタム・トポロジを作成することもできます。Oracle Coherenceの管理のクラスタ間のキャッシュのフェデレートを参照してください。
-
レプリケート・キャッシュ・サービス: このサービスを実行するすべてのクラスタ・ノードにサービス自身のすべてのデータを完全にレプリケートする、同期化されたレプリケート・キャッシュ・サービスです。レプリケート・キャッシュでは、ペシミスティック・ロックをサポートして、データに変更が発生した場合はすべてのクラスタ・メンバーが更新を受け取れるようにしています。レプリケート・キャッシュは、一般には内部アプリケーション・メタデータの管理に使用します。レプリケート・キャッシュの理解を参照してください。
-
オプティミスティック・キャッシュ・サービス: これは、レプリケート・キャッシュ・サービスのオプティミスティック並行処理バージョンです。サービス自身のすべてのデータをすべてのクラスタ・ノードに完全にレプリケートし、一貫性を維持するためにオプティミスティック・データベース・ロックと同様の最適化を採用しています。同一時刻に様々なサーバーから複数の更新が実行されても、最終的にはすべてのサーバーが同じ現在値になります。オプティミスティック・キャッシュ・サービスはペシミスティック・ロックをサポートしていないため、通常は、最後に認識した値を読取り専用の目的でキャッシュする場合にのみ使用することをお薦めします。このサービスが使用されることはめったにありません。オプティミスティック・キャッシュの理解を参照してください。
クラスタ化サービスでは、サービス・スレッド、コール元のスレッド(可能な場合)、または任意の数のデーモン(ワーカー)・スレッド上のすべてのタスクを実行できます。デーモン・スレッドは、さらに大きな処理帯域幅をサービスに提供する動的なスレッド・プールによって管理されます。たとえば、起動サービスと分散キャッシュ・サービスはどちらもスレッド・プーリングをサポートすることで、データベースのロード処理、パラレル分散問合せ、およびエージェントの起動を加速化します。
前述のサービスは、クラスタ・サービスの基本にすぎず、Coherenceが提供するキャッシュ・タイプのすべてではありません。Coherenceは、クラスタ化サービスをバッキング・マップやオーバーフロー・マップなどのキャッシュ機能と組み合せることにより、きわめて柔軟性が高く、構成可能なオプション・セットをクラスタ化アプリケーションに提供します。
キャッシュ・サービス内には、任意の数の名前付きキャッシュが存在します。名前付きキャッシュは標準のJCache APIを提供します。このAPIは、キーと値のペアを保持するjava.util.Map
というJavaコレクションAPIをベースとしています。
親トピック: Coherenceクラスタの概要
TCMPの理解
クラスタ・サービス通信
クラスタ・サービス通信用のTCMPは、次のものを使用するように構成できます。
-
UDP/IPマルチキャストとUDP/IPユニキャストの組合せ: これは、クラスタ・サービス通信のデフォルト・クラスタ・プロトコルです。
-
UDP/IPユニキャストのみ(マルチキャストなし): マルチキャスト通信の無効化を参照してください。この構成は、マルチキャストをサポートしていないネットワーク環境やオプションによるマルチキャストが構成されていないネットワーク環境で使用します。
-
TCP/IPのみ(UDP/IPマルチキャストもUDP/IPユニキャストもなし): TCPソケット・プロバイダの使用を参照してください。この構成は、TCPを優先するネットワーク環境で使用します。
-
SDP/IPのみ(UDP/IPマルチキャストもUDP/IPユニキャストもなし)。SDPソケット・プロバイダの使用を参照してください。この構成は、SDPを優先するネットワーク環境で使用します。
-
TCP/IPまたはSDP/IPを介したSSL。SSLソケット・プロバイダの使用を参照してください。この構成は、高度なセキュリティで保護した通信をクラスタ・メンバー間で必要とするネットワーク環境で使用します。
データ・サービス通信
データ・サービス通信用のTCMPは、信頼性の高いトランスポートを使用するように構成できます。
-
datagram – TCMPの信頼性の高いUDPプロトコルの使用を指定します。
-
tmb (デフォルト) – TCPメッセージ・バス(TMB)プロトコルを指定します。TMBではTCP/IPのサポートが提供されます。
-
tmbs – SSLサポート付きのTCP/IPメッセージ・バス・プロトコル。TMBSでは、SSLソケット・プロバイダの使用が必要です。SSLソケット・プロバイダの使用を参照してください。
-
sdmb – Sockets Direct Protocol Message Bus (SDMB)を指定します。
-
sdmbs – SSLサポート付きのSDPメッセージ・バス。SDMBSでは、SSLソケット・プロバイダを使用する必要があります。SSLソケット・プロバイダの使用を参照してください。
-
imb (Exalogicでのデフォルト) – InfiniBand Message Bus (IMB)。IMBは、TCMPがSSLで構成されていないかぎり、Exalogicシステムで自動的に使用されます。
マルチキャストの使用
マルチキャストはクラスタのプロトコルによってきわめて慎重に使用され、その使用は最小限に抑えられます。マルチキャストは次のように使用します。
-
クラスタの検出: マルチキャストを使用して、新しいメンバーが参加可能な状態で稼働しているクラスタがあるかどうかを検出します。マルチキャスト・グループに参加するのは、最も上位の2つのクラスタ・メンバーのみです。クラスタを検出するために、追加のクラスタ・メンバーがマルチキャスト・グループに参加する必要はありません。
-
クラスタ・ハートビート: マルチキャストを通じてクラスタの最も古いメンバーからハートビートが定期的に送信されます。その頻度は構成可能で、デフォルトでは1秒間に1回に設定されています。クラスタ・ハート・ビートは、障害が発生したメンバーの検出に使用され、独立して動作する2つのクラスタにクラスタが分割される(スプリット・ブレインと呼ばれます)のを回避できます。
ユニキャストの使用
クラスタ・メンバーは、クラスタでの通信の大半を占めるメンバー間(Point-to-Point)の直接通信ではユニキャストを使用します。ユニキャストは次のように使用します。
-
データ転送: ユニキャストは、共有バス・インスタンス上のサービス・メンバー間のデータ転送に使用されます。
-
メッセージ配信: ユニキャストは、非同期の肯定応答(ACK)、非同期の否定応答(NACK)およびPeer-to-Peerハートビートなどの通信に使用されます。
-
状況によっては、複数のメンバーを対象とするメッセージでも、ユニキャストを通じて送信されることがあります。これは、非常に大きなクラスタでトラフィック・フローを形成したりCPUの負荷を軽減するために実行されます。
-
マルチキャスト通信が無効な場合、すべての通信はユニキャストを使用して送信されます。
TCPの使用
TCPは次のように使用します。
-
TCMPでは、共有TCP/IPメッセージ・バス(TMB)をデータ転送に使用します。
-
TCP/IPリングを追加の停止検出メカニズムとして使用し、実際のノード障害と無応答ノードとを識別します(JVMがフルGCを実行する場合など)。
プロトコルの信頼性
バスベースのトランスポート・プロトコルでは、本質的にメッセージの信頼性がサポートされます。UDPトランスポートの場合、Coherenceでは、あらゆるメッセージについて完全に信頼できるインオーダー配信が可能です。Coherenceでは、キュー型の完全非同期ACKおよびNACKに基づいたメカニズムと、メッセージの確実な順序付けに不可欠な一意のIDを使用して信頼性のあるメッセージ配信を実現しています。
プロトコルのリソースの利用
TCMPプロトコル(デフォルトでの構成)には、クラスタ・サイズに関係なく、JVMごとに3つのソケット(マルチキャスト用に1つとユニキャスト用に2つ)および6つのスレッドのみが必要です。これはCoherenceのスケーラビリティで重要な要素です。これにより、サーバー数に関係なく、クラスタの各ノードで追加のネットワーク接続を必要とせずに、Point-to-Pointによるクラスタ・メンバーとの通信、または一群のクラスタ・メンバーとの通信が可能になります。
オプションのTCP/IPリングでは、TCP/IPソケットをいくつか追加で使用します。
ノート:
TCMP/TMBはポイント・ツー・ポイントのデータ通信で使用されるデフォルト・プロトコルですが、このプロトコルでは、各クラスタ・メンバーが1つのポートにバインドされます。
プロトコルのチューニング性
TCMPプロトコルは非常にチューニング性が高いため、特定のネットワーク・トポロジの利用や、地理的に分散したクラスタにある低帯域幅で長待機時間のセグメントに対する許容差の追加が可能です。Coherenceには出荷時の初期設定の構成があります。TCMP属性の中には、実行時に動的に自己構成できるものがありますが、デプロイ目的でそれらをオーバーライドすることやロックダウンすることも可能です。
親トピック: Coherenceクラスタの概要