3.2.8. クラスタリングの変更

3.2.8.1. クラスタリングに対するアプリケーションの変更

  1. クラスタリグが有効な状態で JBoss EAP 6 を起動する

    JBoss EAP 5.x でクラスタリングを有効にするには、次のように all プロファイル (またはその派生プロファイル) を使用してサーバーインスタンスを起動する必要がありました。
    $ EAP5_HOME/bin/run.sh -c all
    JBoss EAP 6 でクラスタリングを有効にする方法は、サーバーがスタンドアロンであるかまたは管理ドメインで実行されているかによって異なります。
    1. 管理対象ドメインで実行されているサーバーに対してクラスタリングを有効にする

      ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、domain.xml を更新し、ha プロファイルと ha-sockets ソケットバインディンググループを使用するサーバーグループを指定します。例は次のとおりです。
      <server-groups>
        <server-group name="main-server-group" profile="ha">
          <jvm name="default">
            <heap size="64m" max-size="512m"/>
          </jvm>
          <socket-binding-group ref="ha-sockets"/>
        </server-group>
      </server-group>
    2. スタンドアロンサーバーに対してクラスタリングを有効にします。

      スタンドアロンサーバーに対してクラスタリングを有効にするには、次のように適切な設定ファイルを使用してサーバーを起動します。
      $ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
  2. バインドアドレスを指定する

    通常、JBoss EAP 5.x では、以下のように -b コマンドライン引数を用いて、クラスタリングに使用するバインドアドレスを指定しました。
    $ EAP5_HOME/bin/run.sh -c all -b 192.168.0.2
    JBoss EAP 6 は、standalone.xmldomain.xml、および host.xml ファイルの <interfaces> 要素に含まれる IP アドレスおよびインターフェースへソケットをバインドします。JBoss EAP に同梱される標準的な設定には、2 つのインターフェース設定が含まれています。
    <interfaces>
        <interface name="management">
            <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
        </interface>
        <interface name="public">
           <inet-address value="${jboss.bind.address:127.0.0.1}"/>
        </interface>
    </interfaces>
    これらのインターフェース設定は、jboss.bind.address.management および jboss.bind.address システムプロパティーの値を使用します。これらのシステムプロパティーが設定されていないと、デフォルトの 127.0.0.1 が各値に使用されます。
    また、サーバーの起動時にバインドアドレスをコマンドライン引数として指定でき、JBoss EAP 6 サーバー設定ファイル内に明示的に定義することも可能です。
    • JBoss EAP スタンドアロンサーバーの起動時に、コマンドラインでバインド引数を指定します。
      以下の例は、スタンドアロンサーバーでコマンドラインにバインドアドレスを指定する方法を示しています。
      EAP_HOME/bin/standalone.sh -Djboss.bind.address=127.0.0.1

      注記

      また、-Djboss.bind.address=127.0.0.1 のショートカットである -b 引数を使用することもできます。
      EAP_HOME/bin/standalone.sh -b=127.0.0.1
      JBoss EAP 5 の構文形式もサポートされます。
      EAP_HOME/bin/standalone.sh -b 127.0.0.1
      -b 引数は public インターフェースのみを変更することに注意してください。management インターフェースは対象になりません。
    • サーバー設定ファイルにバインドアドレスを指定します。
      管理対象ドメインで稼働しているサーバーの場合は、domain/configuration/host.xml ファイルでバインドアドレスを指定します。スタンドアロンサーバーの場合は、standalone-ha.xml ファイルでバインドアドレスを指定します。
      以下の例では、ha-sockets ソケットバインディンググループ内のすべてのソケットに対するデフォルトインターフェースとして public インターフェースが指定されています。
      <interfaces>
        <interface name="management">
          <inet-address value="192.168.0.2"/>
        </interface>
        <interface name="public">
          <inet-address value="192.168.0.2"/>
        </interface>
      </interfaces>
      <socket-binding-groups>
        <socket-binding-group name="ha-sockets" default-interface="public">
          <!-- ... -->
        </socket-binding-group>
      </socket-binding-groups>

      注記

      バインドアドレスを設定ファイルのシステムプロパティーとしてではなく、ハードコードされた値として指定する場合は、コマンドライン引数でオーバーライドできません。
  3. jvmRoute が mod_jk と mod_proxy をサポートするよう設定する

    JBoss EAP 5 では、Web サーバー jvmRouteserver.xml ファイルのプロパティーを使用して設定されていました。JBoss EAP 6 では、jvmRoute 属性は、以下のように instance-id 属性を使用してサーバー設定ファイルの Web サブシステムで設定されます。
    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="{JVM_ROUTE_SERVER}">
    
    上記の {JVM_ROUTE_SERVER} は、jvmRoute サーバー ID で置き換える必要があります。
    instance-id は、管理コンソールを使用して設定することもできます。
  4. マルチキャストアドレスおよびポートを指定する

    JBoss EAP 5.x では、 以下のようにコマンドライン引数 -u を使用して、クラスター内の通信に使用されるマルチキャストアドレスを指定できました。 同様に、引数 -m を使用してクラスター内の通信に使用されるポートを指定できました。
    $ EAP5_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688
    JBoss EAP 6 では、クラスター内の通信に使用されるマルチキャストアドレスとポートは、以下のように該当する JGroups プロトコルにより参照されたソケットバインディングにより定義されます。
    <subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
        <stack name="udp">
            <transport type="UDP" socket-binding="jgroups-udp"/>
            <!-- ... -->
        </stack>
    </subsystem>
    <socket-binding-groups>
        <socket-binding-group name="ha-sockets" default-interface="public">
            <!-- ... -->
            <socket-binding name="jgroups-udp" port="55200" multicast-address="228.11.11.11" multicast-port="45688"/>
            <!-- ... -->
        </socket-binding-group>
    </socket-binding-groups>
    
    コマンドラインでマルチキャストアドレスおよびポートを指定する場合は、マルチキャストアドレスとポートをシステムプロパティーとして定義し、サーバーを起動するときにこれらのプロパティーをコマンドラインで使用できます。以下の例では、 jboss.mcast.addr は、マルチキャストアドレスの変数名であり、 jboss.mcast.port はポートの変数名です。
    <socket-binding name="jgroups-udp" port="55200"
     multicast-address="${jboss.mcast.addr:230.0.0.4}" multicast-port="${jboss.mcast.port:45688}"/>
    
    次のコマンドライン引数を使用してサーバーを起動できます。
    $ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688
  5. 代替のプロトコルスタックを使用する

    JBoss EAP 5.x では、jboss.default.jgroups.stack システムプロパティーを使用してすべてのクラスタリングサービスに使用されるデフォルトのプロトコルスタックを操作できました。
    $ EAP5_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
    JBoss EAP 6 では、domain.xml または standalone-ha.xml 内の JGroups サブシステムによってデフォルトのプロトコルスタックが定義されます。
    <subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp">
        <stack name="udp">
            <!-- ... -->
        </stack>
    </subsystem>
  6. バディーレプリケーション

    JBoss EAP 5.x は JBoss Cache のバディーレプリケーションを使用して、クラスターのすべてのインスタンスへのデータレプリケーションを抑制しました。
    JBoss EAP 6 ではバディーレプリケーションは、Infinispan の分散キャッシュである DIST モードに置き換えられました。DIST (分散) モードは強力なクラスタリングモードで、サーバーがクラスターに追加されると Infinispan によって線形にスケールします。サーバーが DIST キャッシングモードを使用するよう設定する方法の例は次のとおりです。
    1. コマンドラインを開き、次のように HA または Full プロファイルのいずれかでサーバーを起動します。
      EAP_HOME/bin/standalone.sh -c standalone-ha.xml
    2. 別のコマンドラインを開き、管理 CLI へ接続します。
      • Linux の場合は、コマンドラインで以下を入力します。
        $ EAP_HOME/bin/jboss-cli.sh --connect
        
      • Windows の場合は、コマンドラインで以下を入力します。
        C:\>EAP_HOME\bin\jboss-cli.bat --connect
        
      次の応答が表示されるはずです。
      Connected to standalone controller at localhost:9999
    3. 以下のコマンドを実行します。
      /subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist)
      /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=3)
      :reload
      
      各コマンドの後に、以下の応答が表示されるはずです。
      "outcome" => "success"
      
      これらのコマンドは、次のように standalone-ha.xml ファイルの infinispan サブシステムにある web <cache-container> 設定の dist <distributed-cache> 要素を変更します。
      <cache-container name="web" aliases="standard-session-cache" default-cache="dist" module="org.jboss.as.clustering.web.infinispan">
          <transport lock-timeout="60000"/>
          <replicated-cache name="repl" mode="ASYNC" batching="true">
              <file-store/>
          </replicated-cache>
          <replicated-cache name="sso" mode="SYNC" batching="true"/>
          <distributed-cache name="dist" owners="3" l1-lifespan="0" mode="ASYNC" batching="true">
              <file-store/>
          </distributed-cache>
      </cache-container>
      
      詳細は、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド』の章「Web アプリケーションのクラスター化」を参照してください。