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
- 选择 AMI
- 定义想要的实例的数量(群集大小)。
- 选择 VPC 和实例类型。
- 点击 Security Group。
- 确保来自 JBoss EAP 6 群集子网的所有流量都是被允许的。
- 按需要定义其他限制。
- 在 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。