Revision: 8063173.
The configuration of clustered standalone and domain instances is not trivial and the documentation should contain some examples which the user can use as a starting point.
Note that the scripts below are only meant to serve as a starting point for you. Don't copy them into the documentation before checking that they really work. I have modified them after copying them from our tests and haven't tried them after modification.
Here's a sample user-data file for starting a clustered standalone instance that we use in our tests (modified a bit already). Note that the file will likely need to be polished before being included in the documentation. If you need some help with that, let me know.
#!/usr/bin/env bash # This is a template file for user data field for EC2 # Here is a quick reference: # # INTERNAL_IP_ADDRESS - the internal IP address of this EC2 instance which is mapped to a public address # ACCESS_KEY_ID - the access key ID to AWS # SECRET_ACCESS_KEY - the secret access key to AWS # S3_PING_BUCKET - the name of S3 bucket to use for JGroups S3_PING discovery # NODE_NAME - the name of this EAP node # this file is for RHEL 6/7, standalone mode only if [[ "`cat /etc/redhat-release`" = *"release 7"* ]]; then SERVICE_CONF_FILE=/etc/opt/rh/eap7/wildfly/eap7-standalone.conf START_COMMAND="systemctl start eap7-standalone" else SERVICE_CONF_FILE=/etc/sysconfig/eap7-standalone START_COMMAND="service eap7-standalone start" fi # replaceable environment variables INTERNAL_IP_ADDRESS=`ip addr show | grep eth0 -A 2 | head -n 3 | tail -n 1 | awk '{ print $2 }' | sed "s-/24--g" | cut -d'/' -f1` ACCESS_KEY_ID=###ACCESS_KEY_ID### SECRET_ACCESS_KEY=###SECRET_ACCESS_KEY### S3_PING_BUCKET=###S3_PING_BUCKET### NODE_NAME=###NODE_NAME### cp /etc/opt/rh/eap7/jboss-ec2-eap/standalone/standalone-ec2-ha.xml /opt/rh/eap7/root/usr/share/wildfly/standalone/configuration/standalone-ec2-ha.xml cp /opt/rh/eap7/root/usr/share/java/eap7-jboss-ec2-eap-samples/cluster-demo.war /opt/rh/eap7/root/usr/share/wildfly/standalone/deployments/ echo "WILDFLY_SERVER_CONFIG=standalone-ec2-ha.xml" >> $SERVICE_CONF_FILE echo "WILDFLY_BIND=$INTERNAL_IP_ADDRESS" >> $SERVICE_CONF_FILE echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.jgroups.s3_ping.access_key='$ACCESS_KEY_ID' -Djboss.jgroups.s3_ping.secret_access_key='$SECRET_ACCESS_KEY' -Djboss.jgroups.s3_ping.bucket='$S3_PING_BUCKET' -Djboss.jvmRoute=$NODE_NAME\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/standalone.conf echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.bind.address=$INTERNAL_IP_ADDRESS -Djboss.bind.address.private=$INTERNAL_IP_ADDRESS\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/standalone.conf # start EAP, don't forget that RHEL 7 does not wait for EAP to start before returning from the service start (in some cases, there's a longer than 90 second delay) $START_COMMAND
Here's a sample attempt at a user-data file for starting a clustered domain instance (domain controller). This will likely need some more work (e.g. try it out on EC2, get some input from developers, etc.).
#!/usr/bin/env bash # This is a template file for user data field for EC2 # Here is a quick reference: # # INTERNAL_IP_ADDRESS - the internal IP address of this EC2 instance which is mapped to a public address # ACCESS_KEY_ID - the access key ID to AWS # SECRET_ACCESS_KEY - the secret access key to AWS # S3_PING_BUCKET - the name of S3 bucket to use for JGroups S3_PING discovery # NODE_NAME - the name of this EAP node # this file is for RHEL 6/7, domain controller, domain mode test only if [[ "`cat /etc/redhat-release`" = *"release 7"* ]]; then SERVICE_CONF_FILE=/etc/opt/rh/eap7/wildfly/eap7-domain.conf START_COMMAND="systemctl start eap7-domain" else SERVICE_CONF_FILE=/etc/sysconfig/eap7-domain START_COMMAND="service eap7-domain start" fi # replaceable environment variables INTERNAL_IP_ADDRESS=`ip addr show | grep eth0 -A 2 | head -n 3 | tail -n 1 | awk '{ print $2 }' | sed "s-/24--g" | cut -d'/' -f1` ACCESS_KEY_ID=###ACCESS_KEY_ID### SECRET_ACCESS_KEY=###SECRET_ACCESS_KEY### S3_PING_BUCKET=###S3_PING_BUCKET### NODE_NAME=###NODE_NAME### cp /etc/opt/rh/eap7/jboss-ec2-eap/domain/domain-ec2.xml /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml echo "WILDFLY_SERVER_CONFIG=domain-ec2.xml" >> $SERVICE_CONF_FILE echo "WILDFLY_HOST_CONFIG=host-master.xml" >> $SERVICE_CONF_FILE echo "WILDFLY_BIND=$INTERNAL_IP_ADDRESS" >> $SERVICE_CONF_FILE echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.jgroups.s3_ping.access_key='$ACCESS_KEY_ID' -Djboss.jgroups.s3_ping.secret_access_key='$SECRET_ACCESS_KEY' -Djboss.jgroups.s3_ping.bucket='$S3_PING_BUCKET'\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.bind.address=$INTERNAL_IP_ADDRESS -Djboss.bind.address.private=$INTERNAL_IP_ADDRESS -Djboss.bind.address.management=$INTERNAL_IP_ADDRESS\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf echo 'HOST_CONTROLLER_JAVA_OPTS="$HOST_CONTROLLER_JAVA_OPTS $JAVA_OPTS"' >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf # set the servers to use ec2-ha profile sed -i 's/"main-server-group" profile="default"/"main-server-group" profile="ec2-ha"/g' /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml sed -i 's/socket-binding-group ref="standard-sockets"/socket-binding-group ref="ec2-ha-sockets"/g' /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml cd /opt/rh/eap7/root/usr/share/wildfly/domain/configuration echo "--- host-master.xml 2016-03-18 17:34:26.000000000 -0400 +++ host-master2.xml 2016-04-11 08:28:02.771000191 -0400 @@ -54,7 +54,15 @@ </management-interfaces> </management> <domain-controller> - <local/> +<local> + <discovery-options> + <discovery-option name=\"s3-discovery\" module=\"org.jboss.as.host-controller\" code=\"org.jboss.as.host.controller.discovery.S3Discovery\"> + <property name=\"access-key\" value=\"$ACCESS_KEY_ID\"/> + <property name=\"secret-access-key\" value=\"$SECRET_ACCESS_KEY\"/> + <property name=\"location\" value=\"$S3_PING_BUCKET\"/> + </discovery-option> + </discovery-options> +</local> </domain-controller> <interfaces> <interface name=\"management\"> " | patch host-master.xml cd - # add management user # user name: user # user password: secret_Passw0rd #echo "user=791dd9e631e1d9c6102be94410d767b0" >> /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/mgmt-users.properties #echo "user=Management" >> /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/mgmt-groups.properties cd /opt/rh/eap7/root/usr/share/wildfly/bin ./add-user.sh -u user -p secret_Passw0rd -e -g Management cd - # start EAP, don't forget that RHEL 7 does not wait for EAP to start before returning from the service start (in some cases, there's a longer than 90 second delay) $START_COMMAND # deploy /opt/rh/eap7/root/usr/share/java/eap7-jboss-ec2-eap-samples/cluster-demo.war # domain controller is still available on localhost, we didn't change anything /opt/rh/eap7/root/usr/share/wildfly/bin/jboss-cli.sh -c --controller=$INTERNAL_IP_ADDRESS:9990 --command='deploy /opt/rh/eap7/root/usr/share/java/eap7-jboss-ec2-eap-samples/cluster-demo.war --server-groups=main-server-group'
Here's a sample attempt at a user-data file for starting a clustered domain instance (host controller). This will likely need some more work (e.g. try it out on EC2, get some input from developers, etc.).
#!/usr/bin/env bash # This is a template file for user data field for EC2 # Here is a quick reference: # # INTERNAL_IP_ADDRESS - the internal IP address of this EC2 instance which is mapped to a public address # ACCESS_KEY_ID - the access key ID to AWS # SECRET_ACCESS_KEY - the secret access key to AWS # S3_PING_BUCKET - the name of S3 bucket to use for JGroups S3_PING discovery # NODE_NAME - the name of this EAP node as chosen by the test implementation # this file is for RHEL 6/7, host controller, domain mode test only if [[ "`cat /etc/redhat-release`" = *"release 7"* ]]; then SERVICE_CONF_FILE=/etc/opt/rh/eap7/wildfly/eap7-domain.conf START_COMMAND="systemctl start eap7-domain" else SERVICE_CONF_FILE=/etc/sysconfig/eap7-domain START_COMMAND="service eap7-domain start" fi # replaceable environment variables INTERNAL_IP_ADDRESS=`ip addr show | grep eth0 -A 2 | head -n 3 | tail -n 1 | awk '{ print $2 }' | sed "s-/24--g" | cut -d'/' -f1` ACCESS_KEY_ID=###ACCESS_KEY_ID### SECRET_ACCESS_KEY=###SECRET_ACCESS_KEY### S3_PING_BUCKET=###S3_PING_BUCKET### #NODE_NAME=###NODE_NAME### cp /etc/opt/rh/eap7/jboss-ec2-eap/domain/domain-ec2.xml /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml echo "WILDFLY_SERVER_CONFIG=domain-ec2.xml" >> $SERVICE_CONF_FILE echo "WILDFLY_BIND=$INTERNAL_IP_ADDRESS" >> $SERVICE_CONF_FILE echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.jgroups.s3_ping.access_key='$ACCESS_KEY_ID' -Djboss.jgroups.s3_ping.secret_access_key='$SECRET_ACCESS_KEY' -Djboss.jgroups.s3_ping.bucket='$S3_PING_BUCKET'\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf echo "JAVA_OPTS=\"\$JAVA_OPTS -Djboss.bind.address=$INTERNAL_IP_ADDRESS -Djboss.bind.address.private=$INTERNAL_IP_ADDRESS\"" >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf echo 'HOST_CONTROLLER_JAVA_OPTS="$HOST_CONTROLLER_JAVA_OPTS $JAVA_OPTS"' >> /opt/rh/eap7/root/usr/share/wildfly/bin/domain.conf # set the servers to use ec2-ha profile sed -i 's/"main-server-group" profile="default"/"main-server-group" profile="ec2-ha"/g' /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml sed -i 's/socket-binding-group ref="standard-sockets"/socket-binding-group ref="ec2-ha-sockets"/g' /opt/rh/eap7/root/usr/share/wildfly/domain/configuration/domain-ec2.xml cd /opt/rh/eap7/root/usr/share/wildfly/domain/configuration sed -i 's/<!--.*-->//g' host.xml # remove nasty '!' signs which break bash sed -i '/^[ ]*$/d' host.xml # remove nasty lines with ' ' whitespaces which break the patch sed -i 's/name="master"/name="user"/' host.xml # rename host controller to user - needed for proper authentication echo "--- host.xml 2016-04-13 02:27:57.867996131 -0400 +++ host2.xml 2016-04-13 02:30:05.903000742 -0400 @@ -56,7 +56,15 @@ </management-interfaces> </management> <domain-controller> - <local/> +<remote security-realm=\"ManagementRealm\"> + <discovery-options> + <discovery-option name=\"s3-discovery\" module=\"org.jboss.as.host-controller\" code=\"org.jboss.as.host.controller.discovery.S3Discovery\"> + <property name=\"access-key\" value=\"$ACCESS_KEY_ID\"/> + <property name=\"secret-access-key\" value=\"$SECRET_ACCESS_KEY\"/> + <property name=\"location\" value=\"$S3_PING_BUCKET\"/> + </discovery-option> + </discovery-options> +</remote> </domain-controller> <interfaces> <interface name=\"management\"> " | patch host.xml cd - # add management user # user name: user # user password: secret_Passw0rd cd /opt/rh/eap7/root/usr/share/wildfly/domain/configuration echo "--- host.xml 2016-04-12 09:58:40.257822819 +0200 +++ host2.xml 2016-04-12 12:55:38.786325206 +0200 @@ -7,6 +7,9 @@ <management> <security-realms> <security-realm name=\"ManagementRealm\"> + <server-identities> + <secret value=\"c2VjcmV0X1Bhc3N3MHJk\"/> + </server-identities> <authentication> <local default-user=\"\$local\" skip-group-loading=\"true\"/> <properties path=\"mgmt-users.properties\" relative-to=\"jboss.domain.config.dir\"/> " | patch host.xml cd - # start EAP, don't forget that RHEL 7 does not wait for EAP to start before returning from the service start (in some cases, there's a longer than 90 second delay) $START_COMMAND # don't deploy /opt/rh/eap7/root/usr/share/java/eap7-jboss-ec2-eap-samples/cluster-demo.war - it should have already been deployed by domain controller