Clusterização e Load Balance

com Jboss AS
Fábio Sartori
Arquiteto de Sistemas
www.fabiosartori.info
fabio@fabiosartori.info

Clusterização JBoss
!! O que será visto ?
!! Definição de cluster
!! Definição de load balancer
!! Exemplos de aplicações
!! Configuração de um cluster com load balancer

Clusterização JBoss
!! O que não será visto ?
!! Padrões de desenvolvimento
!! Customização de servidor
!! Tunning de AS e aplicações
!! Instalação do apache

Clusterização JBoss !! Definição !! Um conjunto de instâncias de AS. agrupadas sob a forma de uma partição. !! Logo !! Instância de JBoss = Nodo !! Cluster = Partição .

Clusterização JBoss Partição “FSCluster” Nodo Jboss 1 Nodo Jboss 2 Nodo Jboss 3 .

. caso sim. a mesma verifica se a partição definida para ela já existe. a partição será criada. caso contrário. ela ingressa.Clusterização JBoss !! O que é necessário para criar um cluster JBoss ? !! Que uma ou mais instâncias ingressem em uma mesma partição. !! Como é criada uma partição ? !! Sempre que uma instância é inicializada com o serviço de cluster. forem removidas (saírem do ar). !! Quando uma partição é removida ? !! Quando todas as instâncias que participam dela.

partition.name que pode ser definido na inicialização do servidor .xml.Clusterização JBoss !! Onde é configurado o serviço de cluster ? !! Deploy/cluster-service. !! Como definir o nome da partição (cluster) ? !! Através do atributo jboss.

Clusterização JBoss !! Como verificar informações sobre o cluster ? !! Informações podem ser acessadas via jmxconsole ou qualquer cliente jmx !! Ex: !! http://localhost:8080/jmx-console/ !! Jboss:service=<NOME_DA_PARTICAO> !! Verifique o atributo CurrentView .

Clusterização JBoss .

os mesmos são gargalos. como eles centralizam as requisições. PONTO DE ATENÇÃO !!! . pois. !! Serviços de balanceamento de carga devem sempre ser monitorados com atenção.Load Balancer !! Serviço responsável por distribuir a carga entre os nodos do cluster.

Load Balancer !! Como é feito o balanceamento de carga ? !! Através de algorítmos de balanceamento. entre eles: !! Round-Robin !! Uma requisição para cada instância !! First Available !! Precisa responder ! ?? .

Cenário Básico Load Balancer Cluster de Servidores de Aplicação Cluster Banco de Dados .

Exemplo de Cenário Load Balancer Apache Apache Apache AS01 AS02 AS03 JBoss JBoss JBoss Cluster de Banco de dados Storage .

Cenário do Tutorial .

Cenário do Tutorial Usuário Load Balancer Apache websrv clr01 clr02 JBoss JBoss .

GA !! Load Balance !! Apache 2 !! Módulo mod_jk .5.2.6.x !! CentOS 5 será utilizado neste tutorial !! JVM !! 1.x.2.Ambiente !! Sistema Operacional !! Linux Kernel 2.0_14-b03 !! Servidor de aplicações !! Jboss-4.

Configurando o Sistema Operacional !! Grupo !! Usuário !! Diretório para o ambiente java .

Criando grupo no sistema operacional !! Crie o grupo jsadmin .

no grupo jsadmin .Criando usuário no sistema operacional !! Crie o usuário jsadmin.

Modificando a senha do usuário !! Modificar a senha do usuário jsadmin .

Criar diretório para o ambiente java .

Instalando o Ambiente Java !! JVM !! JBoss !! Variáveis de ambiente java !! Profile do usuário jsadmin .

Instalando a JVM .

Instalando JBoss .

Instalando o Ambiente Java !! Concedendo permissões no diretório .

dentro do diretório /opt/java !! Este arquivo servirá como profile do ambiente java .sh.Configurando variáveis de ambiente !! Criar um arquivo java_profile.

Configurando variáveis de ambiente .

Profile !! Configurando o profile do usuário jsadmin !! Adicionar ao final do arquivo o conteúdo abaixo: .

acessar o diretório $JDIR !! Verifique os containers disponíveis .Configurando JBoss !! Com o usuário jsadmin.

Criando o container !! Faça uma cópia do container “all”. com o nome de cluster-fs .

conf •! Adicione ao final do arquivo .Configurando o nome do Cluster e IP dos nodos •! Edite o arquivo $JBOSS_HOME/bin/ run.

Configuração do Apache !! Deverá ser feita na máquina que fará o balanceamento com o usuário root !! Módulo mod_jk .

d !! Criar o arquivo jk.conf !! No diretório <APACHE2_HOME>/conf.conf .Configuração do arquivo jk.

0.Configuração do arquivo jk.properties JkShmFile /var/log/apache2/jk.0.1 </Location> .properties # Where to put jk logs JkLogFile /var/log/apache2/mod_jk.shm <Location /jkstatus/> JkMount status Order deny.conf JkWorkersFile workers.allow Deny from all Allow from 127.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]” # JkOptions indicates to send SSK KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T” JkMountFile uriworkermap.

Configuração dos Workers !! Especifica onde estão os containers que serão balanceados .

Configuração do arquivo workers.properties .properties !! No diretório <APACHE2_HOME>/conf !! Criar o arquivo workers.

type=ajp13 worker.status #Definicao no nodo node1 worker.status.properties #Definicao dos workers que serao usados para mapear as requisicoes worker.node1.list=loadbalancer.node1.loadbalancer.cachesize=10 #Definicao no nodo node2 worker.sticky_session=1 #Worker de status para gerenciar o load balancer worker.cachesize=10 #Load-Balancer worker.fabiosartori.lbfactor=1 worker.port=8009 worker.port=8009 worker.type=lb worker.info worker.host=clr02.loadbalancer.info worker.type=ajp13 #Nro de reqs para este nodo worker.node2.node1.node1.balance_workers=node1.type=status .fabiosartori.node2.node1.loadbalancer.host=clr01.node2.node2 #Sessao persistida em determinado servidor worker.node2.Configuração do arquivo workers.lbfactor=1 worker.node2.

properties !! Especifica os contextos que serão balanceados .Configuração do uriworkermap.

Configuração do arquivo
uriworkermap.properties
!! No diretório <APACHE2_HOME>/conf
!! Criar o arquivo uriworkermap.properties

Configuração do arquivo
uriworkermap.properties

Configuração do Tomcat
!! Container
!! Configurando o cluster

web”.Configuração do Tomcat •! Editar o o arquivo de configuração do tomcat $ •! Adicione a sessão <Engine name="jboss. o conteúdo abaixo: .

Configuração do Tomcat •! Ative o módulo jk •! Adicione / Descomente o atributo UseJK .

Ativando o JBoss •! Conceda permissões no script run.sh •! Ative o JBoss .

Ativando o Apache .

para isto. !! Em cluster.Hot Deploy FARM !! Uma aplicação pode ser disponibilizada para todo o cluster (partition) automaticamente com o uso do Farming Deployment. !! Como fazer Farming Deployment ? !! Faça deploy no diretório farm/ de uma das instâncias do cluster (partition) e a aplicação será disponibilizada para automaticamente para os outros nós. é só fazer deploy no diretório deploy/ . há como fazer um deploy single instance ? !! Sim.

Hot Deploy FARM .

!! Como configurar uma aplicação web para que a mesma replique sessões ? !! Utilize a tag <distributable/> no web. .xml.Aplicações WEB !! Quais são os ajustes necessários em uma aplicação web tenha alta disponibilidade ? !! Ela precisa replicar o estado das sessões entre os nodos.

. > <distributable/> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> .....Aplicações WEB <web-app ..

cache:service=TomcatClusteringCache e execute a operação printDetails .Aplicações WEB !! Como monitorar o estado das sessões ? !! Através de algum cliente jmx ou do jmx-console !! http://localhost:8080/jmx-console/ !! Clique no MBean jboss.

Aplicações WEB .

Exemplo !! Web .

tudo o que você precisa fazer é anotar o componente com @Clustered. .EJB3 !! O que é necessário para clusterizar componentes EJB3 ? !! Basicamente.

@Stateless @Clustered public class StatelessBlaBean implements StatelessBla { . } . . Serializable { } . .EJB3 @Stateful @Clustered public class StatefulBlaBean implements StatefulBla. . .

EJB3 !! Como verificar os componentes disponibilizados ? !! Através de algum cliente jmx ou do jmx-console !! http://localhost:8080/jmx-console/ !! Clique no MBean jboss:service=JNDIView !! e execute a operação list .

EJB3 .

EJB3 .

MDB !! O que é necessário para clusterizar MDBs ? !! Basicamente. tudo o que você precisa fazer é anotar o componente com @Clustered. !! A fila deverá ser disponibilizada como singleton no farm .

MDB .

Exemplo !! MDB .

Perguntas ??? .