クラスタメンバシップオブジェクト

目次

はじめに

Apache Tribes の Channel におけるメンバシップコンポーネントは、クラスタ内の他のメンバー(ノード)の動的検出を担当します。現在、2つの異なるメンバシップサービスがあります。org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipService です。McastService はマルチキャストベースのメンバシップサービスを構築し、UDP パケットをマルチキャスト IP アドレスに送信します。StaticMembershipService はユニキャストベースのメンバシップサービスを構築し、定義済みのメンバーアドレスに TCP パケットを送信します。

デフォルトの実装

クラスタグループ通知のデフォルトの実装は、UDP パケットを使用してマルチキャスト IP アドレスに送信されるマルチキャストハートビートの上に構築されています。クラスタメンバーは、同じマルチキャストアドレス/ポートの組み合わせを使用することでグループ化されます。各メンバーは所定の間隔 (frequency) でハートビートを送信し、このハートビートは動的検出に使用されます。同様に、dropTime ミリ秒で指定された時間枠内にハートビートが受信されなかった場合、メンバーは疑わしいとみなされ、チャネルおよびすべてのメンバシップリスナーに通知されます。

属性

共通属性

属性説明
className

メンバシップコンポーネントの実装です。org.apache.catalina.tribes.membership.McastServiceorg.apache.catalina.tribes.membership.StaticMembershipService の2つの実装が利用可能です。

マルチキャスト属性

属性説明
className

値は org.apache.catalina.tribes.membership.McastService です。この実装は、メンバー検出のためにマルチキャストハートビートを使用します。

address

メンバシップが自身の存在をブロードキャストし、他のハートビートをリッスンするマルチキャストアドレスです。デフォルト値は 228.0.0.4 です。ネットワークがマルチキャストトラフィックに対応していることを確認してください。
マルチキャストアドレスは、port と組み合わせてクラスタグループを作成します。ファームを複数の異なるグループに分割したり、QAと本番環境を分離したりするには、port または address を変更してください。
以前は mcastAddr として知られていました。

port

マルチキャストポート。デフォルト値は 45564 です。
マルチキャストポートは、address と組み合わせてクラスタグループを作成します。ファームを複数の異なるグループに分割したり、QAと本番環境を分離したりするには、port または address を変更してください。

frequency

ハートビートが送信されるミリ秒単位の頻度です。デフォルト値は 500 ミリ秒です。
ほとんどの場合、デフォルト値で十分です。この値を変更すると、ハートビートの間隔が単純に変更されます。

dropTime

メンバシップコンポーネントは、メンバーが所定の時間内にハートビートを送信できなかった場合、そのメンバーをタイムアウトさせ、Channel に通知します。デフォルト値は 3000 ミリ秒です。これは、その時間枠内にメンバーからハートビートが受信されなかった場合、メンバシップコンポーネントがクラスタにその旨を通知することを意味します。
高レイテンシネットワークでは、誤検出を防ぐためにこの値を増やすことをお勧めします。
Apache Tribes は、ハートビートのタイムアウトが発生した場合に TCP 接続を使用してタイムアウトを検証する TcpFailureDetector も提供します。これにより誤検出を防ぎます。

bind

マルチキャストトラフィックを特定のネットワークインターフェースにバインドしたい場合にこの属性を使用します。デフォルトでは、またはこの属性が設定されていない場合、0.0.0.0 にバインドしようとし、マルチホームホストではこれが問題になることがあります。

ttl

マルチキャストハートビートのタイムトゥライブ設定です。この設定は0から255までの値でなければなりません。デフォルト値はVMの実装に依存します。

domain

Apache Tribes は、このドメイン属性を使用することで、メンバーを論理的にドメインにグループ化する機能を持っています。org.apache.catalina.tribes.Member.getDomain() メソッドは、ここで指定された値を返します。

soTimeout

ハートビートの送受信は単一のスレッドで行われるため、このスレッドが永久にブロックされるのを避けるために、このソケットの SO_TIMEOUT 値を制御できます。
0以下の値が指定された場合、コードはこの値をデフォルトで frequency に設定します。

recoveryEnabled

ネットワーク障害が発生した場合、Java のマルチキャストソケットは透過的にフェイルオーバーせず、代わりに各受信リクエストで継続的に IOException をスローします。recoveryEnabled が true に設定されている場合、マルチキャストソケットを閉じ、上記で定義されたものと同じプロパティを持つ新しいソケットを開きます。
デフォルトは true です。

recoveryCounter

recoveryEnabled==true の場合、この値はリカバリが試行されるまでにエラーが何回発生する必要があるかを示します。デフォルトは 10 です。

recoverySleepTime

recoveryEnabled==true の場合、この値はシステムがリカバリ試行中にどれだけの時間(ミリ秒単位)スリープするかを示し、正常にリカバリされるまで続きます。デフォルトは 5000 (5秒) です。

localLoopbackDisabled

メンバシップはマルチキャストを使用するため、java.net.MulticastSocket.setLoopbackMode(localLoopbackDisabled) を呼び出します。localLoopbackDisabled==true の場合、マルチキャストメッセージは同じローカルマシン上の他のノードに到達しません。デフォルトは false です。

静的メンバシップ属性

静的メンバシップサービスを使用する場合、Cluster 要素の channelStartOptions 属性がデフォルト値の 15 に設定されていることを確認する必要があります。

属性説明
className

値は org.apache.catalina.tribes.membership.StaticMembershipService です。

connectTimeout

事前定義された静的メンバーのアドレスへの TCP 接続を試行する際のタイムアウトです。デフォルトは 500 ミリ秒です。

expirationTime

メンバーが所定の時間内に生存時間を更新できなかった場合、このメンバシップは cluster に memberDisappeared イベントを通知します。デフォルトは 5000 ミリ秒です。

rpcTimeout

他のノードとの間でメンバー通知に使用されるメッセージのタイムアウトです。デフォルトは 3000 ミリ秒です。

useThread

true に設定すると、このメンバシップサービスは ping メッセージを送信するためのローカルスレッドを開始します。false に設定すると、チャネルハートビートが ping メッセージを送信します。デフォルトは false です。

pingInterval

useThread == true の場合、ping メッセージを送信する間隔を定義します。デフォルトは 1000 ミリ秒です。

ネストされたコンポーネント

静的メンバシップサービスは、<LocalMember> および <Member> 要素のネストを許可します。

StaticMember 属性

LocalMember
静的クラスタグループのローカルメンバーである静的メンバーです。

注: <LocalMember> 要素を使用してローカルメンバーを明示的に設定する必要はありません。ローカルメンバーを含むすべてのクラスタメンバーは、<Member> 要素を使用して定義することができ、Tomcat がどれがローカルメンバーであるかを判断します。

属性説明
className利用可能な実装は1つだけです:org.apache.catalina.tribes.membership.StaticMember
port設定する必要はありません。この属性の値は、クラスタレシーバーの設定から継承されます。
securePort設定する必要はありません。この属性の値は、クラスタレシーバーの設定から継承されます。
host設定する必要はありません。この属性の値は、クラスタレシーバーの設定から継承されます。
domainこの静的メンバーがクラスタメッセージをリッスンする論理クラスタドメインです。2種類の値が可能です。
1. 「staging-domain」や「tomcat-cluster」のような通常の文字列値は、ISO-8859-1 エンコーディングを使用してバイトに変換されます。 2. 文字列形式のバイト配列、例:{216,123,12,3}
uniqueIdこの静的メンバーのグローバルに一意な ID です。値は以下の形式で16バイトである必要があります。
1. 文字列形式のバイト配列、例:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

Member
静的クラスタグループに追加される静的メンバーです。

属性説明
className利用可能な実装は1つだけです:org.apache.catalina.tribes.membership.StaticMember
portこの静的メンバーがクラスタメッセージをリッスンするポートです。
securePortこの静的メンバーが暗号化されたクラスタメッセージをリッスンするセキュアポートです。デフォルト値は -1 で、この値はメンバーがセキュアポートでリッスンしていないことを意味します。
hostこの静的メンバーがクラスタメッセージをリッスンするホスト(またはネットワークインターフェース)です。3種類の値が可能です。
1. 「216.123.1.23」の形式の IP アドレス
2. 「tomcat01.mydomain.com」や「tomcat01」のようなホスト名。ただし、これらが正しく解決される場合に限ります。
3. 文字列形式のバイト配列、例:{216,123,12,3}
domainこの静的メンバーがクラスタメッセージをリッスンする論理クラスタドメインです。2種類の値が可能です。
1. 「staging-domain」や「tomcat-cluster」のような通常の文字列値は、ISO-8859-1 エンコーディングを使用してバイトに変換されます。
2. 文字列形式のバイト配列、例:{216,123,12,3}
uniqueIdこの静的メンバーのグローバルに一意な ID です。値は以下の形式で16バイトである必要があります。
1. 文字列形式のバイト配列、例:{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}

設定

     <Membership className="org.apache.catalina.tribes.membership.StaticMembershipService">
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat01.mydomain.com"
                  uniqueId="{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}"/>
       <Member className="org.apache.catalina.tribes.membership.StaticMember"
                  port="4004"
                  host="tomcat02.mydomain.com"
                  uniqueId="{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1}"/>
     </Membership>