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

目次

はじめに

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

デフォルト実装

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

属性

共通属性

属性説明
className

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

マルチキャスト属性

属性説明
className

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

address

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

port

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

frequency

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

dropTime

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

bind

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

ttl

マルチキャストハートビートの存続時間(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

メンバーが指定された時間内に生存時間を更新できなかった場合、このメンバーシップは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この静的メンバーがクラスタメッセージを listen する論理クラスタドメイン。2種類の値が可能です。
1. "staging-domain" や "tomcat-cluster" のような通常の文字列値は、ISO-8859-1 エンコーディングを使用してバイトに変換されます。 2. 文字列形式のバイト配列。例:{216,123,12,3}
uniqueIdこの静的メンバーのユニバーサルuniqueId。値は、次の形式の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この静的メンバーがクラスタメッセージを listen するポート
securePortこの静的メンバーが暗号化されたクラスタメッセージを listen するセキュアポート。デフォルト値は-1です。この値は、メンバーがセキュアポートで listen していないことを意味します。
hostこの静的メンバーがクラスタメッセージを listen するホスト(またはネットワークインターフェース)。3種類の値が可能です。
1. "216.123.1.23" 形式のIPアドレス
2. 正しく解決される限り、"tomcat01.mydomain.com" や "tomcat01" のようなホスト名
3. 文字列形式のバイト配列。例:{216,123,12,3}
domainこの静的メンバーがクラスタメッセージを listen する論理クラスタドメイン。2種類の値が可能です。
1. "staging-domain" や "tomcat-cluster" のような通常の文字列値は、ISO-8859-1 エンコーディングを使用してバイトに変換されます。
2. 文字列形式のバイト配列。例:{216,123,12,3}
uniqueIdこの静的メンバーのユニバーサルuniqueId。値は、次の形式の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>