tutorial de clusterizacao e load balance de aplicacoes jee

61
Clusterização e Load Balance com Jboss AS Fábio Sartori Arquiteto de Sistemas www.fabiosartori.info [email protected]

Upload: fabio-sartori

Post on 04-Dec-2014

8.090 views

Category:

Technology


15 download

DESCRIPTION

Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

TRANSCRIPT

Page 1: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Clusterização e Load Balance com Jboss AS

Fábio Sartori

Arquiteto de Sistemas

www.fabiosartori.info

[email protected]

Page 2: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 3: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 4: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 5: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Clusterização JBoss

Partição “FSCluster”

Nodo Jboss 1

Nodo Jboss 2

Nodo Jboss 3

Page 6: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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).

Page 7: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 8: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 9: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Clusterização JBoss

Page 10: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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 !!!

Page 11: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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 ! ??

Page 12: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Cenário Básico

Load Balancer

Cluster de Servidores de Aplicação

Cluster Banco de Dados

Page 13: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

AS01

Apache

AS02

Apache

AS03

Apache

JBoss JBoss JBoss

Load Balancer

Cluster de Banco de dados

Storage

Exemplo de Cenário

Page 14: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Cenário do Tutorial

Page 15: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

clr01

websrv

Apache

clr02

JBoss JBoss

Load Balancer

Cenário do Tutorial

Usuário

Page 16: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 17: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configurando o Sistema Operacional

!! Grupo

!! Usuário

!! Diretório para o ambiente java

Page 18: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Criando grupo no sistema operacional

!! Crie o grupo jsadmin

Page 19: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Criando usuário no sistema operacional

!! Crie o usuário jsadmin, no grupo jsadmin

Page 20: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Modificando a senha do usuário

!!Modificar a senha do usuário jsadmin

Page 21: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Criar diretório para o ambiente java

Page 22: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Instalando o Ambiente Java !! JVM

!! JBoss

!! Variáveis de ambiente java

!! Profile do usuário jsadmin

Page 23: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Instalando a JVM

Page 24: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Instalando JBoss

Page 25: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 26: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 27: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configurando variáveis de ambiente

Page 28: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Profile !! Configurando o profile do usuário jsadmin

!! Adicionar ao final do arquivo o conteúdo abaixo:

Page 29: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configurando JBoss !! Com o usuário jsadmin, acessar o diretório $JDIR

!! Verifique os containers disponíveis

Page 30: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Criando o container !! Faça uma cópia do container “all”, com o nome de

cluster-fs

Page 31: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configurando o nome do Cluster e IP dos nodos

•! Edite o arquivo $JBOSS_HOME/bin/run.conf

•! Adicione ao final do arquivo

Page 32: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do Apache !! Deverá ser feita na máquina que fará o

balanceamento com o usuário root

!!Módulo mod_jk

Page 33: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

!! Criar o arquivo jk.conf

Page 34: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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>

Page 35: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

balanceados

Page 36: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do arquivo workers.properties

!! No diretório <APACHE2_HOME>/conf

!! Criar o arquivo workers.properties

Page 37: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 38: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do uriworkermap.properties

!! Especifica os contextos que serão balanceados

Page 39: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do arquivo uriworkermap.properties

!! No diretório <APACHE2_HOME>/conf

!! Criar o arquivo uriworkermap.properties

Page 40: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do arquivo uriworkermap.properties

Page 41: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do Tomcat !! Container

!! Configurando o cluster

Page 42: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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:

Page 43: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Configuração do Tomcat

•! Ative o módulo jk

•! Adicione / Descomente o atributo UseJK

Page 44: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Ativando o JBoss

•! Conceda permissões no script run.sh

•! Ative o JBoss

Page 45: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Ativando o Apache

Page 46: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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/

Page 47: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Hot Deploy FARM

Page 48: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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.

Page 49: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Aplicações WEB <web-app ....... >

<distributable/> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>

</web-app>

Page 50: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 51: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Aplicações WEB

Page 52: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Exemplo !!Web

Page 53: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

EJB3 !! O que é necessário para clusterizar componentes

EJB3 ? !! Basicamente, tudo o que você precisa fazer é anotar

o componente com @Clustered.

Page 54: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

EJB3 @Stateful @Clustered public class StatefulBlaBean implements StatefulBla, Serializable {

. . . }

@Stateless @Clustered public class StatelessBlaBean implements StatelessBla { . . . }

Page 55: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 56: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

EJB3

Page 57: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

EJB3

Page 58: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

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

Page 59: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

MDB

Page 60: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Exemplo !!MDB

Page 61: Tutorial de Clusterizacao e Load Balance de aplicacoes JEE

Perguntas ???