第26章 JGroups を設定します。

JGroups は、Red Hat JBoss Data Grid インスタンスに接続するために使用される基礎となるグループ通信ライブラリーです。JBoss Data Grid でサポートされる JGroups プロトコルの完全なリストについては、「サポート対象 JGroups プロトコル」を参照してください。

26.1. Red Hat JBoss Data Grid インターフェースバインディングの設定 (リモートクライアントサーバーモード)

26.1.1. インターフェース

Red Hat JBoss Data Grid では、ユーザーは特定の (不明の) IP アドレスではなくインターフェースタイプを指定することができます。
  • link-local: 169.x.x.x または 254.x.x.x アドレスを使用します。これは、1 つのボックス内のトラフィックに適しています。
    <interfaces>
        <interface name="link-local">
            <link-local-address/>
        </interface>
        <!-- Additional configuration elements here -->
    </interfaces>
  • site-local: たとえば 192.168.x.x などのプライベート IP アドレスを使用します。これにより、GoGrid や同様のプロバイダーから追加の帯域幅についてチャージされることを避けられます。
    <interfaces>
        <interface name="site-local">
            <site-local-address/>
        </interface>
        <!-- Additional configuration elements here -->
    </interfaces>
  • global: パブリック IP アドレスを選択します。これは、レプリケーショントラフィックの場合は避ける必要があります。
    <interfaces>
        <interface name="global">
            <any-address/>
        </interface>
        <!-- Additional configuration elements here -->
    </interfaces>
  • non-loopback: 127.x.x.x アドレスではないアクティブなインターフェースにある最初のアドレスを使用します。
    <interfaces>
        <interface name="non-loopback">
            <not>
    	    <loopback />
    	</not>
        </interface>
    </interfaces>

26.1.2. ソケットのバインディグ

ソケットのバインディングにより、インターフェースとポートの名前付きの組み合わせが提供されます。ソケットは、個別にまたはソケットのバインディンググループを使用するかのいずれかにより、インターフェースにバインドできます。

26.1.2.1. 単一のソケットをバインドする例

以下は、JGroups インターフェースのソケットバインディングを使用し、socket-binding 要素を用いて個別のソケットをバインドする例を表しています。

例26.1 ソケットバインディング (Socket Binding)

<socket-binding name="jgroups-udp" <!-- Additional configuration elements here --> interface="site-local"/>

26.1.2.2. ソケットのグループをバインドする例

以下は、JGroups インターフェースのソケットバインディングを使用し、socket-binding-group 要素を用いてグループをバインドする例を表しています。

例26.2 グループのバインド

<socket-binding-group name="ha-sockets" default-interface="global"> 
	<!-- Additional configuration elements here -->
	<socket-binding name="jgroups-tcp" port="7600"/>
	<socket-binding name="jgroups-tcp-fd" port="57600"/>
	<!-- Additional configuration elements here -->
</socket-binding-group>
この例の 2 つのサンプルのソケットバインディングは、同じ default-interface (global) にバインドされます。そのため、インターフェース属性を指定する必要はありません。

26.1.3. JGroups ソケットバインディングの設定

JGroups サブシステムで設定されるそれぞれの JGroups スタックでは、特定のソケットバインディングを使用します。以下のようにソケットバインディングをセットアップします。

例26.3 JGroups UDP ソケットバインディング設定

以下の例では、ネットワーク上で追加のノードを自動検出するために UDP を使用します。
<subsystem xmlns="urn:jboss:domain:jgroups:1.2" default-stack="udp">
    <stack name="udp">
        <transport type="UDP" socket-binding="jgroups-udp">
            <!-- Additional configuration elements here -->
        </transport>
        <!-- rest of protocols -->
    </stack>
</subsystem>

例26.4 JGroups TCP ソケットバインディング設定

以下の例では、2 つのクラスターノード間の直接的な通信を確立するために TCP を使用します。以下の例では、node1 は 192.168.1.2:7600 にあり、node2 は 192.168.1.3:7600 にあります。使用されているポートは、socket-binding セクションの jgroups-tcp プロパティーで定義されます。
<subsystem xmlns="urn:infinispan:server:jgroups:6.1" default-stack="tcp">
    <stack name="tcp">
        <transport type="TCP" socket-binding="jgroups-tcp"/>
        <protocol type="TCPPING">
            <property name="initial_hosts">192.168.1.2[7600],192.168.1.3[7600]</property>
            <property name="num_initial_members">2</property>
            <property name="port_range">0</property>
            <property name="timeout">2000</property>
        </protocol>
        <protocol type="MERGE3"/>
        <protocol type="FD_SOCK" socket-binding="jgroups-tcp-fd"/>
        <protocol type="FD_ALL"/>
        <protocol type="VERIFY_SUSPECT"/>
        <protocol type="pbcast.NAKACK2">
            <property name="use_mcast_xmit">false</property>
        </protocol>
        <protocol type="UNICAST3"/>
        <protocol type="pbcast.STABLE"/>
        <protocol type="pbcast.GMS"/>
        <protocol type="MFC"/>
        <protocol type="FRAG2"/>
    </stack>
</subsystem>
UDP または TCP のどちらを使用するかはそれぞれの環境で決定されます。デフォルトで、JGroups は UDP を使用します。UDP はクラスター化されたメンバーの動的な検出を可能にし、またネットワークフットプリントが比較的小さいため大型クラスターで効果的に拡張できるためです。さらに UDP を使用する場合は、マルチキャストパケットがマルチキャストアドレスへのすべてのサブスクライバーによって受信されるため、クラスターごとに 1 つのパケットのみが必要になります。ただし、マルチキャストトラフィックが阻まれる環境か、またはクラスターメンバーが別の VLAN に置かれている場合など、UDP トラフィックがリモートクラスターノードに達しない場合は、クラスターを作成するために TCP トラフィックを使用できます。

重要

UDP を JGroups トランスポートとして使用する場合、ソケットバインディングは、通常の (ユニキャスト) ポート、マルチキャストアドレス、およびマルチキャストポートを指定する必要があります。