この章の内容は次のとおりです。
<multicast-listener>
要素ノード内で構成します。<unicast-listener>
要素ノード内で構成します。親トピック: Coherenceクラスタの使用
クラスタの設定には、クラスタの名前の定義が含まれます。マルチキャストが望ましくない環境や使用できない環境では、Well Knownアドレス(WKA)機能の設定が必要になります。以降のこの章で説明するタスクは、クラスタを設定する場合に使用するものであり、デフォルトの設定を変更する必要がある場合には、このすべてのタスクを実行する必要があります。
クラスタは、オペレーション・オーバーライド・ファイル(tangosol-coherence-override.xml
)の中で設定します。各クラスタ・メンバーはオーバーライド・ファイルを使用して、オペレーション・デプロイメント・ディスクリプタで定義されているデフォルトの構成をオーバーライドする固有の値を指定します。オペレーション構成ファイルの指定およびオペレーション構成の要素を参照してください。
親トピック: クラスタの設定
ノート:
名前が明示的に指定されていない場合、クラスタ名はオペレーティング・システムのユーザー名に基づいて自動的に生成されます。推奨されるベスト・プラクティスは、システムで生成されたクラスタ名を使用しないことです。
クラスタ名を指定するには、オペレーション・オーバーライド・ファイルを編集して、クラスタ名を記述した<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="coherence.cluster">MyCluster </cluster-name> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.cluster
システム・プロパティを使用してクラスタ名を指定できます。たとえば:
-Dcoherence.cluster=name
親トピック: クラスタの設定
サイト名 - クラスタ・メンバーをホストする地理的なサイトの名前。名前が指定されない場合、サーバーのドメイン名が使用されます。WANクラスタリングの場合、この値は、メンバーが存在するデータセンターを識別します。サイト名は、高度なルーティング、ロード・バランシングおよび障害時リカバリ計画(地理的に別のサイトにあるデータの明示的なバックアップ)の基盤として使用できます。サイト名は、分散キャッシングおよびデフォルト・パーティション割当て戦略を使用している場合にデータのバックアップ先を決定するために役立ちます。最後に、この名前は、管理情報(たとえば、JMX)の表示およびログ・エントリの解釈にも有用です。
ラック名 - メンバーがホストされている地理的サイト内の場所の名前。多くの場合、ケージ、ラックまたはブレードフレームの識別子です。ラック名は、高度なルーティング、ロード・バランシングおよび障害時リカバリ計画(別のブレードフレームにあるデータの明示的なバックアップ)の基盤として使用できます。ラック名は、分散キャッシングおよびデフォルト・パーティション割当て戦略を使用している場合にデータのバックアップ先を決定するために役立ちます。最後に、この名前は、管理情報(たとえば、JMX)の表示およびログ・エントリの解釈にも有用です。
マシン名 - クラスタ・メンバーをホストするサーバーの名前。名前の指定がない場合は、サーバーのホスト名が使用されます。この名前は、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="coherence.site">pa-1</site-name> <rack-name system-property="coherence.rack">100A</rack-name> <machine-name system-property="coherence.machine">prod001 </machine-name> <process-name system-property="coherence.process">JVM1 </process-name> <member-name system-property="coherence.member">C1</member-name> <role-name system-property="coherence.role">Server</role-name> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、次のシステム・プロパティを使用してクラスタ・メンバーの識別情報を指定できます。
-Dcoherence.site=pa-1 -Dcoherence.rack=100A -Dcoherence.machine=prod001 -Dcoherence.process=JVM1 -Dcoherence.member=C1 -Dcoherence.role=Server
親トピック: クラスタの設定
<multicast-listener>
要素ノード内で構成します。クラスタ・メンバーを起動するときにマルチキャスト通信を構成するためのシステム・プロパティも多数用意されています。この項には次のトピックが含まれます:
親トピック: クラスタの設定
クラスタ・メンバーにはマルチキャスト・アドレスとポートを指定できます。複数のクラスタ・メンバーが参加してクラスタを構成するには、それぞれが同じマルチキャスト・アドレスとポートを使用する必要があります。デフォルトのマルチキャスト・アドレスは239.192.0.0です。デフォルトのクラスタ・ポートは7574です。
ノート:
マルチキャスト・クラスタ・アドレスとポートは、複数のCoherenceクラスタによって安全に共有できます。ただし、SSLを使用するように構成されたクラスタでは、マルチキャスト・アドレスとポートを共有できません。さらに、同じIPプロトコル(たとえば、IPv6またはIPv4のいずれか)を使用するように、すべてのクラスタを構成する必要があります。
クラスタ・ポートは、マルチキャストではなく、Well Knownアドレス(WKA)を使用するように構成されているクラスタによっても使用されます。Well Knownアドレスの使用を参照してください。
Coherenceのデフォルトのクラスタ・ポートは、Internet Assigned Numbers Authority (IANA)に登録されており、ほとんどのクラスタで、ポートを変更する必要はありません。異なるポートが必要な場合、推奨されるベスト・プラクティスは、1024から8999の間の値を選択することです。これらの値は、一般にほとんどのオペレーティング・システムのエフェメラル・ポートの範囲外になります。エフェメラル・ポートは、他のプロセスにランダムに割り当てることができるため、Coherenceがポートにバインドできなくなり、起動が失敗します。選択したポートがエフェメラル・ポートの範囲内にないことを確認するには、オペレーティング・システムのドキュメントを参照してください。
クラスタのマルチキャスト・アドレスとポートを指定するには、オペレーション・オーバーライド・ファイルを編集して、<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="coherence.clusteraddress">224.7.2.9 </address> <port system-property="coherence.clusterport">3206</port> </multicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、システム・プロパティであるcoherence.clusteraddress
とcoherence.clusterport
を使用して、クラスタのマルチキャスト・アドレスを指定できます。たとえば:
-Dcoherence.clusteraddress=224.7.2.9 -Dcoherence.clusterport=3206
親トピック: マルチキャスト通信の構成
マルチキャスト・ソケットのネットワーク・インタフェース(NIC)が自動的に選択されます。検出のためにのみマルチキャストを使用する構成の場合、デフォルト値は、<unicast-listener>
構成の一部として指定されている<discovery-address>
値を使用して計算されます。マルチキャストを検出およびデータ転送の両方に使用する構成の場合(<multicast-threshold-percent>
が100未満の値に設定されている)、デフォルト値はユニキャスト・リスナー・インタフェースです。異なるNICをマルチキャストに使用すると、クラスタの部分的な障害を引き起こす可能性があり、障害検出とフェイルオーバーに時間がかかることから、ベスト・プラクティスではなく強くお薦めできません。
デフォルトのマルチキャスト・ネットワーク・インタフェースを変更するには、オペレーション・オーバーライド・ファイルを編集して、マルチキャスト・ソケットのバインド先とする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でマルチキャストが使用されないようにします。これにより、マルチキャスト検出が無効になり、ユニキャスト(ポイント・ツー・ポイント)がかわりに使用されます。Coherenceは、マルチキャストが有効な場合は可能なかぎりポイントツーポイント通信を使用するように設計されているため、大半のアプリケーション・プロファイルでは、パフォーマンスに対する実質的な影響はありません。Well Knownアドレスの使用を参照してください。
ノート:
マルチキャストを無効にすると、ネットワークに対する負荷が大きくなります。しかし、これが問題になるのは、メンバー数が100を超える大規模なクラスタのみです。
親トピック: マルチキャスト通信の構成
存続時間(TTL)値の設定は、マルチキャスト・パケットがネットワーク上を移動できる範囲を指定します。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="coherence.ttl">3</time-to-live> </multicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.ttl
システム・プロパティを使用してTTL値を指定できます。たとえば:
-Dcoherence.ttl=3
親トピック: マルチキャスト通信の構成
マルチキャストの参加タイムアウトは、クラスタへの参加をクラスタ・メンバーが待機する時間を定義します。このタイムアウトが経過しても既存のクラスタが検出されない場合、そのクラスタ・メンバーは独自にクラスタを起動し、自身がそのクラスタの上位クラスタ・メンバーになります。一般に、デフォルトの参加タイムアウト値を変更する必要はありません。ただし、サーバーが既存のクラスタに参加するかわりに新しいクラスタを起動すると、参加タイムアウト値を増やしてサーバーがクラスタに参加するための追加時間を提供できます。
ノート:
クラスタの最初のメンバーは、参加タイムアウトの全期間を待機してから、上位メンバーのロールが必要であると見なします。クラスタの起動タイムアウトが参加タイムアウトよりも短いと、クラスタが起動している間にそのクラスタの最初のメンバーは動作を停止します。クラスタ・メンバーのタイムアウトは、パケット・パブリッシャのタイムアウトを使用して指定します(<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>
ノート:
<join-timeout-milliseconds>
の設定は、マルチキャスト通信およびユニキャスト通信の両方で使用されます。
親トピック: マルチキャスト通信の構成
クラスタ・メンバーは、クラスタのパケットの送信でマルチキャスト通信とユニキャスト通信の両方を使用します。マルチキャストのしきい値を使用して、パケットの配信にマルチキャストを使用するかユニキャストを使用するかを判断します。このしきい値に大きい値または小さい値を設定することで、クラスタではどちらか一方の通信スタイルが頻繁に使用されるようになります。マルチキャスト通信を無効にすると、このしきい値設定は使用されません。
マルチキャストのしきい値は、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>
親トピック: マルチキャスト通信の構成
<unicast-listener>
要素ノード内で構成します。クラスタ・メンバーを起動するときにユニキャスト通信を構成するためのシステム・プロパティも用意されています。この項には次のトピックが含まれます:
クラスタ・メンバーは、java.net.InetAddress.getLocalHost()
のコールを使用してバインド先のIPアドレスを取得しようとします。複数のIPまたはNICを持つコンピュータでは、Coherenceは最も高いMTUのルーティング可能なIPを自動的に選択します。WKAが構成されている場合、Coherenceは、WKAリストのIPにルーティング可能なIPを選択します。選択したNICを使用しない場合、デフォルトをオーバーライドするには手動構成が必要です。
ノート:
マルチキャストがメンバー検出とデータ転送の両方に使用されている場合、マルチキャスト・ソケットは、ユニキャスト・アドレスによって定義されたものと同じインタフェースにバインドされます。マルチキャスト・ソケット・インタフェースの変更を参照してください。
ユニキャスト・アドレスは、正確なIPアドレスを指定するかわりに、バインド先のローカルIPアドレスのサブネットおよびマスク・パターンを使用する、クラスレス・ドメイン間ルーティング(CIDR)表記法を使用して入力できます。CIDRでは、同じサブネット上の複数のコンピュータで1つのアドレス構成を共有できるため、構成が単純になります。各クラスタ・メンバーで同じCIDRアドレス・ブロックを指定すると、各コンピュータのローカルNICでは、自動的にアドレス・パターンの一致が検出されます。たとえば、同じネットワーク上に配置されており、それらの192.168.1.*
アドレス上でクラスタを実行する複数のマルチNICコンピュータのユニキャスト・アドレスを指定するには、192.168.1.0/24
などのアドレスを指定します。すると、各ノードが、そのパターンに一致するローカルNICを検出します。/24
接頭辞サイズは、192.168.1.0から192.168.1.255までの最大256個の使用可能アドレスに一致します。<address>
要素は、ローカル・アドレスにルーティングする外部NATアドレスもサポートします。ただし、両方のアドレスで同じポート番号を使用する必要があります。
クラスタ・メンバーのユニキャスト・アドレスを指定するには、オペレーション・オーバーライド・ファイルを編集して、ユニキャスト・アドレスを含む<address>
要素を追加します。たとえば:
<cluster-config> <unicast-listener> <address system-property="coherence.localhost">192.168.1.0/24 </address> </unicast-listener> </cluster-config>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.localhost
システム・プロパティを使用してユニキャスト・アドレスを指定できます。たとえば:
-Dcoherence.localhost=192.168.1.0/24
親トピック: クラスタ・メンバーのユニキャスト・アドレスの指定
クラスタ・メンバーのユニキャスト・ポートは、オペレーティング・システムの使用可能なエフェメラル・ポートの範囲から自動的に割り当てられます。これにより、Coherenceと他のアプリケーションの間でポートの競合が誤って発生することがなくなります。ただし、クラスタ・メンバー間でファイアウォールが必要な場合は(特殊な構成)は、ポートを手動で構成する必要があります。クラスタ・メンバーのファイアウォールの構成を参照してください。
クラスタ・メンバーでは、2つのユニキャスト・ポートが必要です。2つのポートを使用する理由は次のとおりです。
インバウンド・トラフィックとアウトバウンド・トラフィック間の競合を削減し、両方での大量の転送を回避して、同じポートで受信する。
コヒーレンスなメンバー間では、オペレーティング・システムのMTU (Maximum Transmission Unit)に基づく最適なパケット・サイズでの通信が可能になる。サイズが大きなパケットに一方のポートを使用し、サイズがネットワークのMTU以下であるパケットにもう一方のポートを使用します。この分離によって、サイズに基づいて別個のパケット・バッファを使用できます。
ソケット・バッファの表面的なサイズを増やさずに、メンバー数が500を超える大規模なクラスタを実行できる。
ユニキャスト・ポートを手動で構成する場合は、単一のポートが指定され、2番目のポートが自動的に選択されます。いずれかのポートが使用できない場合、デフォルトの動作では、使用可能な次のポートを選択します。たとえば、ポート9000が最初のポート(port1
)に構成されており、使用不可の場合、使用可能な次のポートが自動的選択されます。2番目のポート(port2
)が自動的に開き、デフォルトでport1
の次に使用可能なポート(使用可能であれば、port1
+ 1
)として設定されます。自動ポート調整を無効にできますが、この場合は、port1
を使用可能にする必要があり、2番目のポートは常にport1
+ 1
になります。自動ポート調整は、ポート範囲の上限を指定する場合に使用することもできます。
クラスタ・メンバーのユニキャスト・ポートを指定するには、オペレーション・オーバーライド・ファイルを編集して、ポート値を含む<port>
要素を追加します。たとえば:
<cluster-config> <unicast-listener> <port system-property="coherence.localport">9000</port> </unicast-listener> </cluster-config>
自動ポート調整を無効にするには、値false
を含む<port-auto-adjust>
要素を追加します。または、ポートが選択されるポートの範囲を指定するには、ポート範囲の上限を表すポート値を含めます。次の例では、9000から9200のポート範囲を設定します。
<cluster-config> <unicast-listener> <port system-property="coherence.localport">9000</port> <port-auto-adjust system-property="coherence.localport.adjust">9200 </port-auto-adjust> </unicast-listener> </cluster-config>
オペレーション・オーバーライド・ファイルを使用するかわりに、システム・プロパティであるcoherence.localhost
、coherence.localport
およびcoherence.localport.adjust
を使用して、ユニキャスト・ポートと自動ポート調整の設定を指定できます。たとえば:
-Dcoherence.localport=9000 -Dcoherence.localport.adjust=9200
親トピック: クラスタ・メンバーのユニキャスト・アドレスの指定
クラスタを起動できるクラスタ・メンバー・アドレスの小さいサブセットを指定することでWKAが有効になります。WKAアドレスの最適な数はクラスタのサイズで異なります。一般的に、WKAアドレスはクラスタの10%未満になるようにしてください。スイッチごとのWKAアドレスを1つか2つにすることをお薦めします。
各WKAアドレスは、クラスタの稼働中は利用可能な状態を維持している必要がありますが、どの時点でも同時にアクティブになっている必要はありません。クラスタ・メンバーがクラスタを検出してそこに参加するためには、WKAアドレスが1つのみ稼働可能になっている必要があります。さらに、クラスタに参加したクラスタ・メンバーは、すべてのクラスタ・メンバーのアドレスの通知を受け、各クラスタ・メンバーに個別にメッセージを送信することでブロードキャストを実行します。これにより、すべてのWKAアドレスが動作を停止しても、クラスタは稼働できます。ただし、クラスタ・メンバー自身がWKAアドレス上にホストされるか、WKAアドレス上のクラスタ・メンバーが起動されないかぎり、このクラスタに新しいクラスタ・メンバーは参加できません。この場合は、クラスタの最上位メンバーがWKAアドレスのリストをポーリングし、そのWKAアドレスが既存のクラスタに再度参加できるようにします。
WKAアドレスを指定する方法は2つあります。まず、WKAアドレスのリストを指定する方法があります。もう1つは、アドレス・プロバイダの実装を使用してWKAアドレスのリストを取得する方法です。どちらの方法も、オペレーション・オーバーライド・ファイルの中で<unicast-listener>
要素の<well-known-addresses>
サブ要素で構成します。
この項には次のトピックが含まれます:
親トピック: クラスタの設定
WKAアドレス(IPアドレスまたはDNS名)は、<address>
要素を使用して指定されます。任意の数のWKAアドレスを指定できますが、一意のid
属性をアドレスごとに含める必要があります。様々なクラスタ・メンバーが他のクラスタ・メンバーとは無関係に稼働することがないように、すべてのクラスタ・メンバーに対して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> <address id="1">Server1</address> <address id="2">Server2</address> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
IPアドレスまたはDNS名のいずれかを使用できる場合、DNS名には、DNS名に関連付けられているIPアドレスが実行時に自動的に解決されるというメリットもあります。これにより、WKAアドレスのリストをDNSサーバーに格納できるため、WKAアドレスをリアルタイムで一元的に管理および更新できます。たとえば、cluster1
という名前のクラスタのWKAアドレス・リストが192.168.1.1
、192.168.1.2
、192.168.1.3
になる場合、これらのアドレスをホスト名cluster1
の単独のDNSエントリに含め、cluster1
という名前の単独のアドレスを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> <address>cluster1</address> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
ネットワーク・アドレス変換(NAT)を使用するネットワークでは、ローカル・アドレスにルーティングする外部NATアドレスを使用してWKAアドレスのリストを構築できます。Coherenceのネットワーク層では、外部NATアドレスにマップされるWKAクラスタ・メンバーが自動的に検出され、WKAリストにないクラスタ・メンバーの外部NATアドレスも検出されます。これらの学習されたアドレスは、自動的に他のCoherenceサービス用に使用されます。NATアドレスを使用する場合、外部アドレスとローカル・アドレスで同じポート番号を使用する必要があります。
WKAシステム・プロパティの使用
オペレーション・オーバーライド・ファイルでアドレスを指定するかわりに、coherence.wka
システム・プロパティを使用して単独のWKAアドレスを指定できます。これらのシステム・プロパティは、デモやテストのシナリオで単独のWKAアドレスを簡単に指定できるようにすることを目的としたものです。たとえば:
-Dcoherence.wka=192.168.0.100
複数の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> <address id="1" system-property="coherence.wka"></address> <address id="2" system-property="coherence.wka2"></address> </well-known-addresses> </unicast-listener> </cluster-config> </coherence>
前述の例では、次のようにシステム・プロパティを使用してWKAアドレスを指定しています。
-Dcoherence.wka=192.168.0.102 -Dcoherence.wka2=192.168.0.103
カスタムのシステム・プロパティの作成を参照してください。
親トピック: Well Knownアドレスの使用
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>
要素を指定して指定できます。初期化パラメータには、一致するシグネチャを持つパブリック・コンストラクタが含まれる実装によってアクセスできます。次の例では、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>
親トピック: Well Knownアドレスの使用
単一サーバー・モードを有効にするには、オペレーション・オーバーライド・ファイルを編集して、ループバックにルーティングするアドレスに設定したユニキャスト<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="coherence.localhost">127.0.0.1 </address> </unicast-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.localhost
システム・プロパティを使用して単一サーバー・モードを有効化できます。たとえば:
-Dcoherence.localhost=127.0.0.1
親トピック: クラスタの設定
停止検出は、プロセス障害(TcpRingコンポーネント)とハードウェア障害(IpMonitorコンポーネント)の両方を特定します。プロセス障害は、クラスタ通信に使用されるものと同じポートで開いているTCP接続のリングを使用して検出されます。各クラスタ・メンバーはユニキャストのハートビートを発行し、最も上位のクラスタ・メンバーは、ブロードキャスト・メッセージとなるクラスタ・ハートビートを発行します。ハードウェア障害は、トレースICMP Pingまたは疑似Pingを発行してTCPポート7を使用するJava InetAddress.isReachable
メソッドを使用して検出します。停止検出はデフォルトで有効になっていますが、<tcp-ring-listener>
要素で構成できます。
この項には次のトピックが含まれます:
親トピック: クラスタの設定
TCPリング・リスナーのデフォルトの動作を変更するために使用する設定がいくつかあります。これには、クラスタ・メンバーをホストしているコンピュータが到達不可能になっていると判断するまでの試行回数と時間の変更などがあります。デフォルト値は3回の試行と5秒で、最大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="coherence.ipmonitor.pingtimeout"> 25s</ip-timeout> <ip-attempts>5</ip-attempts> <listen-backlog>10</listen-backlog> </tcp-ring-listener> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.ipmonitor.pingtimeout
システム・プロパティを使用してタイムアウトを指定できます。たとえば:
-Dcoherence.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>
親トピック: 停止検出の構成
停止検出はデフォルトで有効になっているので、無効にするには明示的な指定が必要です。停止検出を無効にしても、最低限必要なネットワーク・トラフィックを小さく抑えることができるのみであり、その一方で障害が発生したメンバーを検出できなくなることがあります。無効にすると、クラスタ・メンバーはパケット・パブリッシャの再送信タイムアウト間隔を使用して、他のメンバーがパケットへの応答を停止していることを判断します。デフォルトでは、このタイムアウト間隔は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の値で指定し、10を指定すると優先度が最も高くなります。たとえば:
<?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="coherence.priority">1</priority> </member-identity> </cluster-config> </coherence>
オペレーション・オーバーライド・ファイルを使用するかわりに、coherence.priority
システム・プロパティを使用してクラスタ・メンバーの優先度を指定することもできます。たとえば:
-Dcoherence.priority=1
親トピック: クラスタの優先度の指定
スレッドの優先度をサポートするクラスタ・コンポーネントがいくつかあります。この優先度は、Javaスレッドの実行の重要度を判断するための基礎として使用します。このコンポーネントとして、マルチキャスト・リスナー、ユニキャスト・リスナー、TCPリング・リスナー、パケット・スピーカー、パケット・パブリッシャおよび受信メッセージ・ハンドラがあります。デフォルトの優先度設定では、パケット・パブリッシャの優先度が最も高く、次の順位が受信メッセージ・ハンドラで、残りのコンポーネントがこれに続きます。
スレッドの優先度は、それぞれのコンポーネントの構成要素の中で指定します(それぞれ、<unicast-listener>
、<multicast-listener>
、<packet-speaker>
、<packet-publisher>
、<tcp-ring-listener>
および<incoming-message-handler>
の各要素)。たとえば、ユニキャスト・リスナーに対してスレッドの優先度を指定するには、オペレーション・オーバーライド・ファイルを編集して、優先度を指定した<priority>
要素を<unicast-listener>
ノードに追加します。優先度は1から10の値で指定し、10を指定すると優先度が最も高くなります。
<?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>
親トピック: クラスタの優先度の指定
クラスタ・サービスではスレッドの優先度がサポートされています。この優先度は、Javaスレッドの実行の重要度を判断するための基礎として使用し、サービスのどのスレッドが重要とみなされているのかを示します。優先度を設定できるスレッドのタイプは、サービス・スレッド、イベント・ディスパッチャ・スレッドおよびワーカー・スレッドの3つです。デフォルトの設定では、サービス・スレッドとイベント・ディスパッチャ・スレッドにワーカー・スレッドよりも高い優先度が与えられています。
サービスのスレッド優先度は、オペレーション・オーバーライド・ファイルで <service>
要素をオーバーライドすることで、クラスタ内のすべてのサービスに対して変更できます。ただし、より最適な方法は、キャッシュ・スキームを定義するときにキャッシュ構成ファイル内でサービス・インスタンスに対してスレッド優先度を構成することです。キャッシュ・スキームの定義を参照してください。<service-priority>
、<event-dispatcher-priority>
および<worker-priority>
サブ要素をそれぞれ使用して、値を1から10の値で入力し、10を指定すると優先度が最も高くなります。たとえば:
... <distributed-scheme> <scheme-name>distributed</scheme-name> <service-name>MyDistributedService</service-name> <service-priority>10</service-priority> <event-dispatcher-priority>10</event-dispatcher-priority> <worker-priority>5</worker-priority> ... </distributed-scheme> ...
親トピック: クラスタの優先度の指定
マルチキャストとユニキャストの両方の構成のUDPとTCPの両方用に、クラスタ・ポート(デフォルトで7574)が開かれている。
Coherence TcpRing/IpMonitor停止検出機能用に、TCPポート7が開かれている。
UDPとTCPの両方のトラフィック用に、ユニキャスト・ポート範囲が開かれている。システムによって割り当てられているエフェメラル・ポートに依存するのではなく、ユニキャストのリスニング・ポート範囲が明示的に設定されていることを確認します。デフォルトのユニキャスト・ポートの変更を参照してください。
親トピック: クラスタの設定