Jboss en cluster (2 nodos jboss en la misma máquina) loadbalancing

De Wikillano

Contenido

Introdución

La idea es crear un cluster de dos nodos Jboss 5 en la misma máquina para temas de desarrollo, balanceandolos mediante Apache y el modulo mod-jk

Descargas

mod_jk http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/

apache http://httpd.apache.org/

jboss http://www.jboss.org/jbossas/downloads/

balanceador

bajamos el modulo jk, lo renombramos a mod_jk.so y lo copiamos en <APACHE_HOME>/modules

httpd.conf añadimos:

# Include mod_jk's specific configuration file
Include conf/mod-jk.conf

crear el fichero de configuración: <APACHE_HOME>/conf/mod-jk.conf

y dentro añadiremos:

# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module modules/mod_jk.so


# Where to find workers.properties
JkWorkersFile conf/workers.properties

# Where to put jk logs
JkLogFile logs/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"

# Mount your applications
JkMount /application/* loadbalancer

# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer

JkMountFile conf/uriworkermap.properties 

# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly

JkShmFile logs/jk.shm

# Add jkstatus for managing runtime data
<Location /jkstatus/>
JkMount status
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Location>

en el mismo directorio crearemos el siguiente fichero uriworkermap.properties que será donde pongamos las redirecciones (URLS hacia Jboss)

# Simple worker configuration file
# Mount the Servlet context to the ajp13 worker

/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer

Esto hará que mod_jk redireccione las peticiones a las webs web-console y jmx-console al jboss que toque ya que está balanceado.

Ahora tenemso que crear el fichero de configuración de los nodos del cluster workers.properties

# Define list of workers that will be used
# for mapping requests
# The configuration directives are valid
# for the mod_jk version 1.2.18 and later

worker.list=loadbalancer,status

# Definimos el nodo Nodo1
# Puerto del conector ajp de nuestro tomcat (JBoss)
worker.nodo1.port=8009
# Ip del nodo 1.
worker.nodo1.host=172.24.48.73
worker.nodo1.type=ajp13
# Peso de nuestro nodo. A mas peso, mas peticiones recibe.
worker.nodo1.lbfactor=1
worker.node2.ping_mode=A

# Definimos el nodo Nodo2
worker.nodo2.port=8109
worker.nodo2.host=172.24.48.73
worker.nodo2.type=ajp13
worker.nodo2.lbfactor=1
worker.node2.ping_mode=A

# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=nodo1,nodo2
worker.loadbalancer.sticky_session=0

# Status worker for managing load balancer
worker.status.type=status

Jboss

El cluster será de 2 nodos, un nodo en cada jboss, para ellos necesitamos tener dos copias del software que acabamos de descomprimir, para ello podemos copiar y renombrar la carpeta a jboss_5GA_nodo1, jboss_5GA_nodo2 por ejemplo.

copiaremos el directorio all y lo renombraremos a nodo1 o nodo2 en las instalaciones de jboss:

para el Jboss nodo1:

cp <JBOSS_HOME>jboss-5.1.0.GA_nodo1/server/all  <JBOSS_HOME>jboss-5.1.0.GA_nodo1/server/nodo1 

para el Jboss nodo2:

cp <JBOSS_HOME>jboss-5.1.0.GA_nodo2/server/all  <JBOSS_HOME>jboss-5.1.0.GA_nodo2/server/nodo2

Ahora debemos configurar jboss para que se entienda con mod-jk para ello editaremos el fichero server.xml de cada uno de los jboss:

<JBOSS_HOME>jboss-5.1.0.GA_nodo1/server/nodo1/deploy/jbossweb.sar/server.xml
<JBOSS_HOME>jboss-5.1.0.GA_nodo2/server/nodo2/deploy/jbossweb.sar/server.xml

buscaremos Engine y añadiremos jvmRoute=”nodoquetoque”

En el Jboss nodo1
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="nodo1">

... ...

</Engine>

El el Jboss nodo2

<Engine name="jboss.web" defaultHost="localhost" jvmRoute="nodo2">

... ...

</Engine>

Scripts de arranque

.profile del usuario que arranca el jboss

-bash-3.00$ cat .profile 
#!/bin/bash
#JAVA_HOME=/<JAVA_HOME>/jdk1.5.0_18/
JAVA_HOME=/<JAVA_HOME>/jdk1.6.0_15
PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME
export PATH

Script de arranque del primer nodo

. <HOME_USUARIO>.profile
nohup /<JBOSS_HOME>/jboss-5.1.0.GA_nodo1/bin/run.sh -c nodo1 -g DocsPartition -u 239.255.101.100 -b 0.0.0.0 -Djboss.messaging.ServerPeerID=1 -Djboss.service.binding.set=ports-default >> /<RUTA_LOG>/nohup.out 2>&1 &

Script de arranque del segundo nodo

. <HOME_USUARIO>/.profile
nohup /<JBOSS_HOME>/jboss-5.1.0.GA_nodo2/bin/run.sh -c nodo2 -g DocsPartition -u 239.255.101.100 -b 0.0.0.0 -Djboss.messaging.ServerPeerID=2  -Djboss.service.binding.set=ports-01 >> /<RUTA_LOG>/nohup.out 2>&1 &

Despliegues

Los despliegues los haremos en el directorio farm del nodo1 y el se encargará de replicarlo al segundo nodo

Importante: The farming service was not available in JBoss AS 5.0.0 and 5.0.1. This section is only relevant to releases 5.1.0 and later..

Documentación

http://www.jboss.org/file-access/default/members/jbossclustering/freezone/docs/cluster_guide/5.1/html/index.html

Herramientas personales