INTRODUCAOLoadbalancee uma aplicacao que recebe uma requisicao HTTP, e decide qualinstancia (servidor) chamar de um cluster de servidores. Nesse caso,estamos lidando com cluster de servidores JBoss AS 7, que podepossuir N servidores, que tambem sao chamados de instancias docluster. O loadbalance, atraves de criterios configurados, toma adecisao de chamar uma determinada instancia do cluster paraATENDER a requisicao HTTP. Um dos criterios usados, e verificarqual instancia do cluster de JBoss AS 7 esta ativa no momento ecom menos carga. Localizado a instancia, a requisicao edirecionada para ela. E tambem, se algumas instancias deixaram defuncionar, o loadbalance direciona as requisicoes para asinstancias ativas. Para isso, o loadbalance tambem conta commecanismo para verificar se as instancias estao vivas no momento,pois nao faz sentido redirecionar requisicoes para instanciasmortas.Veja nodesenho abaixo como que funciona um cluster de instancias do JBossAS com o loadbalance (Apache WebService + mod_cluster).CONFIGURACAO DECADA NODO DO JBOSS AS 7.1.31 Copie as pastasdo servidor JBOSS AS 7.1.3 e renomeie cada copia para:jboss-as-7.1.3.Final-node1jboss-as-7.1.3.Final-node2jboss-as-7.1.3.Final-node3Cada pasta sera umainstancia do servidor JBoss AS 7 e funcionara no modo STANDALONE.Para cada copia,alterar o arquivo standalone.conf que esta na pasta bindentro de cada instancia colocando os seguintes parametros:JAVA_OPTS="$JAVA_OPTS-Djboss.server.default.config=standalone-full-ha.xml" JAVA_OPTS="$JAVA_OPTS-Dorg.jboss.as.logging.per-deployment=false" # Esse offset deve serdiferente para cada nodo. JAVA_OPTS="$JAVA_OPTS-Djboss.socket.binding.port-offset=1000" # O nome do nodo deveser diferente para cada nodo. JAVA_OPTS="$JAVA_OPTS-Djboss.node.name=nodo1"Lembrando que para cadainstancia, teremos o parametros -Djboss.node.name e-Djboss.socket.binding.port-offset diferentes.Podemos usar osseguintes valores para cada instancia: Instancia -Djboss.socket.binding.port-offset -Djboss.node.name jboss-as-7.1.3.Final-node1 1000 nodo1 jboss-as-7.1.3.Final-node2 2000 nodo2 jboss-as-7.1.3.Final-node3 3000 nodo3 Arquivostandalone-full-ha.xmlTambem, precisamosalterar o arquivo standalone-full-ha.xml para cadainstancia do cluster de acordo com as configuracoes a seguir:Na tag server,colocar o atributo name com o nome da instancia. Lembrando que essenome deve ser unico entre as instancias do cluster. Instancia Tag server, atributo name jboss-as-7.1.3.Final-node1 <server name="standalone-nodo-1" xmlns="urn:jboss:domain:1.3"> jboss-as-7.1.3.Final-node2 <server name="standalone-nodo-2" xmlns="urn:jboss:domain:1.3"> jboss-as-7.1.3.Final-node3 <server name="standalone-nodo-3" xmlns="urn:jboss:domain:1.3"> Dentro da tag servercolocar a seguinte tag para todas as instancias do cluster.<system-properties><propertyname="org.apache.tomcat.util.http.Parameters.MAX_COUNT"value="5000"/></system-properties>Essa propriedade defineo tamanho maximo de uma requisicao HTTP. Se nao definir essetamanho, ao fazer uma requisicao HTTP com muitos parametros naurl, a instancia que tratara a requisicao, podera lancarexcecao com erro 500.Dentro da tagcache-container colocar o seguinte atributo para iniciaro cache no inicio do servidor.start="EAGER"Existe um bug no JBossAS 7.1.x que nao inicia o cluster corretamente no infinispan(gerenciador de cache distribuido do JBoss AS 7.x). Para contornaresse problema, temos que iniciar todos os caches de forma EAGER(carrega tudo no inicio) e nao LAZY (padrao, carrega soquando o cache for de fato chamado por alguma aplicacao).No subsistema web,mudar a tag para:<subsystemxmlns="urn:jboss:domain:web:1.2"default-virtual-server="default-host"instance-id="${jboss.node.name}" native="false">Note que essa tag vaiinformar o nome do servidor configurado acima.Configurar asinterfaces com o codigo abaixo:<interfaces><interfacename="management"><inet-address value="${jboss.bind.address.management:0.0.0.0}"/></interface><interfacename="public"><inet-address value="${jboss.bind.address:0.0.0.0}"/></interface><!-- TODO -only show this if the jacorb subsystem is added --><interfacename="unsecure"><inet-address value="${jboss.bind.address.unsecure:0.0.0.0}"/></interface></interfaces>Na tagsocket-binding-group, alterar para as seguintes configuracoesde acordo com a instancia usada. Instancia Tag socket-binding-group jboss-as-7.1.3.Final-node1 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:1000}"> jboss-as-7.1.3.Final-node2 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:2000}"> jboss-as-7.1.3.Final-node3 <socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:3000}"> Nosubsistema modcluster, mudar a tag para:<subsystemxmlns="urn:jboss:domain:modcluster:1.1"> <mod-cluster-config advertise-socket="modcluster"connector="ajp"proxy-list="127.0.0.1:6666"> <dynamic-load-provider history="10"decay="2"> <load-metric type="cpu" weight="2"capacity="1"/> <load-metric type="sessions"weight="1" capacity="512"/> </dynamic-load-provider> </mod-cluster-config> </subsystem>Muitoimportante configurar o atributo proxy-list para oservidor de IP 127.0.0.1 (local) na porta 6666. Esse valor econfigurado tambem no arquivo httpd.conf do Apache Web Server(httpd). Se nao configurar isso, a