Clusterização e Load Balance com Jboss AS
Fábio Sartori
Arquiteto de Sistemas
www.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
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, a mesma verifica se a partição definida para ela já existe, caso sim, ela ingressa, caso contrário, a partição será criada.
!! Quando uma partição é removida ? !! Quando todas as instâncias que participam dela, forem
removidas (saírem do ar).
Clusterização JBoss !! Onde é configurado o serviço de cluster ?
!! Deploy/cluster-service.xml.
!! Como definir o nome da partição (cluster) ? !! Através do atributo jboss.partition.name que pode ser
definido na inicialização do servidor
Clusterização JBoss !! Como verificar informações sobre o cluster ?
!! Informações podem ser acessadas via jmx-console ou qualquer cliente jmx
!! Ex: !! http://localhost:8080/jmx-console/
!! Jboss:service=<NOME_DA_PARTICAO>
!! Verifique o atributo CurrentView
Clusterização JBoss
Load Balancer !! Serviço responsável por distribuir a carga entre os
nodos do cluster.
!! Serviços de balanceamento de carga devem sempre ser monitorados com atenção, pois, como eles centralizam as requisições, os mesmos são gargalos. PONTO DE ATENÇÃO !!!
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
AS01
Apache
AS02
Apache
AS03
Apache
JBoss JBoss JBoss
Load Balancer
Cluster de Banco de dados
Storage
Exemplo de Cenário
Cenário do Tutorial
clr01
websrv
Apache
clr02
JBoss JBoss
Load Balancer
Cenário do Tutorial
Usuário
Ambiente !! Sistema Operacional
!! Linux Kernel 2.6.x.x !! CentOS 5 será utilizado neste tutorial
!! JVM !! 1.5.0_14-b03
!! Servidor de aplicações !! Jboss-4.2.2.GA
!! Load Balance !! Apache 2
!! Módulo mod_jk
Configurando o Sistema Operacional
!! Grupo
!! Usuário
!! Diretório para o ambiente java
Criando grupo no sistema operacional
!! Crie o grupo jsadmin
Criando usuário no sistema operacional
!! Crie o usuário jsadmin, no grupo 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
Configurando variáveis de ambiente
!! Criar um arquivo java_profile.sh, dentro do diretório /opt/java
!! Este arquivo servirá como profile do ambiente java
Configurando variáveis de ambiente
Profile !! Configurando o profile do usuário jsadmin
!! Adicionar ao final do arquivo o conteúdo abaixo:
Configurando JBoss !! Com o usuário jsadmin, acessar o diretório $JDIR
!! Verifique os containers disponíveis
Criando o container !! Faça uma cópia do container “all”, com o nome de
cluster-fs
Configurando o nome do Cluster e IP dos nodos
•! Edite o arquivo $JBOSS_HOME/bin/run.conf
•! Adicione ao final do arquivo
Configuração do Apache !! Deverá ser feita na máquina que fará o
balanceamento com o usuário root
!!Módulo mod_jk
Configuração do arquivo jk.conf !! No diretório <APACHE2_HOME>/conf.d
!! Criar o arquivo jk.conf
Configuração do arquivo jk.conf JkWorkersFile workers.properties # Where to put jk logs JkLogFile /var/log/apache2/mod_jk.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.properties JkShmFile /var/log/apache2/jk.shm <Location /jkstatus/> JkMount status Order deny,allow Deny from all Allow from 127.0.0.1 </Location>
Configuração dos Workers !!Especifica onde estão os containers que serão
balanceados
Configuração do arquivo workers.properties
!! No diretório <APACHE2_HOME>/conf
!! Criar o arquivo workers.properties
Configuração do arquivo workers.properties
#Definicao dos workers que serao usados para mapear as requisicoes worker.list=loadbalancer,status #Definicao no nodo node1 worker.node1.port=8009 worker.node1.host=clr01.fabiosartori.info worker.node1.type=ajp13 #Nro de reqs para este nodo worker.node1.lbfactor=1 worker.node1.cachesize=10 #Definicao no nodo node2 worker.node2.port=8009 worker.node2.host=clr02.fabiosartori.info worker.node2.type=ajp13 worker.node2.lbfactor=1 worker.node2.cachesize=10 #Load-Balancer worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 #Sessao persistida em determinado servidor worker.loadbalancer.sticky_session=1 #Worker de status para gerenciar o load balancer worker.status.type=status
Configuração do uriworkermap.properties
!! Especifica os contextos que serão balanceados
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
Configuração do Tomcat
$
•! Editar o o arquivo de configuração do tomcat
•! Adicione a sessão <Engine name="jboss.web”, 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
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.
!! Em cluster, há como fazer um deploy single instance ? !! Sim, para isto, é só fazer deploy no diretório deploy/
Hot Deploy FARM
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.
!! Como configurar uma aplicação web para que a mesma replique sessões ? !! Utilize a tag <distributable/> no web.xml.
Aplicações WEB <web-app ....... >
<distributable/> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
</web-app>
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.cache:service=TomcatClusteringCache e execute a operação printDetails
Aplicações WEB
Exemplo !!Web
EJB3 !! O que é necessário para clusterizar componentes
EJB3 ? !! Basicamente, tudo o que você precisa fazer é anotar
o componente com @Clustered.
EJB3 @Stateful @Clustered public class StatefulBlaBean implements StatefulBla, Serializable {
. . . }
@Stateless @Clustered public class StatelessBlaBean implements StatelessBla { . . . }
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 ???