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