25.2.3.11. クラスターインスタンス

25.2.3.11.1. クラスター化された JBoss EAP 6 AMI の起動
概要

このトピックでは、クラスター JBoss EAP 6 AMI を起動するのに必要な手順について説明します。

警告

JBoss EAP クラスターを、24 ビット未満のネットワークマスクがあるサブネットで実行したり、複数のサブネットにまたがるようにすると、各クラスターメンバーに対して一意のサーバーピア ID を取得することが複雑になります。
このような設定作業を安定的に行う方法については、JBOSS_CLUSTER_ID 変数を参照してください (「永続的な設定パラメーター」)。

重要

自動スケーリング Amazon EC2 機能は、JBoss EAP 6 クラスターノードで使用できます。ただし、デプロイメント前にテストする必要があります。特定のワークロードが必要な数のノードにスケールされ、パフォーマンスが、使用予定のインスタンスタイプの要件に見合うようにする必要があります (異なるインスタンスタイプは、異なる EC2 クラウドリソースを受け取ります)。
さらに、インスタンスローカリティーと現在のネットワーク/ストレージ/ホストマシン/RDS の使用率は、クラスターのパフォーマンスに影響を与えます。想定される実際のロードでテストし、予期しない状況を考慮するようにします。

警告

Amazon EC2 scale-down アクションは、正常にシャットダウンせずにノードを終了します。一部のトランザクションは中断される可能性があるため、他のクラスターノード (およびロードバランサー) はフェールオーバーする時間が必要です。そのため、多くの場合でアプリケーションの使用に影響を与えます。
処理されたセッションが完了するまで mod_cluster 管理インターフェースからサーバーを無効にして手動でアプリケーションクラスターをスケールダウンするか、JBoss EAP 6 インスタンスを正常にシャットダウンすることが推奨されます (インスタンスへの SSH アクセスまたは JON を使用できます)。
選択したスケールダウンの手順が原因で、ユーザーに悪影響が出ないようにテストします。特定のワークロード、ロードバランサー、およびセットアップに対して追加措置が必要になることがあります。

手順25.13 クラスター化された JBoss EAP 6 AMI の起動

  1. AMI を選択します。
  2. 必要な数のインスタンス (クラスターサイズ) を定義します。
  3. VPC およびインスタンスタイプを選択します。
  4. Security Group をクリックします。
  5. JBoss EAP 6 クラスターサブネットからのすべてのトラフィックが許可されることを確認します。
  6. 必要に応じて他の制限を定義します。
  7. 以下の内容を User Data フィールドに追加します。

    例25.7 User Data フィールドの例

    ## mod cluster proxy addresses
    MOD_CLUSTER_PROXY_LIST=10.0.0.4:7654
    
    ## clustering setup
    JBOSS_JGROUPS_S3_PING_SECRET_ACCESS_KEY=<your secret key>
    JBOSS_JGROUPS_S3_PING_ACCESS_KEY=<your access key>
    JBOSS_JGROUPS_S3_PING_BUCKET=<your bucket name>
    
    ## password to access admin console
    JBOSSAS_ADMIN_PASSWORD=<your password for opening admin console>
    
    ## database credentials configuration
    JAVA_OPTS="$JAVA_OPTS -Ddb.host=instancename.something.rds.amazonaws.com -Ddb.database=mydatabase -Ddb.user=<user> -Ddb.passwd=<pass>"
    
    ## subnet prefix this machine is connected to
    SUBNET=10.0.1.
    
    #### to run the example no modifications below should be needed ####
    PORTS_ALLOWED="1024:65535"
    JBOSS_IP=`hostname | sed -e 's/ip-//' -e 'y/-/./'` #listen on public/private EC2 IP address
    
    cat > $USER_SCRIPT << "EOF"
    ## Get the application to be deployed from an Internet URL
    # mkdir -p /usr/share/java/jboss-ec2-eap-applications
    # wget https://<your secure storage hostname>/<path>/<app name>.war -O /usr/share/java/jboss-ec2-eap-applications/<app name>.war
    
    ## install the JDBC driver as a core module
    yum -y install mysql-connector-java
    mkdir -p /usr/share/jbossas/modules/com/mysql/main
    cp -v /usr/share/java/mysql-connector-java-*.jar /usr/share/jbossas/modules/com/mysql/main/mysql-connector-java.jar
    
    cat > /usr/share/jbossas/modules/com/mysql/main/module.xml <<"EOM"
    <?xml version="1.0" encoding="UTF-8"?>
    <module xmlns="urn:jboss:module:1.0" name="com.mysql">
       <resources>
          <resource-root path="mysql-connector-java.jar"/>
       </resources>
       <dependencies>
          <module name="javax.api"/>
       </dependencies>
    </module>
    EOM
    
    cat > $USER_CLI_COMMANDS << "EOC" 
    ## Deploy sample application from local filesystem
    deploy --force /usr/share/java/jboss-ec2-eap-samples/cluster-demo.war
    
    ## ExampleDS configuration for MySQL database
    data-source remove --name=ExampleDS
    /subsystem=datasources/jdbc-driver=mysql:add(driver-name="mysql",driver-module-name="com.mysql")
    data-source add --name=ExampleDS --connection-url="jdbc:mysql://${db.host}:3306/${db.database}" --jndi-name=java:jboss/datasources/ExampleDS --driver-name=mysql --user-name="${db.user}" --password="${db.passwd}"
    /subsystem=datasources/data-source=ExampleDS:enable
    /subsystem=datasources/data-source=ExampleDS:test-connection-in-pool
    EOC
    
    ## this will workaround the problem that in a VPC, instance hostnames are not resolvable
    echo -e "127.0.0.1\tlocalhost.localdomain localhost" > /etc/hosts
    echo -e "::1\tlocalhost6.localdomain6 localhost6" >> /etc/hosts
    for (( i=1 ; i<255 ; i++ )); do
       echo -e "$SUBNET$i\tip-${SUBNET//./-}$i" ;
    done >> /etc/hosts
    
    EOF
結果

クラスター JBoss EAP 6 AMI が正常に設定および起動されます。