この章では、クラスタの設定に伴う一般的なタスクを実行する方法を説明します。
この章の内容は次のとおりです。
Coherenceには、デフォルトのまま、デモの目的で使用できるクラスタ構成が用意されています。これを使用すると、クラスタを容易に作成でき、ほとんどの場合、構成を変更する必要はなく、あるとしてもわずかです。一方、デモを目的としていない場合は、デフォルトの設定を使用しないことをお薦めします。その場合は、クラスタを実行するネットワーク環境とクラスタを使用するアプリケーションの要件に基づいて、独自のクラスタを設定します。ユニットのテストおよび重要度が低い開発で使用するのであれば、単一サーバー・モードで動作するクラスタを構成してもかまいません。
クラスタの設定では、少なくともクラスタの名前およびクラスタのマルチキャスト・アドレスを定義する必要があります。マルチキャストが望ましくない環境や使用できない環境では、Well Knownアドレス(WKA)機能の設定が必要になります。以降のこの章で説明するタスクは、クラスタを設定する場合に使用するものであり、デフォルトの設定を変更する必要がある場合には、このすべてのタスクを実行する必要があります。
クラスタは、オペレーション・オーバーライド・ファイル(tangosol-coherence-override.xml
)の中で設定します。各クラスタ・メンバーはオーバーライド・ファイルを使用して、オペレーション・デプロイメント・ディスクリプタで定義されているデフォルトの構成をオーバーライドする固有の値を指定します。オペレーション・オーバーライド・ファイルの使用方法の詳細は、「オペレーション構成ファイルの指定」を参照してください。また、この章で取り上げているすべてのオペレーション要素の説明と使用方法は、付録A「オペレーション構成要素」を参照してください。
クラスタ名は、ネットワークの中で各クラスタを一意に識別するユーザー定義の名前です。複数のクラスタ・メンバーが参加してクラスタを構成するには、同じクラスタ名を指定する必要があります。既存のクラスタにクラスタ・メンバーとして参加するときに、誤ったクラスタ名を指定すると、そのクラスタ・メンバーは起動できません。同じネットワークに複数の異なるクラスタを作成するには、一意のマルチキャスト・ポートを使用して、一意のクラスタ名を使用することが普通です。
注意: クラスタ名を明示的に指定していない場合、クラスタ・メンバーではシステムで生成されたクラスタ名が使用されます。システム生成の名前(および何も設定していない状態でのマルチキャストのデフォルト設定)を使用すると、ネットワーク上でクラスタ構成が重複する可能性が高くなります。その結果、予期しないクラスタにクラスタ・メンバーが誤って参加することがあります。 |
クラスタ名を指定するには、オペレーション・オーバーライド・ファイルを編集して、クラスタ名を記述した<cluster-name>
要素を<member-identity>
要素に追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <member-identity> <cluster-name system-property="tangosol.coherence.cluster">MyCluster </cluster-name> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.cluster
システム・プロパティを使用してクラスタ名を指定できます。例:
-Dtangosol.coherence.cluster=name
クラスタの中でクラスタ・メンバーに識別情報を指定するには、一連の識別子を使用します。この識別情報を使用して、クラスタの中でクラスタ・メンバーを区別し、メンバーのロールを扱います。クラスタのタスクを実行するときにクラスタ・サービスで使用する識別子もあります。最後に、この識別情報は管理情報(JMXなど)を表示する際に便利であり、識別情報を使用することでログのエントリの解釈も容易になります。次に各識別子を示します。
サイト名: クラスタ・メンバーをホストする地理的なサイトの名前。名前の指定がない場合は、サーバーのドメイン名が使用されます。WANによるクラスタ化では、メンバーが配置されるデータセンターをこの値で特定します。またこの値は、高度なルーティング、ロード・バランシングおよび障害時リカバリ計画(地理的に別のサイトにあるデータの明示的なバックアップ)の基盤として使用できます。
ラック名: クラスタ・メンバーをホストする地理的サイトでの場所の名前。この値は多くの場合、ケージ、ラックまたはブレードフレームの識別子であり、高度なルーティング、ロード・バランシングおよび障害時リカバリ計画(別のブレードフレームにあるデータの明示的なバックアップ)の基盤として使用できます。
マシン名: クラスタ・メンバーをホストするサーバーの名前。名前の指定がない場合は、サーバーのホスト名が使用されます。この名前は、IDを作成する際の基礎として使用されます。クラスタ・サービスでは、データが別のコンピュータにバックアップされていることをこのIDを使用して確認し、単一障害点の発生を防止します。
プロセス名: クラスタ・メンバーをホストするJVMプロセスの名前。名前の指定がない場合は、JVMプロセス番号が使用されます。プロセス名を使用すると、同じコンピュータで稼動している複数のJVMを容易に区別できます。
メンバー名: クラスタ・メンバーの一意な名前。この名前を使用すると、特に同じコンピュータや同じJVMで稼動している複数のクラスタ・メンバーを容易に区別できます。メンバー名の指定が必要ない場合でも、(ベスト・プラクティスとして)必ずメンバー名を指定することをお薦めします。
ロール名: クラスタでクラスタ・メンバーが持っているロール。ロール名を使用すると、クラスタ・メンバーをキャッシュ・サーバーやキャッシュ・クライアントなどの専門のロールにアプリケーションで整理できます。名前の指定がない場合は、デフォルトのロール名(キャッシュ・サーバーの場合はCoherenceServer
、キャッシュ・クライアントの場合はapplication_class_name
)が使用されます。
メンバーの識別情報を指定するには、オペレーション・オーバーライド・ファイルを編集して、次に示すように<member-identity>
要素にメンバーの識別情報要素を追加します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <member-identity> <site-name system-property="tangosol.coherence.site">pa-1</site-name> <rack-name system-property="tangosol.coherence.rack">100A</rack-name> <machine-name system-property="tangosol.coherence.machine">prod001 </machine-name> <process-name system-property="tangosol.coherence.process">JVM1 </process-name> <member-name system-property="tangosol.coherence.member">C1</member-name> <role-name system-property="tangosol.coherence.role">Server</role-name> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、次のシステム・プロパティを使用してクラスタ・メンバーの識別情報を指定できます。
-Dtangosol.coherence.site=pa-1 -Dtangosol.coherence.rack=100A -Dtangosol.coherence.machine=prod001 -Dtangosol.coherence.process=JVM1 -Dtangosol.coherence.member=C1 -Dtangosol.coherence.role=Server
クラスタ・メンバーは、他のクラスタ・メンバーを検出するときおよびクラスタに属する複数のメンバーにメッセージを伝達するときにマルチキャスト通信を使用します。マルチキャスト・ストームなどが発生しないように、マルチキャストはクラスタのプロトコルによってきわめて慎重に使用されます。デフォルトでは、全クラスタ・メンバーの25%を超えるメンバーにデータを転送する場合にのみ、マルチキャストが使用されます。マルチキャストが有効になっていても、トラフィックの大半はユニキャストを使用して転送されます。一般的なパーティション化したキャッシュを基本とするクラスタでは、ほとんどの転送はPoint-to-Pointであり、クラスタのメンバーシップとパーティションの所有権のみがクラスタ全体にブロードキャストされます。
マルチキャスト通信は、<multicast-listener>
ノードのオペレーション・オーバーライド・ファイルの中で構成します。クラスタ・メンバーを起動するときにマルチキャスト通信を構成するためのシステム・プロパティも多数用意されています。
この項の内容は次のとおりです。
クラスタ・メンバーにはマルチキャスト・アドレス(IPアドレスとポート)を指定できます。複数のクラスタ・メンバーが参加してクラスタを構成するには、それぞれが同じマルチキャスト・アドレスとポートを使用する必要があります。同じネットワーク上で互いに独立している複数のクラスタは、それぞれ異なるマルチキャスト・アドレスを使用する必要があります。
マルチキャスト・アドレスを明示的に指定していない場合、クラスタ・メンバーではデフォルトのマルチキャスト・アドレスが使用されます。このデフォルト値はリリース・バージョンによって異なり、アドレスは{build}.{major version}.{minor version}.{patch}
、ポートは{major version}.{minor version}.{patch}
という表記規則にそれぞれ従います。
注意: デフォルトのマルチキャスト・アドレスとポート(およびシステムで生成されたクラスタ名)を使用すると、ネットワーク上でクラスタ構成が重複する可能性が高くなります。その結果、予期しないクラスタにクラスタ・メンバーが誤って参加することがあります。必ず一意のポート値を使用して個々のクラスタを作成します。 |
クラスタのマルチキャスト・アドレスを指定するには、オペレーション・オーバーライド・ファイルを編集して<address>
要素と<port>
要素の両方を追加し、クラスタ・メンバーが使用するアドレスとポートを指定します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <multicast-listener> <address system-property="tangosol.coherence.clusteraddress">224.3.6.0 </address> <port system-property="tangosol.coherence.clusterport">3059</port> </multicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、システム・プロパティであるtangosol.coherence.clusteraddress
とtangosol.coherence.clusterport
を使用してクラスタのマルチキャスト・アドレスを指定できます。例:
-Dtangosol.coherence.clusteraddress=224.3.6.0 -Dtangosol.coherence.clusterport=3059
マルチキャスト・ソケットは、ユニキャスト・リスナーと同じIPアドレスのネットワーク・インタフェース(NIC)にバインドされます。これと異なるNICをマルチキャストに構成することはできますが、クラスタの部分的な障害を引き起こす可能性があることから、ごくわずかな例外を除いてお薦めできません。
NICが2つある場合、マルチキャスト・トラフィックに使用するインタフェース(およびそれに伴うネットワーク)は、ユニキャスト(UDP/IP)トラフィックとTCPリング(TCP/IP)トラフィックに使用するインタフェース(およびそれに伴うネットワーク)とは別になります。このシナリオでは、一方のインタフェース(ネットワーク)に障害が発生しても、もう一方のインタフェースでは通信を正常に継続しているので、障害検出とフェイルオーバーが機能しません。クラスタ・プロトコルではメンバー(およびそれに付随するインタフェース)の障害を扱うので、障害が発生したメンバーを迅速に検出してクラスタから除外できるように、すべての通信が障害状態になるようにする方が有利です。
デフォルトのマルチキャスト・ネットワーク・インタフェースを変更するには、オペレーション・オーバーライド・ファイルを編集して、マルチキャスト・ソケットのバインド先とするIPアドレスを指定した<interface>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <multicast-listener> <interface>192.168.0.1</interface> </multicast-listener> </cluster-config> </coherence>
ネットワーク環境によっては、マルチキャスト・トラフィックが望ましくない場合や許可されない場合があり得ます。その場合はWell Knownアドレス機能を使用して、Coherenceでマルチキャストが使用されないようにします。これによってマルチキャスト検出が無効になり、同時にすべてのデータ転送に対してマルチキャストが無効になります。かわりにユニキャスト(Point-to-Point)が使用されます。Coherenceは可能なかぎりPoint-to-Point通信を使用するように設計されているため、大半のアプリケーション・プロファイルでは、パフォーマンスに対する実質的な影響はありません。「Well Knownアドレスの使用方法」を参照してください。
注意: マルチキャストを無効にすると、ネットワークに対する負荷が大きくなります。しかし、これが問題になるのは、メンバー数が100を超える大規模なクラスタのみです。 |
有効時間(TTL)値の設定は、ネットワーク上でマルチキャストのUDP/IPパケットを伝送できる最大距離を指定するものです。TTLは、パケットが存続するホップ数で表されます。各ネットワーク・インタフェース、ルーターおよびマネージド・スイッチが1ホップと見なされます。
TTL値には、機能するうえで必要な最小の整数値を指定します。過剰に大きい値を設定すると、他のLANセグメントに不必要に大きい帯域幅が使用される可能性があり、オペレーティング・システムやネットワーク・デバイスでマルチキャスト・トラフィックが無効になることさえあります。一般的に、シンプルなスイッチ構成のバックボーンでは、TTL値を1
に設定すれば問題ありません。インテリジェントなスイッチを備えた高度なバックボーンでは、2
以上の値が必要になることがあります。値0
は、開発やテストに使用するシングル・サーバー・クラスタで使用します。シングル・サーバー・クラスタの詳細は、「単一サーバー・モードの有効化」を参照してください。
TTLを指定するには、オペレーション・オーバーライド・ファイルを編集して、TTL値を指定した<time-to-live>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <multicast-listener> <time-to-live system-property="tangosol.coherence.ttl">3</time-to-live> </multicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.ttl
システム・プロパティを使用してTTL値を指定できます。例:
-Dtangosol.coherence.ttl=3
マルチキャストの参加タイムアウトは、クラスタへの参加をクラスタ・メンバーが待機する時間を定義します。このタイムアウトが経過しても既存のクラスタが検出されない場合、そのクラスタ・メンバーは独自にクラスタを起動し、自身がそのクラスタの上位クラスタ・メンバーになります。開発やテストでは、短いタイムアウトを指定してもかまいません。本番環境では一般的に30秒のタイムアウトで十分です。
注意: クラスタの最初のメンバーは、参加タイムアウトの全期間を待機してから、上位メンバーのロールが必要であると見なします。クラスタの起動タイムアウトが参加タイムアウトよりも短いと、クラスタが起動している間にそのクラスタの最初のメンバーは動作を停止します。クラスタ・メンバーのタイムアウトは、パケット・パブリッシャのタイムアウトを使用して指定します(<timeout-milliseconds> )。「packet-delivery」を参照してください。 |
参加タイムアウトを指定するには、オペレーション・オーバーライド・ファイルを編集して、タイムアウト値を指定した<join-timeout-milliseconds>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <multicast-listener> <join-timeout-milliseconds>6000</join-timeout-milliseconds> </multicast-listener> </cluster-config> </coherence>
クラスタ・メンバーは、クラスタのパケットの送信でマルチキャスト通信とユニキャスト通信の両方を使用します。マルチキャストのしきい値を使用して、パケットの配信にマルチキャストを使用するかユニキャストを使用するかを判断します。このしきい値に大きい値または小さい値を設定することで、クラスタではどちらか一方の通信スタイルが頻繁に使用されるようになります。マルチキャスト通信を無効にすると、このしきい値設定は使用されません。
マルチキャストのしきい値は、1 - 100%の範囲の比率で指定します。n
個のメンバーで構成するクラスタでは、d
個(範囲は0
- n
-1
)のノードにパケットを送信するクラスタ・メンバー(dにこのクラスタ自身は算入しません)は、次の条件が成立する場合にのみ、マルチキャストを使用してパケットを送信します。
ネットワークを介して複数のノード(d
> 1
)にパケットを送信する。
そのノードの数が、指定のしきい値よりも大きい(d
> (
n
-1) * (
しきい値
/100)
)。
たとえば、マルチキャストのしきい値が25%でメンバーが25個のクラスタの場合、そのクラスタ・メンバーではパケットの送信先メンバーが6個以上の場合にのみ、マルチキャストを使用します(24 * .25 = 6
)。
この値を1
に設定すると、クラスタでは基本的にすべてのマルチポイントトラフィックにマルチキャストを使用できます。この値を100
に設定すると、クラスタでは、明示的なブロードキャスト・トラフィック(クラスタのハートビートやクラスタの検出など)を除いてすべてのマルチポイント・トラフィックにユニキャストが使用されます。これは、100%のしきい値を超過することはあり得ないからです。25
(デフォルト値)に設定すると、パケットの送信先が全ノードの1/4未満であれば、クラスタ・メンバーは送信にユニキャストを使用します。パケットの送信先が全ノードの1/4以上であれば、マルチキャストを使用して送信します。
マルチキャストのしきい値を指定するには、オペレーション・オーバーライド・ファイルを編集して、しきい値を指定した<multicast-threshold-percent>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <multicast-listener> <multicast-threshold-percent>40</multicast-threshold-percent> </multicast-listener> </cluster-config> </coherence>
クラスタ・メンバーは、クラスタでの通信の大半を占めるメンバー間(Point-to-Point)の直接通信ではユニキャストを使用します。デフォルトのユニキャスト・アドレス(IPアドレスとポート)が使用されますが、必要に応じて<unicast-listener>
要素でユニキャスト・アドレスを指定することもできます。
あらかじめ構成済のユニキャスト・リスナーでは、次のようにユニキャスト・アドレスを選択します。
アドレス: クラスタ・メンバーは、java.net.InetAddress.getLocalHost()
のコールを使用してバインド先のIPアドレスを取得しようとします。複数のIPやNICを持つコンピュータでは、必要に応じてアドレスを明示的に指定します。また、localhostをループバック・アドレスとして定義しているシステムではlocalhost設定が機能しないことがあります。その場合は、コンピュータ名または固有のIPアドレスを指定する必要があります。マルチキャスト・ソケットは、ここで定義したアドレスを持つインタフェースにバインドします。「マルチキャスト・ソケット・インタフェースの変更」を参照してください。
ポート: クラスタ・メンバーは2つのユニキャストUDPポートを使用します。デフォルトの動作では、1番目のポート(port1
)としてポート8088の使用を試みます。ポート8088が使用できない場合は、自動ポート調整を使用して、次に使用可能なポートを選択します。2番目のポート(port2
)が自動的に開き、デフォルトでport1
の次に使用可能なポート(使用可能であれば、port1
+ 1
)として設定されます。自動ポート調整は無効化できます。この場合は、port1
が使用可能であることが必要で、2番目のポートは必ずport1
+ 1
になります。
2つのUDPポートを使用する理由は次のとおりです。
インバウンド・トラフィックとアウトバウンド・トラフィック間の競合を削減し、両方での大量の転送を回避して、同じポートで受信する。
コヒーレンスなメンバー間では、オペレーティング・システムのMTU (Maximum Transmission Unit)に基づく最適なパケット・サイズでの通信が可能になる。サイズが大きなパケットに一方のUDPを使用し、サイズがネットワークのMTU以下であるパケットにはもう一方のポートを使用します。この分離によって、サイズに基づいて別個のパケット・バッファを使用できます。
ソケット・バッファの表面的なサイズを増やさずに、メンバー数が500を超える大規模なクラスタを実行できる。
クラスタ・メンバーのユニキャスト・アドレスを指定するには、オペレーション・オーバーライド・ファイルを編集して、<address>
要素と<port>
要素の両方(さらに、必要に応じて<port-auto-adjust>
要素)を追加し、クラスタ・メンバーが使用するアドレスとポートを指定します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <address system-property="tangosol.coherence.localhost">192.168.0.1 </address> <port system-property="tangosol.coherence.localport">8090</port> <port-auto-adjust system-property="tangosol.coherence.localport.adjust"> true </port-auto-adjust> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.localhost
、tangosol.coherence.localport
およびtangosol.coherence.localport.adjust
の各システム・プロパティを使用してユニキャスト・アドレスを指定できます。例:
-Dtangosol.coherence.localhost=192.168.0.1 -Dtangosol.coherence.localport=8090 -Dtangosol.coherence.localport.adjust=true
Well Knownアドレス(WKA)機能は、クラスタ・メンバーがマルチキャストのかわりにユニキャストを使用してクラスタを検出し、それに参加できるようにするメカニズムです。マルチキャスト・ネットワーキングが望ましくないか使用できない環境やマルチキャストを適切にサポートするように構成されていない環境でWKAを使用することが普通です。WKAを有効にすると、すべてのクラスタでマルチキャスト通信が無効になります。
クラスタを起動できる少数のクラスタ・メンバー(これをWKAメンバーといいます)を指定することでWKAが有効になります。WKAメンバーの最適な数はクラスタのサイズで異なります。一般的には、WKAメンバーの数はクラスタの10%程度にします。スイッチごとのWKAメンバーを1つか2つにすることをお薦めします。
各WKAメンバーは、クラスタの稼動中は利用可能な状態を維持している必要がありますが、どの時点でも同時にアクティブになっている必要はありません。クラスタ・メンバーがクラスタを検出してそこに参加するためには、WKAメンバーが1つのみ稼動可能になっている必要があります。さらに、クラスタに参加したクラスタ・メンバーは、すべてのクラスタ・メンバーのアドレスの通知を受け、各クラスタ・メンバーに個別にメッセージを送信することでブロードキャストを実行します。これにより、すべてのWKAメンバーが動作を停止しても、クラスタは稼動できます。ただし、このクラスタに新しいクラスタ・メンバーは参加できません。参加できるためには、そのクラスタ・メンバー自身がWKAメンバーになるか、いずれかのWKAメンバーが起動する必要があります。この場合は、クラスタの最上位メンバーがWKAメンバーのリストをポーリングし、そのWKAメンバーが既存のクラスタに再度参加できるようにします。
WKAメンバーを指定する方法は2つあります。まず、アドレスのリストを明示的に定義する方法があります。もう1つは、アドレス・プロバイダの実装を使用してWKAアドレスのリストを取得する方法です。どちらの方法も、オペレーション・オーバーライド・ファイルの中で<unicast-listener>
要素の<well-known-addresses>
サブ要素で構成します。
この項の内容は次のとおりです。
<socket-address>
要素の中でWKAメンバーを明示的に指定します。任意の数の<socket-address>
要素を定義できますが、それぞれの要素では、<address>
要素と<port>
要素を使用してWKAメンバーのアドレスとポートの両方を定義する必要があります。独自のアドレスを指定したクラスタ・メンバーがあれば、そのクラスタ・メンバーは起動時にWKAメンバーになります。様々なクラスタ・メンバーが他のクラスタ・メンバーとは無関係に稼動することがないように、すべてのクラスタ・メンバーに対してWKAメンバーのリストは同一であることが必要です。次の例では2つのWKAメンバーを指定しています。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <well-known-addresses> <socket-address id="1"> <address>192.168.0.100</address> <port>8088</port> </socket-address> <socket-address id="2"> <address>192.168.0.101</address> <port>8088</port> </socket-address> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
注意: WKAメンバーを設定する際は、そのポート値と、そのメンバーのユニキャスト・リスナー・ポートに対して指定したポート値とが一致している必要があります。ユニキャスト・ポートの設定の詳細は、「クラスタ・メンバーのユニキャスト・アドレスの指定」を参照してください。 |
WKAシステム・プロパティの使用方法
オペレーション・オーバーライド・ファイルでアドレスを指定するかわりに、システム・プロパティであるtangosol.coherence.wka
とtangosol.coherence.wka.port
を使用して単独のWKAメンバーを指定できます。これらのシステム・プロパティは、デモやテストのシナリオで単独のWKAメンバーを簡単に指定できるようにすることを目的としたものです。例:
-Dtangosol.coherence.wka=192.168.0.100 -Dtangosol.coherence.wka.port=8088
複数のWKAメンバーのアドレスを指定するシステム・プロパティを別途作成するには、オペレーション・オーバーライド・ファイルを使用して複数のWKAメンバーのアドレスを定義し、WKAメンバーのアドレス要素ごとにsystem-property
属性を定義する必要があります。この属性には、目的の要素をオーバーライドするために使用するシステム・プロパティ名を指定する必要があります。次の例では、システム・プロパティを指定した2つのアドレスを定義しています。
注意: WKAメンバーのリストを指定する追加のシステム・プロパティは、テストの際または管理された本番環境で定義できます。ただし、ベスト・プラクティスは、オペレーション・オーバーライド・ファイルを重点的に使用して本番環境でWKAメンバーを指定することです。これにより、すべてのクラスタ・メンバーに対して同じWKAメンバーのリストが存在するようになります。 |
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <well-known-addresses> <socket-address id="1"> <address system-property="tangosol.coherence.wka"></address> <port system-property="tangosol.coherence.wka.port"></port> </socket-address> <socket-address id="2"> <address system-property="tangosol.coherence.wka2"></address> <port system-property="tangosol.coherence.wka2.port"></port> </socket-address> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
前述の例では、次のようにシステム・プロパティを使用してWKAメンバーのアドレスを指定しています。
-Dtangosol.coherence.wka=192.168.0.102 -Dtangosol.coherence.wka.port=8090 -Dtangosol.coherence.wka2=192.168.0.103 -Dtangosol.coherence.wka2.port=8094
システム・プロパティの定義の詳細は、「カスタム・システム・プロパティの作成」を参照してください。
WKAアドレス・プロバイダは、プログラムでWKAメンバーを定義する方法を実現します。WKAアドレス・プロバイダはcom.tangosol.net.AddressProvider
インタフェースを実装する必要があります。静的リストのような簡素な実装から、動的な検出プロトコルを使用するような複雑な実装まで可能です。このアドレス・プロバイダは、存在するすべてのアドレスを返したことを示す終端NULL
アドレスを返す必要があります。クラスタ・メンバーが起動するときに、このアドレス・プロバイダ実装がコールされます。
注意: 返された例外や処理されない例外によって遅延が発生すると、検出の遅延の原因となり、その結果、メンバーに対するクラスタ・サービスが全面的にシャットダウンすることがあります。したがって、実装では細心の注意が必要です。負荷の大きい操作(ネットワーク・フェッチなど)が関わる実装では、com.tangosol.net.RefreshableAddressProvider クラスを拡張することによって、そのような操作を非同期で処理できます。 |
WKAアドレス・プロバイダの実装を使用するには、<address-provider>
要素を追加し、<class-name>
要素の中で実装クラスの完全修飾名を指定します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <well-known-addresses> <address-provider> <class-name>package.MyAddressProvider</class-name> </address-provider> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
<address-provider>
要素で<class-factory-name>
要素および<method-name>
要素を使用することもできます。前者の要素は、AddressProvider
インスタンスを作成するためのファクトリ・クラスを指定します。後者の要素は、オブジェクトをインスタンス化するファクトリ・クラスに対して静的ファクトリ・メソッドを指定します。次の例では、MyAddressProviderFactory
クラスでgetAddressProvider
メソッドを使用してアドレス・プロバイダのインスタンスを取得します。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <well-known-addresses> <address-provider> <class-factory-name>package.MyAddressProviderFactory </class-factory-name> <method-name>getAddressProvider</method-name> </address-provider> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
クラスやクラス・ファクトリの実装に必要な初期化パラメータはすべて、<init-params>
要素を指定して指定できます。初期化パラメータへのアクセスは、com.tangosol.run.xml.XmlConfigurable
インタフェースをサポートする実装または一致するシグネチャを持つpublicなコンストラクタを記述する実装によって可能です。次の例では、iMaxTime
パラメータが2000
に設定されます。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <well-known-addresses> <address-provider> <class-name>package.MyAddressProvider</class-name> <init-params> <init-param> <param-name>iMaxTime</param-name> <param-value>2000</param-value> </init-param> </init-params> </address-provider> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
単一サーバー・モードは、1台のコンピュータ上でのみ実行するように制限され、ネットワークにはアクセスしないクラスタです。クラスタを容易に起動および停止できることから、単一サーバー・モードは開発やユニット・テストで使用します。
単一サーバー・モードを有効にするには、オペレーション・オーバーライド・ファイルを編集して、0
に設定した<time-to-live>
要素と、ループバックにルーティングするアドレスに設定したユニキャスト<address>
要素を追加します。ほとんどのコンピュータでは、このアドレスを127.0.0.1
に設定すれば問題ありません。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <address system-property="tangosol.coherence.localhost">127.0.0.1 </address> </unicast-listener> <multicast-listener> <time-to-live system-property="tangosol.coherence.ttl">0</time-to-live> </multicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、システム・プロパティであるtangosol.coherence.ttl
とtangosol.coherence.localhost
を使用して単一サーバー・モードを有効化できます。例:
-Dtangosol.coherence.ttl=0 -Dtangosol.coherence.localhost=127.0.0.1
UNIXオペレーティング・システムのいくつか(一部のバージョンのLinuxを含む)およびMac OS Xでは、TTLをゼロに設定するのみではクラスタを単独のコンピュータとして完全には分離できません。このような場合は、電子メール・アドレスなどの一意なクラスタ名も構成する必要があります。既存のクラスタ名と異なるクラスタ名を使用しているクラスタ・メンバーは、その既存のクラスタには参加できません。クラスタ名の構成の詳細は、「クラスタの名前の指定」を参照してください。
停止検出は、クラスタ・メンバーに発生した障害を迅速に検出するためのクラスタ・メカニズムです。障害が発生したクラスタ・メンバーはクラスタから除外され、他のすべてのクラスタ・メンバーには離脱したメンバーについての通知が送信されます。検出停止を使用することで、実際に障害が発生したメンバーと応答しなくなっているメンバーとを区別できます。たとえば、JVMが完全なガベージ・コレクションを実行しているときは、メンバーが応答しなくなります。
停止検出は、すべてのクラスタ・メンバーの間にTCP接続のリングを作成することで機能します。クラスタのUDP通信に使用するポートと同じポートにTCP通信が送信されます。各クラスタ・メンバーはユニキャストのハートビートを発行し、最も上位のクラスタ・メンバーは、ブロードキャスト・メッセージとなるクラスタ・ハートビートを発行します。各クラスタ・メンバーは、TCP接続を使用して、ハートビートとハートビートの間で他のノードのプロセス停止(TcpRingコンポーネント)とハードウェア停止(IpMonitorコンポーネント)の両方を検出します。停止検出はデフォルトで有効になっていますが、<tcp-ring-listener>
要素で構成できます。
この項の内容は次のとおりです。
TCPリング・リスナーのデフォルトの動作を変更するために使用する設定がいくつかあります。これには、クラスタ・メンバーをホストしているコンピュータが到達不可能になっていると判断するまでの試行回数と時間の変更などがあります。これらのデフォルトの設定はそれぞれ3回と15秒です。TCP/IPソケットのバックログ・キューも設定可能で、デフォルトではオペレーティング・システムで使用する値が設定されています。
TCPリング設定を変更するには、オペレーション・オーバーライド・ファイルを編集して、次のTCPリング要素を追加します。
注意: <ip-timeout> および<ip-attempts> の要素の値は、許容できる一時的なネットワークの停止に影響を与えないだけの大きな値にする必要があります。 |
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <tcp-ring-listener> <ip-timeout system-property="tangosol.coherence.ipmonitor.pingtimeout"> 25s </ip-timeout> <ip-attempts>5</ip-attempts> <listen-backlog>10</listen-backlog> </tcp-ring-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.ipmonitor.pingtimeout
システム・プロパティを使用してタイムアウトを指定できます。例:
-Dtangosol.coherence.ipmonitor.pingtimeout=20s
停止検出のハートビート間隔を変更できます。この間隔を長くすると、最低限必要なネットワーク・トラフィックを小さく抑えることができますが、障害が発生したメンバーを検出できなくなることがあります。デフォルトのハートビート値は1秒です。
注意: ハートビート設定とは、ハートビートの発行が必要かどうかを評価する頻度を技術的に制御するものです。指定した間隔の中で実際にハートビートが発行されるかどうかは、評価プロセスによって変化します。 |
停止検出のハートビート間隔を変更するには、オペレーション・オーバーライド・ファイルを編集して、ハートビート値を指定した<heartbeat-milliseconds>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <packet-publisher> <packet-delivery> <heartbeat-milliseconds>5000</heartbeat-milliseconds> </packet-delivery> </packet-publisher> </cluster-config> </coherence>
停止検出はデフォルトで有効になっているので、無効にするには明示的な指定が必要です。停止検出を無効にしても、最低限必要なネットワーク・トラフィックを小さく抑えることができるのみであり、その一方で障害が発生したメンバーを検出できなくなることがあります。無効にすると、クラスタ・メンバーはパケット・パブリッシャの再送信タイムアウト間隔を使用して、他のメンバーがUDPパケットへの応答を停止していることを判断します。デフォルトでは、このタイムアウト間隔は5分に設定されています。詳細は「パケットの再送信タイムアウトの変更」を参照してください。
注意: パケット・パブリッシャの再送信タイムアウトを使用して、障害が発生したクラスタ・メンバーを検出する方法は、エラーが発生しやすく、ガベージ・コレクションの実行時間が長くなることから誤検出を招くことがあります。したがって、この方法は一般的にはお薦めできません。 |
停止検出を無効にするには、オペレーション・オーバーライド・ファイルを編集して、false
に設定した<enabled>
要素を追加します。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <tcp-ring-listener> <enabled>false</enabled> </tcp-ring-listener> </cluster-config> </coherence>
クラスタの優先順位のメカニズムを使用すると、クラスタ・メンバーおよびメンバーの中で実行している様々なスレッドに優先順位の値を割り当てることができます。
この項の内容は次のとおりです。
クラスタ・メンバーの優先順位は、同等の複数のメンバーに対する様々な処理の順番を指定するための基礎として使用します。2つのメンバーのどちらかをクラスタから除外することが必要になった場合に、そのどちらに障害が発生していて排除すべきかを客観的に判断できないまれな条件下では、優先度の低いメンバーが除外されます。
クラスタ・メンバーの優先順位を指定するには、オペレーション・オーバーライド・ファイルを編集して、優先順位を指定した<priority>
要素を<member-identity>
ノードに追加します。優先順位は1 - 10の範囲の値で指定し、1を指定すると優先順位が最も高くなります。例:
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <member-identity> <priority system-property="tangosol.coherence.priority">1</priority> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、tangosol.coherence.priority
システム・プロパティを使用してクラスタ・メンバーの優先順位を指定できます。例:
-Dtangosol.coherence.priority=1
スレッドの優先順位をサポートするクラスタ・コンポーネントがいくつかあります。この優先順位は、Javaスレッドの実行の重要度を判断するための基礎として使用します。このコンポーネントとして、マルチキャスト・リスナー、ユニキャスト・リスナー、TCPリング・リスナー、パケット・スピーカー、パケット・パブリッシャおよび受信メッセージ・ハンドラがあります。デフォルトの優先順位設定では、パケット・パブリッシャの優先順位が最も高く、次の順位が受信メッセージ・ハンドラで、残りのコンポーネントがこれに続きます。
スレッドの優先順位は、それぞれのコンポーネントの構成要素の中で指定します(それぞれ、<unicast-listener>
、<multicast-listener>
、<packet-speaker>
、<packet-publisher>
、<tcp-ring-listener>
および<incoming-message-handler>
の各要素)。たとえば、ユニキャスト・リスナーに対してスレッドの優先順位を指定するには、オペレーション・オーバーライド・ファイルを編集して、優先順位を指定した<priority>
要素を<unicast-listener>
ノードに追加します。優先順位は1 - 10の範囲の値で指定し、1を指定すると優先順位が最も高くなります。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <unicast-listener> <priority>5</priority> </unicast-listener> </cluster-config> </coherence>