Você está na página 1de 17

PoderJudicirio

TribunaldeJustiadoEstadodeRoraima

WILDFLY 8.2
MODCLUSTER 1.3.0
Conceitos, Instalao e
Configurao

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

SUMRIO
1. Conceitos

1.1 Modos de Operao

1.2 Mdulos

2. Instalao

2.1 Mdulos JDBC

2.2 Mdulos TJRR

3. Configurao
3.1 Servidor Master

7
7

3.1.1 Adicionar conexes JDBC

3.1.2 Sistema de mensagens

3.1.3 SSO utilizando o AAS

10

3.1.4 Data-source utilizando security-domain

11

3.1.5 Preparao modcluster

11

3.1.6 Cadastro do servidor slave

12

3.2 Servidor Slave

12

3.3 Servidor Master e Slave

14

4. Modcluster

15

4.1 Pr-requisitos

15

4.2 Compilao

15

4.3 Instalao

16

5. Referncias

17

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

1. Conceitos
1.1 Modos de operao
O servidor de aplicao wildfly pode ser iniciado em 2 modos diferentes de
operao. O modo domnio gerenciado (managed domain) permite rodar e
gerenciar uma topologia multi-servidor. J no modo servidor independente
(standalone mode) apenas uma instncia utilizada.
No standalone mode possvel iniciar o servidor com diferentes profiles:
Standalone:
profile
padro.
Definido
no
arquivo
<standalone/configuration/standalone.xml> a configurao certificada
JEE 7 web profile com as tecnologias necessrias.
Standalone-ha:
Definido
no
arquivo
<standalone/configuration/standalone-ha.xml> a configurao do
standalone.xml com alta disponibilidade.
Standalone-full:
Definido
no
arquivo
<standalone/configuration/standalone-full.xml>

a
configurao
certificada JEE 7 full profile incluindo todas as tecnologias JEE 7
necessrias.
Standalone-full-ha:
Definido
no
arquivo
<standalone/configuration/standalone-full-ha.xml> a configurao do
standalone-full.xml com alta disponibilidade.
No
managed
domain
existe
apenas
o
arquivo
<domain/configuration/domain.xml> (padro) com o profile web e full, ambos
com e sem alta disponibilidade.
Para iniciar o servidor de aplicao fornecendo o profile como parmetro no
standalone mode:
$ ./bin/standalone.sh --server-config=standalone.xml

J no managed domain:
$ .bin/domain.sh --domain-config=domain.xml

No managed domain existe ainda um arquivo host.xml dentro do diretrio


<domain/configuration> que define se o host configurado ser master ou
slave. Existem 2 arquivos de exemplo no diretrio (<host-master.xml> e
<host-slave.xml>).

1.2 Mdulos
Na verso anterior do servidor de aplicao, JBoss AS 7, os mdulos ficavam
todos espalhados dentro do diretrio <modules>. Conforme novos mdulos
iam sendo adicionados ficava difcil saber qual mdulo era nativo e qual havia

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

sido adicionado pelo usurio. Como soluo para este problema no Wildfly os
mdulos nativos ficam dentro do diretrio <modules/system/layers/base> e os
mdulos extras podem ser adicionados dentro de <modules> apenas, ficando
separados dos mdulos originais.
Um mdulo composto por um diretrio que o define, um subdiretrio
definindo o slot que por padro o main com os jars e um arquivo chamado
<module.xml> que descreve as dependncias do mdulo.
modules/br/jus/tjrr/aas (definio)
modules/br/jus/tjrr/aas/main (slot padro)
modules/br/jus/tjrr/aas/1.0 (slot 1.0)

Exemplo do module.xml para o groovy:


<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="groovy-all">
<resources>
<resource-root path="groovy-all-2.4.3.jar"/>
</resources>
<dependencies>
<module name="javax.api" />
<module name="org.javassist" />
<module name="org.slf4j" />
<module name="javax.xml.bind.api" />
</dependencies>
</module>

Com o mdulo adicionado para poder utiliz-lo necessrio reiniciar o servidor


de aplicao e fazer o deploy de uma aplicao que utilize o mdulo como
dependncia. possvel forar que o mdulo seja carregado pelo wildfly e fique
disponvel para todas as aplicaes, sem a necessidade de especificar a
dependncia, adicionando no arquivo xml de configurao do servidor (cuidar
pra colocar no arquivo que est sendo utilizado) o mdulo como global dentro
do subsystem urn:jboss:domain:ee:2.0.
Exemplo:

<subsystem xmlns="urn:jboss:domain:ee:2.0">
<global-modules>
<module name="groovy-all"/>
</global-modules>
...

2. Instalao
Para instalar o servidor de aplicao basta extrair o zip ou tar.gz baixado do

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

site oficial para o diretrio de preferncia (/usr/local/wildfly) e iniciar a


configurao.

2.1 Mdulos JDBC


Dentro do Tribunal de Justia do Estado de Roraima so utilizados 3 (trs)
bancos de dados: Postgres, Mysql e Oracle. preciso adicionar os drivers JDBC
de cada banco de dado como mdulos no Wildfly.
No
mdulo
do
Oracle
criamos
a
estrutura
<modules/com/oracle/classes12/main> com o <classes12-10.2.0.2.0.jar> e
<module.xml> com o seguinte contedo:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.oracle.classes12">
<resources>
<resource-root path="classes12-10.2.0.2.0.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>

Para o mdulo do Mysql criamos a estrutura <modules/mysql/main> com o


<mysql-connector-java-5.1.23.jar> e module.xml com o seguinte contedo:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="mysql">
<resources>
<resource-root path="mysql-connector-java-5.1.23.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
Para o mdulo do Postgres criamos a estrutura <modules/postgres/main> com
o <postgresql-9.1-903.jdbc4.jar> e <module.xml> com o seguinte contedo:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="postgres">
<resources>
<resource-root path="postgresql-9.1-903.jdbc4.jar"/>
</resources>
<dependencies>
<module name="javax.api"/>

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<module name="javax.transaction.api"/>
</dependencies>
</module>

2.2 Mdulos TJRR


A maior parte das aplicaes desenvolvidas no TJRR utilizam o Groovy e para
evitar que cada aplicao leve a mesma dependncia o adicionamos como
mdulo. Da mesma forma adicionamos o AAS que mdulo responsvel pela
autenticao e autorizao.
Para o mdulo do Groovy criamos a estrutura <modules/groovy-all/main> com
o <groovy-all-2.3.6.jar> e <module.xml> com o seguinte contedo:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="groovy-all">
<resources>
<resource-root path="groovy-all-2.3.6.jar"/>
</resources>
<dependencies>
<module name="javax.ejb.api" />
<module name="javax.persistence.api" />
<module name="org.hibernate" />
<module name="org.javassist" />
<module name="org.slf4j" />
<module name="javax.xml.bind.api" />
<module name="sun.jdk" />
</dependencies>
</module>
Para o mdulo do AAS criamos a estrutura <modules/tjrr/aas-module/main> com o <tjrr-aasdomain-1.1.1-SNAPSHOT.jar>, <tjrr-aas-module-1.1.1-SNAPSHOT.jar>, <tjrr-aas-remote-api1.1.1-SNAPSHOT.jar> e <module.xml> com o seguinte contedo:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="tjrr.aas-module">
<resources>
<resource-root path="tjrr-aas-domain-1.1.1-SNAPSHOT.jar"/>
<resource-root path="tjrr-aas-remote-api-1.1.1-SNAPSHOT.jar"/>
<resource-root path="tjrr-aas-module-1.1.1-SNAPSHOT.jar"/>
</resources>
<dependencies>
<module name="groovy-all" />
<module name="javax.ejb.api" />
<module name="javax.persistence.api" />
<module name="org.hibernate" />
<module name="org.javassist" />
<module name="org.slf4j" />
<module name="javax.xml.bind.api" />
</dependencies>
</module>

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

3. Configurao
3.1 Servidor Master
Vamos editar o arquivo <domain/configuration/host.xml> para iniciar as
configuraes:
<?xml version='1.0' encoding='UTF-8'?>
<host name="producao28m" xmlns="urn:jboss:domain:2.2"> <!-- nome do servidor -->
<management>
...
</management>
<domain-controller>
<local/>
</domain-controller>
<interfaces>
<interface name="management">
<inet-address value="10.50.1.28"/> <!-- ip para expor a interface de gerenciamento
-->
</interface>
<interface name="public">
<inet-address value="10.50.1.28"/> <!-- ip para expor a interface pblica (aplicaes)
-->
</interface>
<interface name="unsecure">
<any-address/>
</interface>
</interfaces>
<jvms>
<jvm name="default"> <!-- configuraes de memria -->
<heap size="3g" max-size="3g"/>
<permgen size="256m" max-size="512m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<servers directory-grouping="by-type"> <!-- necessrio para alterar o diretrio padro dos
logs -->
<server name="app-unicas-01" group="gp-app-unicas-01" auto-start="true"/> <!-grupo de aplicaes rodando na porta 8080 -->
<server name="app-replicadas" group="gp-app-replicadas" auto-start="true"> <!-grupo de aplicaes rodando na porta 8330 (8080 + 250 do offset) -->
<socket-bindings port-offset="250"/>
</server>
</servers>
</host>

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

Os grupos gp-app-unicas-01 e gp-app-replicadas sero definidos no final de


<domain.xml>:

<server-groups>
<server-group name="gp-app-unicas-01" profile="full-ha"> <!-- definio do grupo gpapp-unicas-01 -->
<jvm name="default">
<heap size="1024m" max-size="2048m"/> <!-- definio de memria do grupo gpapp-unicas-01 -->
</jvm>
<socket-binding-group ref="full-ha-sockets"/>
</server-group>
<server-group name="gp-app-unicas-02" profile="full-ha"> <!-- definio do grupo gpapp-unicas-02 -->
<jvm name="default">
<heap size="1024m" max-size="2048m"/> <!-- definio de memria do grupo gpapp-unicas-02 -->
</jvm>
<socket-binding-group ref="full-ha-sockets"/>
</server-group>
<server-group name="gp-app-replicadas" profile="full-ha"> <!-- definio do grupo gpapp-replicados -->
<jvm name="default">
<heap size="1024m" max-size="2048m"/> <!-- definio de memria do grupo gpapp-replicados -->
</jvm>
<socket-binding-group ref="full-ha-sockets"/>
</server-group>
</server-groups>

Os 3 (trs) grupos so configurados para utilizar o profile full-ha que habilita


todos os recursos e alta disponibilidade. O arquivo padro <domain.xml> vem
com a definio dos profiles: default, ha, full e full-ha. Para evitar confuso na
hora de editar o xml e acabar adicionando ou alterando recurso no profile
errado removemos as definies do profile default, ha e full, deixando apenas o
full-ha.
Busque pelo texto:
<subsystem xmlns="urn:jboss:domain:transactions:2.0">

E dentro do n core-environment adicione o atributo node-identifier com o


nome do n a ser configurado no profile (utilizado pelo mod_cluster):
<core-environment node-identifier="producao28m-full-ha">

3.1.1 Adicionar conexes JDBC


Busque pelo texto:
<subsystem xmlns="urn:jboss:domain:datasources:2.0">

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

E dentro do n datasources adicione a seguinte estrutura:


<datasource jta="true" jndi-name="java:jboss/datasources/tjrr-postgresql" pool-name="tjrrpostgresql" enabled="false" use-ccm="true">
<connection-url>jdbc:postgresql://10.50.1.14:5432/tjrr-producao</connectionurl>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgres</driver>
<pool>
<max-pool-size>15</max-pool-size>
</pool>
<security>
<security-domain>tjrr-producao-ds</security-domain> <!-- ser definido
posteriormente -->
</security>
<validation>
<check-valid-connection-sql>SELECT 1</check-valid-connection-sql>
<validate-on-match>true</validate-on-match>
<background-validation>true</background-validation>
</validation>
<statement>
<share-prepared-statements>false</share-prepared-statements>
</statement>
</datasource>

Dentro do n drivers adicione a seguinte estrutura para registrar os mdulos


JDBC Oracle, Mysql e Postgres:
<driver name="postgres" module="postgres">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasourceclass>
</driver>
<driver name="mysql" module="mysql">
<xa-datasourceclass>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
<driver name="oracle-classes12" module="com.oracle.classes12">
<driver-class>oracle.jdbc.OracleDriver</driver-class>
<xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xadatasource-class>
</driver>

Aps esta configurao do driver tambm possvel cadastrar o datasource via


interface de gerenciamento web que roda por padro na porta 9990.

3.1.2 Sistema de mensagens


necessrio criar uma senha no <domain.xml> do master que ser utilizada
para a troca de mensagens utilizando o hornetq entre os servidores.
Busque pelo texto:

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<subsystem xmlns="urn:jboss:domain:messaging:2.0">

E dentro do n hornetq-server adicione a seguinte estrutura substituindo a


senha:
<cluster-password>changeme</cluster-password>

Ainda dentro do subssystem busque pelo texto:


jms-destinations

E
adicione
as
seguintes
filas
(envioEmailQueue,
acompanhamentoDocumentoQueue,
ocorrenciaFuncionarioQueue
e
loggerQueue):
<jms-queue name="envioEmailQueue">
<entry name="queue/envioEmail"/>
<entry name="java:jboss/exported/jms/queue/envioEmail"/>
</jms-queue>
<jms-queue name="acompanhamentoDocumentoQueue">
<entry name="queue/acompanhamentoDocumento"/>
<entry
name="java:jboss/exported/jms/queue/acompanhamentoDocumento"/>
</jms-queue>
<jms-queue name="ocorrenciaFuncionarioQueue">
<entry name="queue/ocorrenciaFuncionario"/>
<entry name="java:jboss/exported/jms/queue/ocorrenciaFuncionario"/>
</jms-queue>
<jms-queue name="loggerQueue">
<entry name="queue/logger"/>
<entry name="java:jboss/exported/jms/queue/logger"/>
</jms-queue>

3.1.3 SSO utilizando o AAS


Para definir o domnio de SSO necessrio adicionar o domain e a partir de
qual path o cookie ser utilizado.
No <domain.xml> busque pelo texto:
<subsystem xmlns="urn:jboss:domain:undertow:1.2">

E dentro do n server, sub n host adicione a configurao aps os filtros


existentes:
<single-sign-on domain="sistemas.tjrr.jus.br" path="/"/>

Para habilitar o AAS busque pelo texto:


<subsystem xmlns="urn:jboss:domain:security:1.2">

E adicione o security-domain a seguir:


<security-domain name="tjrr-security" cache-type="default">

10

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<authentication>
<login-module
code="br.jus.tjrr.aas.security.TJRRLoginModule" flag="required"
module="tjrr.aas-module">
<module-option name="throwValidateError"
value="true"/>
</login-module>
</authentication>
</security-domain>
Seguindo estes passos as aplicaes que utilizam o AAS s precisaro que o
agente do AAS esteja rodando no servidor, procedimento realizado com um
deploy do agente para o servidor de aplicao posteriormente.

3.1.4 Data-source utilizando security-domain


Para permitir que o data-source utilize um security-domain, como configurado
no item 3.1.1, necessrio criar adicion-lo com a seguinte configurao
(substituindo o usurio e senha):
<security-domain name="tjrr-producao-ds" cache-type="default">
<authentication>
<login-module
code="org.picketbox.datasource.security.SecureIdentityLoginModule" flag="required">
<module-option name="username" value="username"/>
<module-option name="password" value="passwordhash"/>
</login-module>
</authentication>
</security-domain>

Para gerar o hash da senha execute o seguinte comando dentro de


<bin/client> substituindo a senha:
java -cp jboss-cli-client.jar org.picketbox.datasource.security.SecureIdentityLoginModule
password

3.1.5 Preparao modcluster


Mesmo ainda no configurando o apache com o modcluster habilitado j vamos
realizar a configurao do mesmo no wildfly.
No <doman.xml> busque pelo texto:
<subsystem xmlns="urn:jboss:domain:modcluster:1.2">

E ajuste para o ambiente seguindo o modelo (substituir o ip e a porta):


<mod-cluster-config advertise-socket="modcluster" proxy-list="ip:porta" advertise="false"
sticky-session="true" connector="ajp">
<dynamic-load-provider>

11

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<load-metric type="cpu"/>
</dynamic-load-provider>
</mod-cluster-config>

Com isso basta ter o modcluster configurado no apache no ip especificado que


o modcluster inicia o balanceamento.

3.1.6 Cadastro do servidor slave


Para configurar o slave necessrio criar um usurio e senha para
comunicao com o master. O procedimento realizado iniciando o servidor de
aplicao e rodando o seguinte comando:
$ bin/add-user.sh

1.
2.
3.
4.
5.
6.
7.

Crie como Management User, opo a.


Entre com o nome do usurio.
Entre com a senha.
Confirme a senha.
No adicione a nenhum grupo.
Confirme as informaes.
Responsa yes para a pergunta confirmando que deseja utilizar este
usurio para conexo de master/slave.
8. Anote o secret gerado que ser utilizado posteriormente no slave.

3.2 Servidor Slave


Copie o <domain.xml> do master e altere apenas o node-identifier dentro do
subsystem xmlns="urn:jboss:domain:transactions:2.0" para no conflitar com
o master.
Vamos alterar o <host.xml> conforme o modelo:
<?xml version='1.0' encoding='UTF-8'?>
<host name="producao30s" xmlns="urn:jboss:domain:2.2"> <!-- troque pelo usurio criado
no master -->
<management>
<security-realms>
<security-realm name="ManagementRealm">
<server-identities>
<secret value="TldWbU9EbGxZMlEwWkRaaE1tTmhNelU0TldGa01tWmg="/> <!-secret gerado no passo 8 do item 3.1.6 -->
</server-identities>
<authentication>
<local default-user="$local" skip-group-loading="true"/>
<properties path="mgmt-users.properties" relative-

12

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

to="jboss.domain.config.dir"/>
</authentication>
<authorization map-groups-to-roles="false">
<properties path="mgmt-groups.properties" relativeto="jboss.domain.config.dir"/>
</authorization>
</security-realm>
<security-realm name="ApplicationRealm">
<authentication>
<local default-user="$local" allowed-users="*" skip-group-loading="true"/>
<properties path="application-users.properties" relativeto="jboss.domain.config.dir"/>
</authentication>
<authorization>
<properties path="application-roles.properties" relativeto="jboss.domain.config.dir"/>
</authorization>
</security-realm>
</security-realms>
<audit-log>
<formatters>
<json-formatter name="json-formatter"/>
</formatters>
<handlers>
<file-handler name="host-file" formatter="json-formatter" path="audit-log.log"
relative-to="jboss.domain.data.dir"/>
<file-handler name="server-file" formatter="json-formatter" path="audit-log.log"
relative-to="jboss.server.data.dir"/>
</handlers>
<logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="host-file"/>
</handlers>
</logger>
<server-logger log-boot="true" log-read-only="false" enabled="false">
<handlers>
<handler name="server-file"/>
</handlers>
</server-logger>
</audit-log>
<management-interfaces>
<native-interface security-realm="ManagementRealm">
<socket interface="management" port="$
{jboss.management.native.port:9999}"/>
</native-interface>
</management-interfaces>
</management>
<domain-controller>

<remote
host="${jboss.domain.master.address}"
{jboss.domain.master.port:9999}" security-realm="ManagementRealm"/> <!-variveis para passar via script de inicializao para encontrar o master -->
</domain-controller>

port="$
definindo

13

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<interfaces>
<interface name="management">
<inet-address value="10.50.1.30"/> <!-- ip da mquina slave -->
</interface>
<interface name="public">
<inet-address value="10.50.1.30"/> <!-- ip da mquina slave -->
</interface>
<interface name="unsecure">
<any-address/>
</interface>
</interfaces>
<jvms>
<jvm name="default">
<heap size="3g" max-size="3g"/>
<permgen size="256m" max-size="512m"/>
<jvm-options>
<option value="-server"/>
</jvm-options>
</jvm>
</jvms>
<servers directory-grouping="by-type"> <!-- necessrio para alterar o diretrio padro dos
logs -->
<server name="app-unicas-02" group="gp-app-unicas-02" auto-start="true"> <!-grupo de aplicaes 2 rodando na porta 8230 (8080 + 150) -->
<socket-bindings port-offset="150"/>
</server>
<server name="app-replicadas" group="gp-app-replicadas" auto-start="true"> <!-grupo de aplicaes replicadas rodando na porta 8330 (8080 + 250) -->
<socket-bindings port-offset="250"/>
</server>
</servers>
</host>

3.3 Servidor Master e Slave


Edite o arquivo <bin/domain.conf> no master, altere o ipmaster e adicione
dentro do bloco a linha realada:
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Djgroups.bind_addr=ipmaster -Djboss.domain.log.dir=/var/log/wildfly"
JAVA_OPTS="$JAVA_OPTS -Xms3g -Xmx3g -XX:MaxPermSize=512m -XX:MaxNewSize=1g
-XX:NewSize=1g -XX:SurvivorRatio=6 -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
-Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true
-Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS
-Djava.awt.headless=true"
else
echo "JAVA_OPTS already set in environment; overriding default settings with values:
$JAVA_OPTS"
fi

14

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

Edite o mesmo arquivo no slave, altere o ipmaster e adicione dentro do bloco a


linha realada:
if [ "x$JAVA_OPTS" = "x" ]; then
JAVA_OPTS="-Djgroups.bind_addr=ipmaster -Djboss.domain.master.address=ipmaster
-Djboss.domain.master.port=9999 -Djboss.domain.log.dir=/var/log/wildfly"
JAVA_OPTS="$JAVA_OPTS -Xms3g -Xmx3g -XX:MaxPermSize=512m -XX:MaxNewSize=1g
-XX:NewSize=1g -XX:SurvivorRatio=6 -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC
-Djava.net.preferIPv4Stack=true -Dorg.jboss.resolver.warning=true
-Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000"
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS
-Djava.awt.headless=true"
else
echo "JAVA_OPTS already set in environment; overriding default settings with values:
$JAVA_OPTS"
fi

Com estes procedimentos est finalizada a configurao dos servidores de


aplicao para funcionar como master e slave. Caso queria adicionar mais um
slave basta repetir a tarefa criando um novo usurio na etapa 3.1.6 para o
outro servidor slave.
Copie o <domain.xml> do master e altere apenas o node-identifier dentro do
subsystem xmlns="urn:jboss:domain:transactions:2.0" para no conflitar com
o master.

4. Modcluster
Infelizmente a ltima verso disponvel do modcluster no site a 1.2.6.Final
que no compatvel com o apache 2.4 que est disponvel para a maior parte
das distribuies. Para fazer o modcluster funcionar no apache 2.4 necessrio
compilar os fontes da verso 1.3.0.Final e adicionar no apache seguindo os
prximos passos.

4.1 Pr-requisitos
Instalar as dependncias:
#
#
#
#

apt-get
apt-get
apt-get
apt-get

update
install -y autoconf libtool git apache2
remove apache2-threaded-dev
install -y apache2-prefork-dev

4.2 Compilao
Baixar o fonte da verso 1.3.0.Final:
$ git clone https://github.com/modcluster/mod_cluster.git
$ git checkout 1.3.0.Final

15

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

$ cd mod_cluster

Compilar os mdulos:
$
$
$
$

cd native/advertise
./buildconf
./configure --with-apxs=/usr/bin/apxs
make

$
$
$
$

cd ../mod_manager
./buildconf
./configure --with-apxs=/usr/bin/apxs
make

$
$
$
$

cd ../mod_proxy_cluster
./buildconf
./configure --with-apxs=/usr/bin/apxs
make

$
$
$
$

cd ../mod_cluster_slotmem
./buildconf
./configure --with-apxs=/usr/bin/apxs
make

4.3 Instalao
A instalao realizada copiando os mdulos gerado na etapa anterior para a
instalao do apache.
#
#
#
#

cp native/advertise/*.so /usr/lib/apache2/modules/
cp native/mod_manager/*.so /usr/lib/apache2/modules/
cp native/mod_proxy_cluster/*.so /usr/lib/apache2/modules/
cp native/mod_cluster_slotmem/*.so /usr/lib/apache2/modules/

Criar o arquivo </etc/apache2/mods-available/proxy_cluster.load> com o


seguinte contedo:
LoadModule
LoadModule
LoadModule
LoadModule

advertise_module /usr/lib/apache2/modules/mod_advertise.so
manager_module /usr/lib/apache2/modules/mod_manager.so
proxy_cluster_module /usr/lib/apache2/modules/mod_proxy_cluster.so
slotmem_module /usr/lib/apache2/modules/mod_cluster_slotmem.so

Crie
um
link
simblico
para
o
</etc/apache2/modsavailable/proxy_cluster.load> dentro de </etc/apache2/mods-enabled> com o
nome <proxy_cluster.load>:
# ln -s /etc/apache2/mods-available/proxy_cluster.load /etc/apache2/modsenabled/proxy_cluster.load

Edite o arquivo </etc/apache2/sites-available/default> e adicione ao final o


seguinte contedo:

16

PoderJudicirio
TribunaldeJustiadoEstadodeRoraima

<IfModule proxy_module>
Listen *:8080
Listen *:5588
ManagerBalancerName tjrr-ha-balancer
MemManagerFile /var/cache/mod_cluster
<VirtualHost *:8080>
<Location />
Order deny,allow
Allow from all
#Require all granted
</Location>
KeepAliveTimeout 900
MaxKeepAliveRequests 0
EnableMCPMReceive
ServerAdvertise Off
</VirtualHost>
<VirtualHost *:5588>
<Location /modcluster>
SetHandler mod_cluster-manager
AuthType Basic
AuthName "TJRR-Balancer"
AuthUserFile /etc/modclusterpassword
Require user tjadmin
</Location>
</VirtualHost>
</IfModule>

Crie o arquivo </etc/modclusterpassword> para proteger a interface de


adminitrao do modcluster que roda na porta 5588, contexto /modcluster,
adicionando usurios e as respectivas senhas:
# htpasswd -c /etc/modclusterpassword username

Com isso o master e o slave devem aparecer na interface administrativa.

5. Referncias
1. https://jbossdivers.wordpress.com/2014/03/23/configurando-umambiente-wildfly-8-profissional/
2. https://jbossdivers.wordpress.com/2014/03/23/configurando-umambiente-wildfly-8-profissional-parte-2/
3. http://blog.alexis-hassler.com/2014/08/compiler-modcluster-pourapache24.html
4. https://jbossdivers.wordpress.com/2013/11/11/protegendo-o-mod-clustermanager/

17