25.2.3.11. 群集实例

25.2.3.11.1. 启动群集 JBoss EAP 6 AMI
概述

本节涵盖启动群集 JBoss EAP 6 AMI 的步骤

警告

在带有小于 24 位掩码的子网里或跨越多个子网运行 JBoss EAP 6 群集要求每个群集成员都对应唯一的服务器对等 ID。
关于如何使这样的配置可靠地运行,请参考 JBOSS_CLUSTER_ID 变量。

重要

Amazon EC2 的 auto-scaling 功能可能用于 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。