Está en la página 1de 74

Manual JBoss

1
ndice
Captulo I : Instalacin de JBoss...........................................................................4
Introduccin.....................................................................................................4
Pasos Previos...................................................................................................4
Instalacin del JDK (JSE ..............................................................................4
Instalacin de JBoss ....................................................................................4
Estructura ................................................................................................!
E"ecucin ........................................................................................................#
Con$i%uracin ..............................................................................................&
Captulo II: Desplie%ue de 'plicaciones...............................................................(
Introduccin.....................................................................................................(
Desplie%ue en caliente....................................................................................(
Estructura del descriptor de desplie%ue..........................................................(
Estructura de un pa)uete de aplicacin........................................................1*
Captulo III: Inte%racin de JBoss con Eclipse....................................................1+
Introduccin...................................................................................................1+
,-tener Eclipse..............................................................................................1+
Con$i%urar Eclipse con JBoss..........................................................................14
Captulo I. : /onitori0acin...............................................................................1(
Introduccin...................................................................................................1(
'r)uitectura de J/1.......................................................................................1(
/onitori0acin de JBoss.................................................................................+*
/onitori0acin con JConsole .........................................................................+1
/onitori0acin con /ana%eEn%ine 'pplications /ana%er.............................+2
/onitori0acin con /unin..............................................................................2*
Instalacin de 3unin43aster......................................................................21
Instalacin en De-ian56-untu................................................................21
Instalacin en Cent,S............................................................................21
Con$i%uracin del 3unin43aster................................................................2+
Instalacin de 3unin4node.........................................................................22
Instalacin en De-ian56-untu................................................................22
Instalacin en Cent,S............................................................................22
'rrancar el servicio 3unin4node................................................................24
In$or3es.....................................................................................................2!
Escri-ir plu%ins para 3unin utili0ando J/1................................................2&
7or3ato de un plu%in 3unin..................................................................2(
Conclusin..................................................................................................4+
/onitori0acin con 8a%ios.............................................................................42
Introduccin...............................................................................................42
9e)uisitos...................................................................................................42
Instalacin.....................................................................................................42
Escri-ir plu%ins para na%ios utili0ando J/1................................................4#
Captulo .: J''S.................................................................................................!*
Con$i%uracin de la se%uridad est:ndar en la aplicacin ;e-.......................!*
Con$i%urar un 3dulo de lo%in J''S..............................................................!*
Con$i%uracin de la se%uridad espec$ica de JBoss en la aplicacin ;e-.......!1
Creacin de ta-las < car%a de datos en S=>.................................................!1
De$inicin del datasource < con$i%uracin de la poltica de se%uridad en
+
JBoss..............................................................................................................!2
Captulo .I : Clusterin%......................................................................................!!
Con$i%uracin de J?roups...............................................................................!!
E"ecucin del cluster......................................................................................!#
'pac@e 3odA"B..............................................................................................!&
Propiedades ?lo-ales.................................................................................!(
Propiedades de los ;orBers........................................................................#*
.aria-lesC .aria-les de entorno..............................................................#*
Propiedad de @erencia............................................................................#*
>ista de directivas de los ;orBers...........................................................#1
Directivas de -alanceo de car%a............................................................#+
Cluster D'......................................................................................................#4
Captulo .II: ,pti3i0acin de JBoss...................................................................&*
Eleccin de la J./..........................................................................................&*
J./ Deap ...................................................................................................&1
,pti3i0acin de Eo3cat.................................................................................&1
Eli3inar directorios de tra-a"o.......................................................................&+
Co3porta3iento de la car%a de clases..........................................................&+
,pti3i0acin de JSP........................................................................................&+
,pti3i0acin de >o%4J...................................................................................&2
El 3-ean de re%istro..................................................................................&2
Des@a-ilitar el re%istro por consola........................................................&2
Ca3-iar el nivel de re%istro...................................................................&4
2
Captulo I : Instalacin de JBoss
Introduccin.
JBoss es un servidor de aplicaciones J+EE de cdi%o a-ierto
i3ple3entado en Java puro. 'l estar -asado en JavaC JBoss puede ser utili0ado
en cual)uier siste3a operativo )ue lo soporte. >os principales desarrolladores
tra-a"an para una e3presa de serviciosC JBoss Inc.C ad)uirida por 9ed Dat en
'-ril del +**#C $undada por /arc 7leur<C el creador de la pri3era versin de
JBoss. El pro<ecto est: apo<ado por una red 3undial de cola-oradores. >os
in%resos de la e3presa est:n -asados en un 3odelo de ne%ocio de servicios.
JBoss i3ple3enta todo el pa)uete de servicios de J+EE.
Pasos Previos.
Instalacin del JDK (JSE)
>a -ase para operar cual)uier producto )ue utili0a FJavaF es el FJDKF de la
plata$or3a correspondienteC puede encontrar instrucciones para plata$or3as
>inuG as co3o Hindo;sC en @ttp:55"ava.sun.co3
Instalacin de JBoss
6na ve0 o-tenido el arc@ivo tar o exe (depende del siste3a operativo de
@ttp:55;;;."-oss.or% )ue contiene el -inarioC este de-e ser instalado (o
desco3pri3ido en >inuG en un directorio te3poral (5t3p por lo %eneral para
poder iniciar la instalacin.
El paso anterior %enera un directorio por no3-re JBoss4
Inu3eroAdeAversionJ dentro del directorio te3poral (5t3p si desciende a
este directorio o-servar: el directorio "-oss el cual contiene la distri-ucin de
J-oss.
Ca-e 3encionar )ue la versin de Eo3cat incluida en JBoss es idKntica a
la proporcionada en @ttp:55"aBarta.apac@e.or%5to3cat C la Lnica di$erencia es
)ue los arc@ivos de con$i%uracin para JBoss se encuentran adaptados a
Eo3cat.
Se reco3ienda 3ovili0ar el directorio "-oss al directorio 5usr5localC
ade3:s se reco3ienda de$inir la varia-le a3-iental JB,SSAD,/E al arc@ivo
5etc5-as@rc C si no esta $a3iliari0ado con a3-ientes MniGC esto si%ni$ica a%re%ar
la linea: eGport JB,SSAD,/EN5usr5local5"-ossOO para instalaciones Hindo;s esta
varia-le a3-iental puede ser de$inida de la 3is3a 3anera )ue C>'SSP'EDC
descrita en las instrucciones del JDK.
4
Estructura
bin
Este directorio contiene los e"ecuta-les utili0ados por JBossC el 3:s
i3portante siendo el FscriptF de arran)ue utili0ado por Kste (run.s@
client
Contiene los diversos arc@ivos J'9Ps )ue ser:n utili0ados por los distintos
clientes de los EJBPs utili0ados en JBoss. Dic@os arc@ivos de-en ser a%re%ados a
la varia-le C>'SSP'ED del siste3a donde radica el clienteO el cliente
%eneral3ente siendo un JSP5Servlet )ue accesa el EJBC este paradi%3a %ira
alrededor de Stu-s5SBeletons de 9/I una parte central de EJBPs.
docs
Este directorio contiene docu3entacin acerca de JBoss.
lib
Este directorio contiene los arc@ivos J'9Ps e3pleados por JBoss
re)ueridos en cual)uier 3odalidad.
server
Este directorio contiene tres su-4directorios no3-rados: allC de$ault <
3ini3alO cada su-4directorio contiene los distintos arc@ivos de con$i%uracin
necesarios para e"ecutar JBoss en di$erentes 3odalidades.
>a 3odalidad all inclu<e la e"ecucin de JBoss para e3plearse co3o
clusterC e"ecucin de webservices < otras $uncionalidades 3:sO el directorio
default co3o su no3-re lo i3plicaC inclu<e la con$i%uracin para e"ecutar
JBoss de 3anera -:sicaC 3ientras el directorio minimal contiene los valores de
con$i%uracin necesarios para e"ecutar JBoss con re)ueri3ientos 3ni3osO el
script de arran)ue proporcionado con JBoss e3plea los valores del directorio
defaultC para e3plear otra 3odalidad es necesario 3odi$icar dic@o script de
arran)ue (run.s@.
' continuacin se descri-en los directorios residentes en la 3odalidad de
arran)ue default:
conf
Este directorio contiene las di$erentes secciones de con$i%uracin
utili0adas por JBossC dependiendo de la 3odalidad utili0ada este directorio
puede contener distintos arc@ivos C sin e3-ar%oC sus detalles ser:n descritos
!
en con$i%uracin de JBoss .
data
Contiene distintos par:3etros < arc@ivos de con$i%uracin para las Bases
de Datos proporcionadas con J-ossC %eneral3ente utili0ada para aplicaciones
de3o.
deploy
Este directorio es a3plia3ente utili0ado <a )ue a)u se colocan los EJBPs
para )ue sean e"ecutados por JBossC una ve0 colocado el arc@ivo J'9 (en $or3a
de EJB en este directorioC JBoss auto3:tica3ente eGpande < e"ecuta el EJB.
lib
Contiene los arc@ivos J'9Ps e3pleados por JBoss en -ase a la 3odalidad
tratada.
log
Contiene los distintos re%istros %enerados por JBoss.
tmp
Contiene arc@ivos creados por JBoss < utili0ados de 3anera te3poral.
work
Contiene las clases < arc@ivos utili0ados por JBoss para e"ecucin.
Ejecucin
>a e"ecucin de JBoss es relativa3ente sencillaC dentro del directorio -in
de la instalacin de JBoss se encuentran los arc@ivos de arran)ue en $or3a de
scripts para S@ell. El arc@ivo de e"ecucin run.sh es utili0ado para iniciar JBoss
en a3-ientes MniG con los par:3etros encontrados en el directorio
server/default/confC de i%ual 3aneraC el arc@ivo run.bat lo @ace para
a3-ientes Hindo;s.
De-e o-servar al%o si3ilar al si%uiente desple%adoO los detalles de estos
par:3etros son a)uellos de$inidos en la con$i%uracin de JBoss e inclu<en:
-ases de datos para tra-a"ar con JBossC u-icacin de re%istrosC par:3etros
J8DIC EJBPs disponi-les < car%adosC entre otra in$or3acin.
[root@jboss]$ ./run.sh
=========================================================================
JBoss Bootstrap Environment
JBOSS_HOME: /tmp/jboss-5.0.0
JAVA: /usr/local/jdk1.6.0//bin/java
#
JAVA_OPTS: -server -Dprogram.name=run.sh
CLASSPATH: /tmp/jboss-5.0.0/bin/run.jar:/usr/local/jdk1.6.0//lib/tools.jar
=========================================================================
12:55:10,608 INFO [Server] Starting JBoss (MX MicroKernel)...
12:55:10,610 INFO [Server] Home Dir: /tmp/jboss
12:55:10,610 INFO [Server] Home URL: file:/tmp/jboss/
12:55:10,623 INFO [Server] Library URL: file:/tmp/jboss/lib/
12:55:10,625 INFO [Server] Patch URL: null
........
< 50-70 lineas >
.......
.......
12:55:31,862 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-
8080
12:55:32,074 INFO [ChannelSocket] JK2: ajp listening on /0.0.0.0:8010
12:55:32,192 INFO [JkMain] Jk running ID=1 time=0/149 config=null
12:55:32,216 INFO [Server] JBoss (MX MicroKernel)
Started in 21s:146ms
Esta pantalla donde se e"ecuta JBoss per3anecer: con%elada por el
tKr3ino en )ue este activo JBossC a esta pantalla se enviar:n entre otras cosas:
>os errores de e"ecucin
9esultados de a%re%ar EJBPs al directorio deplo< de J-oss
Desde lue%o este co3porta3iento es 3odi$ica-le pero por a@ora es el
co3porta3iento default de J-oss.
Para $inali0ar JBoss -asta e"ecutar Ctrl-C -a"o la pantalla en cuestin <
JBoss ser: ter3inadoC en el proceso desple%ando ciertos 3ensa"es de
ter3inacin.
Configuracin
JBoss esta co3puesto por diversos arc@ivos de con$i%uracin los cuales
se encuentran -a"o el directorio /server/<modalidad/conf de la instalacin
de JBossC este directorio a su ve0 puede contener varios su-directorios (co3o
$ue 3encionado en la instalacin < estructura C esta seccin se -asa en el
contenido del directorio default.
' continuacin se 3encionan los par:3etros de los principales arc@ivos
para la 3odalidad de$aultC lo cual e)uivale al contenido del directorio /server/
default/conf.
!boss-minimal."ml
'rc@ivo )ue contiene los par:3etros principales para la con$i%uracin
default de JBossO este arc@ivo 1/> de$ine los valores para la varia-le
C>'SSP'EDC el puerto para el servidor J8DI < el directorio donde ser:n
colocados los distintos EJBPs para ser e"ecutadosC entre otros par:3etros.
&
!boss-service."ml
'rc@ivo )ue contiene los par:3etros principales del Servidor JBossO este
arc@ivo 1/> de$ine los valores para la varia-le C>'SSP'EDC el puerto para el
servidor J8DI < el directorio donde ser:n colocados los distintos EJBPs para ser
e"ecutadosC entre otros par:3etros co3o usuarios < roles disponi-les para
e3plear el siste3a 3essaging proporcionado con JBoss.
!ndi.properties
Contiene las Clases )ue ser:n utili0adas (F7actor<PsF para reali0ar
-Ls)uedas J8DI.
log#!."ml
Contiene los par:3etros e3pleados por el 3ecanis3o >o%4J utili0ado en
JBoss para %enerar re%istros.
login-config."ml
Contiene los par:3etros J''S e3pleados por JBoss para
veri$icar5autenti$icar usuarios.
server.policy
Par:3etros de se%uridad e3pleados por JBoss.
standard!aws."ml
J'HS es el 3otor de 3apeo ,-"eto59elacional e3pleado por JBoss en
C/P (Container /ana%ed Persistence EJBPsC este arc@ivo contiene sus valores
default.
standard!bosscmp-!dbc."ml
Contiene los valores para ser e3pleados en C/P (Container /ana%ed
Persistence EJBPs.
standard!boss."ml
Contiene los par:3etros est:ndar de con$i%uracin para JBoss tales
co3o: Ea3aQo de pools para EJBPsC valores de cacheC nu3ero de pools para
-ases de datosC clases e3pleadas para control de transaccionesC entre otros
par:3etros.
R
Captulo II: Despliegue de Aplicaciones
Introduccin.
' continuacin se eGplican los distintos procedi3ientos para desple%ar
aplicaciones JEE en el servidor JBoss.
Despliegue en caliente.
En el captulo anteriorC dentro de la lista de directorios vistos )ue
co3ponen la estructura de JBossC pudi3os o-servar el si%uiente:
server/default/deploy.
/ientras )ue otros servidores de aplicaciones re)uieren procesos )ue
i3pli)uen el reinicio del servidor o si3ple3ente utili0ar inter$aces He- para tal
casoC JBoss o$rece una tKcnica -astante 3as sencilla para el desplie%ue de
aplicaciones.
Suponiendo )ue la aplicacin <a est: construida < e3pa)uetada en el
arc@ivo app."arC -asta con copiar este arc@ivo al directorio antes 3encionadoC
de la si%uiente $or3a:
[root@jboss]$ cp <directorio aplicacion>/app.war server/default/deploy
Por lo )ue a continuacin vere3os un 3ensa"e en la salida de J-oss co3o
el si%uiente:
deploy, ctxPath = /app
'l ver este 3ensa"eC pode3os entonces a$ir3ar )ue la aplicacin app."ar
$ue correcta3ente desple%ada en el servidor. Cual)uier otro 3ensa"e nos dar:
la in$or3acin necesaria para ver el por )uK no se produ"o el proceso de
desplie%ue.
>a co3pro-acin de la aplicacin depende del conteGto en el cual se
re)uiera e"ecutar la aplicacinC <a )ue puede ser una aplicacin JSPC ServletC
EJBC etc.
Estructura del descriptor de despliegue.
6n descriptor de desplie%ue (en in%lKs Deployment Descriptor (DD es
un co3ponente de aplicaciones JEE )ue descri-e c3o se de-e desple%ar (o
i3plantar una aplicacin ;e-. Esto diri%e una @erra3ienta de desplie%ue (o
pu-licacin para desple%ar un 3dulo o aplicacin con opciones de
contenedor espec$icas < descri-e re)uisitos de con$i%uracin espec$icos )ue
(
puede resolver un desplegador.
En aplicaciones JEEC 1/> se usa para la sintaGis del $ic@ero descriptor de
desplie%ue. De-e ser lla3ado ;e-.G3lC < de-e ser colocado en un
su-directorio lla3ado HEB4I87C directa3ente de-a"o de la ra0 de la aplicacin
;e-.
>a estructura de este arc@ivoC en su $or3a 3as 3ni3a es la si%uiente:
<?xml version="1.0"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<description>Descripcion de la aplicacion</description>
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/ruta</url-pattern>
</servlet-mapping>
</web-app>
Co3o se puede apreciarC la estructura del arc@ivo contiene in$or3acin
so-re la aplicacinC sus clases < las rutas de acceso desde el servidor.
Clara3enteC esta con$i%uracin es 3ni3a < tiene 3uc@os 3as
par:3etros )ue son precisos para levantar las aplicaciones correcta3ente.
' lo lar%o de este docu3entoC se ir:n a%re%ando nuevos par:3etros de
con$i%uracin a este arc@ivo descriptor.
Estructura de un paquete de aplicacin.
6na aplicacin JEEC en su $or3a 3as 3ni3aC de-e contener la si%uiente
estructura de directorio:
META-INF/
manifest.mf
WEB-INF/
classes/
src/
lib/
web.xml
El contenido de los directorios es el si%uiente:
1*
El directorio META-INFC relacionado con arc@ivos !ar contiene el arc@ivo
3ani$est.3$C el cual contiene la lista de contenidos del arc@ivoC < son
%enerados al 3o3ento de crear el arc@ivo.
El directorio "E#-I87 contiene todo lo necesario para e"ecutar la
aplicacinC se divide en las si%uientes secciones:
classes: Donde se al3acenan todas las clases co3piladas de la aplicacin.
lib: Donde se al3acenan las li-rerias necesarias para e"ecutar la aplicacin.
src: (optativo Contiene el cdi%o $uente de la aplicacin.
E3pa)uetado de la aplicacin.
6na ve0 )ue la aplicacin JEE est: correcta3ente construida < cu3ple
con el est:ndar descrito anterior3enteC el e3pa)uetado ser reali0a con el
si%uiente co3ando.
[root@jboss]$ jar cvf app.war app
S posterior3enteC este arc@ivo "A$ se copia al directorio deploy visto
anterior3ente para desple%ar la aplicacin.
11
Captulo III: Integracin de JBoss con Eclipse
Introduccin.
Eclipse es un entorno de desarrollo inte%rado de cdi%o a-ierto
3ultiplata$or3a para desarrollar lo )ue el pro<ecto lla3a F'plicaciones de
Cliente Enri)uecidoFC opuesto a las aplicaciones FCliente4livianoF -asadas en
nave%adores. Esta plata$or3aC tpica3ente @a sido usada para desarrollar
entornos de desarrollo inte%rados (del in%lKs IDEC co3o el IDE de Java lla3ado
Java Develop3ent EoolBit (JDE < el co3pilador (ECJ )ue se entre%a co3o parte
de Eclipse (< )ue son usados ta3-iKn para desarrollar el 3is3o Eclipse. Sin
e3-ar%oC ta3-iKn se puede usar para otros tipos de aplicaciones clienteC co3o
BitEorrent '0ureus.
Eclipse es ta3-iKn una co3unidad de usuariosC eGtendiendo
constante3ente las :reas de aplicacin cu-iertas. 6n e"e3plo es el
reciente3ente creado Eclipse /odelin% Pro"ectC cu-riendo casi todas las :reas
de /odel Driven En%ineerin%.
Eclipse $ue desarrollado ori%inal3ente por IB/ co3o el sucesor de su
$a3ilia de @erra3ientas para .isual'%e. Eclipse es a@ora desarrollado por la
7undacin EclipseC una or%ani0acin independiente sin :ni3o de lucro )ue
$o3enta una co3unidad de cdi%o a-ierto < un con"unto de productos
co3ple3entariosC capacidades < servicios.
Obtener Eclipse.
Para o-tener EclipseC es preciso visitar la si%uiente p:%ina ;e-:
@ttp:55;;;.eclipse.or%5do;nloads5
En la lista de descar%asC se puede apreciar lo si%uiente:
1+
>a pri3era opcin a descar%ar corresponde precisa3ente al IDE )ue se
necesita para tra-a"ar de $or3a inte%rada con JBoss.
6na ve0 descar%ado < desco3pri3ido el arc@ivo correspondiente a la
plata$or3a deseada (>inuGC Hindo;sC /ac,S 1C se aprecia un contenido de
directorio co3o el si%uiente:
Para e"ecutar la aplicacinC -asta con @acer do-le clic so-re el icono
eclipse deli3itado en la i3a%en.
6na ve0 e"ecutada la aplicacinC se o-serva la si%uiente pantalla de
12
inicio:
>os apartados se descri-en de la si%uiente $or3a:
' la i0)uierda aparecer: la lista de pro<ectos creados <5o a-iertos
actual3enteC con el :r-ol de contenidos respectivo.
'l centro se presentar: tanto el cdi%o $uente de la aplicacin co3o su
e"ecucin.
'l costado derec@o aparecer: in$or3acin relativa a los o-"etos )ue se
va<an seleccionado.
En el costado in$erior aparecer: toda la in$or3acin relativa con el
entorno de e"ecucinC tanto co3o la lista de servidoresC la consola de
e"ecucinC las $uentes de datosC etc.
Configurar Eclipse con JBoss.
Para a%re%ar un nuevo servidor JBossC es preciso seleccionar la viQeta
%ervers en este apartado (co3o se aprecia en la $i%ura < lue%o @acer clic con
el -otn derec@o del ratn en el $ondo. >a vista ser: co3o la si%uiente i3a%en:
14
Selecciona3os entonces New < lue%o ServerC donde se aprecia la
si%uiente ventana de di:lo%o:
En la lista se pueden apreciar todos los servidores JEE co3pati-les con
esta versin de Eclipse. En esta ocasinC co3o se aprecia en la $i%uraC se
esco%e el servidor JBoss versin 4.+
'l @acer clic so-re el -otn NextC aparece el si%uiente cuadro de di:lo%o:
1!
En la pri3era parte selecciona3os el entorno J9E (&ava $untime
Enviroment con )ue desea3os e"ecutar nuestro servidorC < lue%o da3os la
ruta donde est: instalado nuestro JBoss.
'l @acer clic en el -otn Next aparecer: el si%uiente cuadro de di:lo%o:
1#
Dado )ue pode3os tener 3as de un servidor JBoss en e"ecucin en
nuestro siste3a o entorno de desarrolloC pode3os indicar a Eclipse )ue
arran)ue nuestro servidor de aplicaciones con otros par:3etrosC tales co3o la
IP de escuc@aC el puerto del 'rontend ;e-C el puerto del J8DI (&ava Naming and
Directory Inter'ace etc.
En este casoC no 3odi$ica3os nin%Ln par:3etro < si3ple3ente da3os
clic en el -otn Finish. >as pantallas si%uientes son sola3ente para la
inclusin de otros 3dulos <5o li-reras para e"ecutar aplicaciones )ue no
incluire3os en este 3anual.
7inali0ada la con$i%uracinC la vista %ervers de Eclipse tendr: el si%uiente
aspecto:
1&
Para arrancar JBossC pode3os @acer clic en el icono (lay u-icado en la
es)uina superior derec@a o si3ple3ente crear una aplicacin e indicar )ue
va3os a e"ecutarla con esta versin del servidor.
1R
Captulo I! : "onitori#acin
Introduccin
>a Java /ana%e3ent e1tensions (J/1 'PI es un est:ndar de Sun para la
%estin < 3onitori0acin re3ota de recursos "ava co3o:
'plicaciones < dispositivos
Servidores < servicios
J./
)ue nos per3ite entre otras cosas consultar o ca3-iar una deter3inada
con$i%uracinC conocer estadsticas < co3porta3iento de una aplicacinC
conocer ca3-ios de estado (< noti$icarloC iniciar accionesC etcC crear nuestros
3ane"adores de recursos < pu-licarlos en una 'PIC interoperar con otras
tecnolo%as...
J/1 se inte%r pronto en la J+EE < 3:s tarde en la JSEC concreta3ente
desde la JDK !. Su "erar)ua de su-pa)uetes se encuentran -a"o
"avaG.3ana%e3entC < esta es su 'PI pL-lica. 'si3is3o eGiste una 'PI privada
-a"o co3.sun."3GC a la )ue slo de-era tener acceso las propias li-reras de la
JDKC puesto )ue esta i3ple3entacin puede evolucionar < ser ca3-iada en
$uturas versiones.
' partir de la JDK !.* se inclu<e Jconsole para 3onitori0ar la J./ <
aplicaciones )ue i3ple3enten J/1. Es un e"ecuta-le con inter$a0 %r:$ica )ue se
encuentra en la carpeta -in de la instalacin de la distri-ucion de Sun JDK.
Ar$uitectura de J"%
'r)uitectura -asada en 2 capas:
1. Capa de aplicacin (o nivel de instru3entacinC la capa de 3:s -a"o
niveles donde residen los co3ponentes (/Bean )ue $acilitan la
in$or3acin necesaria para la %estin de una aplicacin. Estos
co3ponentes son desarrollados se%Ln las necesidades de %estin
espec$icas de cada parte de una aplicacin.
+. 8ivel de a%ente: $acilita una inter$a0 para el 3ane"o de los /Bean del
nivel de instru3entacin.
2. 8ivel de 'daptadores: uno o 3:s conectores (o adaptadores de
protocolo )ue proporcionan acceso desde los siste3as de 3onitori0acin
re3otos.
1(
Monitorizacin de JBoss
JBoss i3ple3enta J/1 en su 3icroBernel. El propio servidor dispone de un
una consola J/1 accesi-le por la 69> @ttp:55local@ost:R*R*5"3G4console )ue
3uestra los /Beans pL-licos accesi-les por ella o pro%ra3:tica3ente por
cdi%o Java:
+*
'l%unas acciones Ltiles:
/ostrar el :r-ol J8DI .
7or0ar un volcado de 3e3oria .
/ostrar el uso del pool de 3e3oria .
?estionar el esc:ner de desplie%ues .
9edesple%ar una aplicacin .
'cceder a la -ase de datos D<personic .
Detener JBoss
Conocer estado de los EJB desple%ados e instanciados
Monitorizacin con JConsole
JConsole (;;;.servletsuite.co3 usa el J/1 de JBoss para 3onitori0ar el
servidor: estadoC lo%sC desplie%uesC uploads < visor de los /-eans:
Para poder tra-a"ar con JConsole de-e3os se%uir los si%uientes pasos:
Descar%ar !consolewar desde
@ttp:55;;;.servletsuite.co35"3G5"console.@t3
Copiar "console.;ar en la carpeta deploy del servidor utili0adoC para su
desplie%ue (@a-itual3ente en server/default/deploy
Con JBoss en e"ecucinC acceder a @ttp:55local@ost:R*R*5"console
+1
Cuando acceda3os a la pestaQa JM$ se nos presentar: una casilla para
introducir un patrn )ue deter3inar: los /Beans )ue visuali0are3os en la lista
in$erior. >os patrones son los @a-ituales:
8o3-re total3ente cuali$icado
por e"e3plo: -oss."+ee:serviceNE'9Deplo<er
Hildcard: MC T
por e"e3plo: "-oss."3T:MC "-oss:MC "-oss.M:MC M:M
++
Monitorizacin con ManageEngine pplications Manager
Manage%ngine &pplications Manager es un potente 3onitor
co3ercial con una versin li-re (li3itacin: 3:Gi3o ! 3onitores aplica-le a
servidoresC BBDDC aplicacionesC ;e-sitesC E9PC transacciones < 3uc@o 3:s. Da
sido diseQada con una inter$a0 3u< co3pleta < o$rece 3Lltiples estadsticasC
)ue pueden asociarse acciones al se%ui3iento de recursosC co3o alar3as <
noti$icaciones por correo electrnico. Per3ite la 3onitori0acin de recursos
re3otos (los anteriores 3onitores se li3ita-an al servidor local < la
3onitori0acin de /Beans de J/1C por supuesto.
Para instalarC de-e3os descar%ar la aplicacin desde
@ttp:553ana%een%ine.adventnet.co35products5applicationsA3ana%er5do;nload.
@t3l < e"ecutar el instala-le.
+2
Para continuarC @ace3os clic en el -otn next.
6na ve0 aceptados los tKr3inos de la licenciaC @ace3os clic en el -otn
next.
+4
>ue%o de esco%er la versin Free Edition )ue nos per3itir: operar @asta
2* das (para lue%o trans$or3arse en la versin li-re @ace3os clic en el -otn
next.
+!
En esta ventanaC se nos pide esco%er el idio3a de la instalacin. En el
e"e3plo se utili0ar: el in%lKs (En%lis@. Para continuarC de-e3os @acer clic en el
-otn next.
En esta ventana se nos pide esco%er el puerto donde levantar: la
aplicacin ;e-. Por de$ecto se utili0a el (*(*. Para continuarC clic en el -otn
next.
+#
Para coleccionar las estadsticasC la aplicacin nos pide ele%ir entre
/<S=> (el cual viene incluido en la aplicacin o /icroso$t S=> Server. En el
caso del e"ercicioC esco%e3os /<S=>. Continua3os la instalacin @aciendo clic
en el -otn next.
En esta ventana se nos pide esco%er la ruta de la instalacin.
Continua3os la instalacin @aciendo clic en el -otn next.
+&
En esta Llti3a ventanaC se nos presenta el resu3en de la instalacin.
Dace3os clic en el -otn next para continuar o en back si )uere3os @acer
al%Ln ca3-io antes de ter3inar.
6na ve0 $inali0ada la instalacinC al diri%irnos a la ruta esco%ida para la
instalacin de la aplicacinC nos encontrare3os con los si%uientes conos.
Para arrancarC entonces de-e3os @acer clic en el cono
start&pplicationsManager.sh < lue%o en start'ebConsole.sh. El pri3ero
arrancar: la aplicacin. El se%undo arrancar: el entorno ;e-.
Para acceder a la aplicacin entoncesC de-e3os a-rir la si%uiente 69> en
nuestro nave%ador: @ttp:55local@ost:(*(*C lo cual se ver: co3o la si%uiente
pantalla:
+R
Co3o se indica en las instruccionesC el usuario por de$ecto es adminC <
la contraseQa por de$ecto es admin.
Co3o pode3os verC /ana%eEn%ine 'pplications /ana%er nos per3ite
inclusive con$i%urar alertas a travKs de correo electrnico.
6na ve0 con$i%urado el nodo de 3onitori0acinC o-serva3os la si%uiente
ventana:
+(
Monitorizacin con Munin
' pesar de )ue las @erra3ientas previa3ente descritas per3iten
3onitori0ar JBoss de 3anera pti3aC en un %ran porcenta"e de los casos es
preciso 3onitori0ar en con"unto a otras varia-lesC tales co3o la 3e3oriaC el
espacio en discoC la car%a del servidorC etc.
Para tal casoC a continuacin se descri-ir: co3o instalar la @erra3ienta
/unin en el servidor.
/unin opera so-re la -ase de recolector de in$or3acin (munin-master <
de nodo (munin-node co3o se aprecia en la si%uiente $i%ura:
Podra3os entonces eventual3ente de"ar un e)uipo o un servidor co3o
recolector de in$or3acin munin-master e instalar en cada nodo de un posi-le
clLster JBoss sola3ente el munin-node. Clara3enteC en un 3is3o e)uipo o
servidor pueden coeGistir tanto munin-master co3o munin-node.
2*
Instalacin de !unin"!aster
'ntes de instalar el 3unin43aster en nuestro e)uipo o servidorC es
preciso contar con un servidor ;e- para poder visuali0ar los %r:$icos. Se
eGplicar:n entonces los co3andos necesarios para instalar 3unin43aster o el
recolector en con"unto con el servidor ;e- 'pac@e o de $or3a unitaria si <a se
cuenta con los pa)uetes instalados.
Instalacin en Debian#$buntu
Si se utili0a De-ian o 6-untu co3o distri-ucin >inuGC es tan $:cil co3o
e"ecutar el si%uiente co3ando:
Sin 'pac@e instalado:
# apt-get install apache munin
Con 'pac@e instalado:
# apt-get install munin
9ecorda3os )ue el car:cter al3o@adilla (U por convencin se re$iere a
)ue es preciso contar con privile%ios de ad3inistrador (root en el e)uipo <5o
servidor.
Instalacin en CentO%
>a $or3a 3as sencilla de instalar munin-master en un servidor es
precisa3ente a%re%ando un repositorio S6/ )ue lo conten%a. El repositorio
3as popular < co3pleto para tal caso corresponde a Dag "ieers )*M
6na ve0 )ue el repositorio es instaladoC solo de-e3os utili0ar S6/ para
instalar el munin-master.
Para indicar a S6/ )ue de-e -uscar ade3:s de lo cotidiano los pa)uetes
a instalar en el repositorio Dag "ieersC de-e3os crear un arc@ivo en la
u-icacin /etc/yum.repos.d/dag.repo con el si%uiente contenido.
[dag]
name=Dag RPM Repository for Red Hat Enterprise Linux
baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag
gpgcheck=1
gpgkey=http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
enabled=1
21
>ue%oC -asta con e"ecutar el si%uiente co3ando:
Sin 'pac@e instalado:
# yum -y install httpd munin
Con 'pac@e instalado:
# yum -y install munin
Configuracin del &unin'&aster
El paso si%uienteC lue%o de @a-er instalado correcta3ente la aplicacinC
es con$i%urar el recolector donde de-e3os indicar la ruta donde de-e %enerar
las p:%inas ;e- con las estadsticas recolectadas e indicarle en )ue rutas se
encuentran los distintos nodos )ue de-e 3onitori0ar. Para elloC de-e3os editar
el arc@ivo /etc/munin/munin.conf donde de-e3os encontrar las si%uientes
lnea:
# The next three variables specifies where the location of the RRD
# databases, the HTML output, and the logs, severally. They all
# must be writable by the user running munin-cron.
dbdir /var/lib/munin
htmldir /var/www/munin
logdir /var/log/munin
rundir /var/run/munin
En el caso de De-ian56-untuC por de$ecto se instala el servidor He-
'pac@e indicando )ue el Document$oot (o ruta de docu3entos por de$ecto es
/var/wwwC para el caso de Cent,SC esta ruta corresponde a /var/www/html.
Por lo tantoC de-e3os de"ar tal co3o est: la con$i%uracin en el
par:3etro htmldir o ca3-iarlo por el valor correspondienteC dependiendo de
la ruta del +irtual,ostC la distri-ucin de >inuGC etc.
(ara mayor informaci)n* es preciso referirse a la documentaci)n
oficial de &pache.
Para con$i%urar la lista de nodos )ue estar:n entre%ando la in$or3acin
necesaria para recolectarC de-e3os u-icar la si%uiente lnea en el arc@ivo de
con$i%uracin:
# a simple host tree
[localhost]
address 127.0.0.1
use_node_name yes
2+
En esta vistaC se con$i%ura el no3-re del nodo )ue va3os a utili0ar
(local@ost < la direccin IP donde est: eventual3ente escuc@ando nuestro
3unin4node. El recolector se co3unicar: con el nodo < le pedir: )ue le
entre%ue toda la in$or3acin necesaria.
Suponiendo )ue conta3os con 2 nodos en las direcciones IP
1(+.1#R.1.1*C 1(+.1#R.1.11 < 1(+.1#R.1.1+C una con$i%uracin podra ser co3o
la si%uiente:
[equipo1]
address 192.168.1.10
use_node_name yes
[equipo2]
address 192.168.1.11
use_node_name yes
[equipo3]
address 192.168.1.12
use_node_name yes
Instalacin de !unin"node
De-ido a )ue el nodo levanta un servicio total3ente independienteC es
preciso e"ecutar uno de los si%uientes co3andosC dependiendo de la
distri-ucin )ue se utili0a:
Instalacin en Debian#$buntu
# apt-get install munin-node
Instalacin en CentO%
6na ve0 repetidos los pasos descritos en la instalacin del repositorio Da%
HieersC de-e3os entonces e"ecutar el si%uiente co3ando:
# yum -y install munin-node
'@ora de-e3os entonces con$i%urar el nodo para indicar )ue in$or3acin
desea3os )ue pu-li)ue a nuestro 3unin43aster. Para tal casoC de-e3os
diri%irnos al directorio /etc/munin/pluginsC donde en su interior se puede
apreciar lo si%uiente:
cpu iostat open_inodes
df irqstats processes
22
df_inode open_files sendmail_mailqueue
entropy interrupts sendmail_mailstats
forks load sendmail_mailtraffic
hddtemp_smartctl memory swap
if_err_eth0 netstat vmstat
if_eth0
Esta lista corresponde a todos los scripts )ue e"ecuta el nodo para
recolectar la in$or3acin < entre%arla de $or3a correcta al 3unin43aster.
'l revisar con detalle la lista (por e"e3ploC e"ecutando ls -allC pode3os
ver in$or3acin co3o la si%uiente:
cpu -> /usr/share/munin/plugins/cpu
Co3o se puede apreciar entoncesC los arc@ivos listados corresponden
si3ple3ente a enlaces duros a un script u-icado en la ruta /usr/share/munin/
plugins. Por lo tantoC para @a-ilitar o des@a-ilitar un script es tan sencillo
co3o crear o eli3inar el enlace duro se%Ln sea necesario.
En caso de necesitar par:3etros adicionales para la e"ecucin de un
scriptC de-e3os revisar los arc@ivos contenidos en la ruta /etc/munin/plugin-
conf.dC co3o por e"e3ploC el arc@ivo munin-node.
Dentro de este $ic@eroC pode3os apreciar lo si%uiente:
[mysql*]
#env.mysqlopts -u someuser
Para 3unin4nodeC esto )uiere decir )ue todos los scripts )ue co3iencen
con mys+lC de-en e"ecutarse utili0ando el par:3etro -u someuser. 'l estar
precedido de una al3o@adilla (UC si3ple3ente es una lnea co3entada.
Arrancar el ser(icio &unin'node
Para )ue nuestro recolector entonces pueda conectarse al nodo <
co3en0ar a %ra$icar la in$or3acinC es preciso arrancar el servicio utili0ando el
si%uiente co3ando:
# /etc/init.d/munin-node start
6na prue-a de )ue la con$i%uracin es correctaC puede ser la si%uiente:
# telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
# munin node at jboss1.linuxcenter.frog.cl
24
fetch load
load.value 0.09
.
Co3o se apreciaC el nodo in$or3 de )ue el siste3a actual3ente tiene
una car%a de servidor de ,.,-.
Infor&es
Para poder visuali0ar entonces los in$or3esC una ve0 con$i%urados todos
los nodos < esta-lecidos todos los enlaces duros a los scripts )ue desea3os
)ue e"ecuteC de-e3os a-rir una ventana del nave%ador @acia la 69> del
recolector.
Clara3enteC al principio de-e3os esperar entre 1* a 1! 3inutos a )ue se
e"ecute tran)uila3ente la recoleccin de in$or3acin para poder apreciar
%r:$icas del siste3a.
Para poder levantar el Servidor He- 'pac@eC de-e3os e"ecutar uno de
los si%uientes co3andosC dependiendo de la distri-ucin )ue esta3os
utili0ando:
.ebian//buntu
# /etc/init.d/apache2 start
Cent01
# /etc/init.d/httpd start
Suponiendo )ue nuestro recolector tiene la direccin IP 1(+.1#R.+.114C
de-e3os entonces visitar la 69> @ttp:551(+.1#R.+.11453unin
2!
Co3o se aprecia en el di-u"oC 3unin est: per$ecta3ente con$i%urado <
est: recolectando in$or3acin en tres e)uipos: e)uipo1C e)uipo+ < local@ost.
Para ver las %r:$icasC -asta con visitar cual)uiera de los enlacesC donde
se puede apreciar la si%uiente p:%ina:
2#
Escri)ir plugins para &unin utili#ando J"%
Co3o el o-"etivo es 3onitori0ar JBoss en con"unto con las otras varia-les
del siste3aC utili0ando plugins personali0ados para nuestro casoC de-e3os
sa-er escri-ir Kstos para muninC donde recolectare3os la in$or3acin
necesaria.
JBossC co3o servidor de aplicaciones )ue cu3ple con el est:ndar JEEC
est: provisto de la 'PI J/1 (visto anterior3enteC donde ade3:s nos o$rece de
una aplicacin lla3ada t;iddle.s@ u-icada dentro del directorio -in de su
instalacin ("unto con run.s@.
Supon%a3os )ue necesita3os 3onitori0ar la 3e3oria li-re de JBoss
utili0ando J/1. El atri-uto )ue nos devuelve esta in$or3acin lo pode3os
o-tener desde la si%uiente ruta (utili0ando "3G4console para tal caso
Dentro de los atri-utos del do3inio !boss.system del tipo 1erver2nfo
encontra3os lo si%uiente:
2&
Co3o se aprecia en el di-u"oC el atri-uto 7ree/e3or< nos devuelveC
eGpresado en -<tesC la cantidad de 3e3oria li-re de este servidor JBoss.
Para o-tener este par:3etro entoncesC de-e3os e"ecutar el si%uiente
co3ando utili0ando t;iddle:
# cd /opt/jboss/bin
# ./twiddle.sh -s localhost get jboss.system:type=ServerInfo FreeMemory
>a salida de consola de este co3ando es el si%uiente:
FreeMemory=100091928
Por lo tantoC el valor )ue desea3os o-tener < )ue desea3os )ue munin-
node in$or3e a munin-master es 100091928.
8ecesita3os entoncesC de al%Ln 3odoC poder utili0ar este valor
utili0ando al%Ln len%ua"e de pro%ra3acin para )ue este plugin se pueda
e"ecutar sin pro-le3as. El len%ua"e )ue utili0are3os en este e"e3plo
corresponde al len%ua"e bash.
Para o-tener el valorC clara3ente ve3os )ue est: separado por el
s3-olo VNWC entoncesC de-e3os utili0ar un co3ando )ue nos per3ita separar
esta cadena en dos partes (7ree/e3or< < 1***(1(+R < utili0ar lo
correspondiente.
6n co3ando Ltil es cutC donde pode3os indicar por par:3etro co3o
)uere3os cortar la cadena < )ue posicin )uere3os utili0ar.
2R
Para el caso del e"e3ploC el co3ando de-era ser el si%uiente:
# ./twiddle.sh -s localhost get jboss.system:type=ServerInfo FreeMemory | cut -f2 -d'='
Donde el co3ando cut captura la salida dada por el co3ando t;iddleC la
separa por el car:cter PNP (4d < nos devuelve la se%unda posicin (4$+. >a
salida es la si%uiente:
100091928
&or!ato de un plugin !unin.
Para escri-ir un plu%in 3uninC de-e3os i3ple3entar dos cosas:
a >a con$i%uracin del %r:$ico.
- El resultado de la e"ecucin.
>a con$i%uracin del %r:$ico es utili0ada por 3unin43aster para di-u"ar el
3is3oC donde de-e3os indicar el ttuloC el %rupo al )ue perteneceC la unidad
de 3edidaC etc.
El resultado de la e"ecucin de-era ser entonces el valor visto
anterior3ente (100091928
'l @acer nueva3ente telnet al puerto 4(4( del 3unin4nodeC pode3os
o-tener el $or3ato de con$i%uracin de un %r:$ico cual)uiera de la si%uiente
$or3a:
# telnet localhost 4949
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
# munin node at jboss1.linuxcenter.neno2.frog.cl
config load
graph_title Load average
graph_args --base 1000 -l 0
graph_vlabel load
graph_scale no
graph_category system
load.label load
load.warning 10
load.critical 120
graph_info The load average of the machine describes how many
processes are in the run-queue (scheduled to run "immediately").
load.info Average load for the five minutes.
.
Co3o se apreciaC la con$i%uracin nos indica varios par:3etros co3o por
e"e3plo:
2(
graph_title : Etulo del %r:$ico.
graph_vlabel : Eti)ueta vertical
graph_category : Cate%ora del %r:$ico.
var.label : Eti)ueta
var.warning : .alor de advertencia
var.critical : .alor crtico
Esta in$or3acin el 3unin4node la o-tiene al e"ecutar los scripts u-icados
dentro de la carpeta 5etc53unin5plu%ins:
# cd /etc/munin/plugins
# ./load config
graph_title Load average
graph_args --base 1000 -l 0
graph_vlabel load
graph_scale no
graph_category system
load.label load
load.warning 10
load.critical 120
graph_info The load average of the machine describes how many
processes are in the run-queue (scheduled to run "immediately").
load.info Average load for the five minutes
S el valor de la 3edicin se o-tiene e"ecutando el si%uiente co3ando:
# ./load
load.value 0.59
Co3parando a3-as situaciones entoncesC pode3os apreciar )ue se
de$ine una varia-le lla3ada load donde tiene una eti)ueta (load.la-el < un
valor (load.value
Por lo tanto entoncesC se de-era crear un script )ue al e"ecutarse
o$re0caC al 3enosC la si%uiente in$or3acin:
# ./jboss-memory config
graph_title JBoss Free Memory
graph_vlabel Free Memory
graph_category JBoss
freemem.label Free Memory
graph_info JBoss Free Memory
freemem.info Free Memory.
# ./jboss-memory
freemem.value 103326568
4*
El si%uiente scriptC escrito en len%ua"e bashC reali0a lo anterior3ente
descrito:
#!/bin/sh
if [ "$1" = "config" ]; then
echo 'graph_title JBoss Free Memory'
echo 'graph_vlabel Free Memory'
echo 'graph_scale no'
echo 'graph_category JBoss'
echo 'freemem.label Free Memory'
echo 'totmem.label Total Memory'
echo 'graph_info JBoss Free Memory'
echo 'freemem.info Free Memory.'
exit 0
fi
cd /opt/jboss/bin
echo -n "freemem.value "
./twiddle.sh -s localhost get jboss.system:type=ServerInfo FreeMemory | cut -f2 -d'='
Para instalar el pluginC -asta entonces con copiarlo en la ruta /usr/share/
munin/plugins -a"o el no3-re !boss3memoryC dar privile%ios de e"ecucin <
lue%o crear el enlace duro en el directorio /etc/munin/plugins.
# cp jboss_memory /usr/share/munin/plugins
# chmod +x /usr/share/munin/plugins/jboss_memory
# ln -sn /usr/share/munin/plugins/jboss_memory /etc/munin/plugins/jboss_memory
S $inal3enteC incluirlo en el arc@ivo munin-node dentro de /etc/munin/
plugin-conf.d indicando )ue todos los plugins )ue co3iencen con V"-ossW
de-en ser e"ecutados con un par:3etroC co3o por e"e3plo:
[jboss*]
user root
>ue%o de unos 3inutosC vere3os entonces )ue la %r:$ica de este
recolector se parecer: a la si%uiente:
41
El perodo de e"ecucin de nuestro munin-master viene dado por la
si%uiente con$i%uracin en el arc@ivo munin dentro del directorio /etc/cron.d.
*/5 * * * * munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron
Donde cada ! 3inutosC con privile%ios de usuario munin intentar:
e"ecutar el script /usr/bin/munin-cronC el cual en su interior contiene lo
si%uiente:
#!/bin/sh
[ -x /usr/share/munin/munin-update ] && /usr/share/munin/munin-update $@;
[ -x /usr/share/munin/munin-limits ] && /usr/share/munin/munin-limits $@;
[ -x /usr/share/munin/munin-graph ] && nice /usr/share/munin/munin-graph $@;
[ -x /usr/share/munin/munin-html ] && nice /usr/share/munin/munin-html $@;
=ue co3o se puede apreciarC son una serie de scripts )ue tienen por
o-"etivo actuali0ar la in$or3acinC calcular los l3itesC crear los %r:$icos <
%enerar el cdi%o DE/> necesario para visuali0ar las estadsticas.
Conclusin
>ue%o de toda la eGplicacin para instalar 3unin43asterC 3unin4nodeC
con$i%urar < pro%ra3ar plu%insC ve3os )ue el %ran responsa-le de una correcta
recoleccin de estadsticasC recae en el ad3inistrador )ue de-e sa-er u-icar el
atri-uto J/1 necesario para la situacin.
4+
Monitorizacin con Nagios
Introduccin
Para eGtender la 3onitori0acin de nuestro JBossC es preciso no contar
sola3ente con @erra3ientas de recoleccin de in$or3acinC si no )ue ade3:s
)ue Vse nos aviseW 3ediante un correo electrnico cuando una situacin es
Vanor3alW.
Supon%a3os )ue desea3os )ue se active una alar3a de advertencia
cuando el porcenta"e de 3e3oria li-re corresponda al +*X de la 3e3oria
total. S supon%a3os ade3:s )ue desea3os una alar3a crtica cuando este
porcenta"e lle%ue al 1*X. Esto es posi-le instalando 8a%ios co3o @erra3ienta
de 3onitori0acin < escri-iendo plugins para el 3is3o utili0ando J/1.
' continuacin se proceder: a eGplicar la instalacin de 8a%ios desde el
cdi%o $uente:
*e$uisitos
'ntes de co3en0ar con la instalacin de 8a%iosC para per3itir la vista de
las estadsticas < ver el estado actual de los serviciosC es preciso contar con el
si%uiente so$t;are instalado:
Servidor He- 'pac@e
>en%ua"e de pro%ra3acin PDP
Co3pilador ?CC
>i-rera ?D
Pode3os instalar estos pa)uetes con los si%uientes co3andos:
.ebian//buntu
# apt-get install apache2 php gcc glibc glibc-common gd gd-devel
Cent01
# yum install httpd php gcc glibc glibc-common gd gd-devel
Instalacin.
Crea3os un usuario lla3ado nagios < le da3os una contraseQa:
42
# /usr/sbin/useradd -m nagios
# passwd nagios
Crea3os un nuevo %rupo lla3ado nagcmd para per3itir la e"ecucin
se%ura de al%unos co3andos desde la inter$a0 ;e-. 'de3:sC indica3os )ue los
usuarios apache o www-data (para el caso de De-ian56-untu el usuario por
de$ecto de apac@e es www-data < para Cent,S el usuario es apache <
nagios pertenecen a este %rupo.
&mbas distribuciones
# /usr/sbin/groupadd nagcmd
# /usr/sbin/usermod -a -G nagcmd nagios
.ebian//buntu
# /usr/sbin/usermod -a -G nagcmd www-data
Cent01
# /usr/sbin/usermod -a -G nagcmd apache
Crea3os un directorio para descar%ar el cdi%o $uente necesario:
# mkdir ~/downloads
# cd ~/downloads
Descar%a3os el cdi%o $uente de 8a%ios < de 8a%ios Plu%ins desde
@ttp:55;;;.na%ios.or%5do;nload5 donde de-e3os descar%ar las Llti3as
versiones para cada pa)uete:
# wget http://osdn.dl.sourceforge.net/sourceforge/nagios/nagios-3.2.0.tar.gz
# wget http://osdn.dl.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.11.tar.gz
Para co3pilar e instalar na%iosC de-e3os entonces desco3pri3ir el
cdi%o $uente desde el pa)uete descar%ado:
# cd ~/downloads
# tar xzf nagios-3.2.0.tar.gz
# cd nagios-3.2.0
E"ecuta3os el script con'igure d:ndole el no3-re del %rupo )ue
aca-a3os de crear para su e"ecucin:
# ./configure --with-command-group=nagcmd
Co3pila3os el cdi%o $uente:
# make all
44
Instala3os los -inariosC los scripts de inicioC los arc@ivos de con$i%uracin
por de$ecto < esta-lece3os los privile%ios para la e"eucin:
# make install
# make install-init
# make install-config
# make install-commandmode
'Ln no de-e3os e"ecutar 8a%iosC antes es preciso reali0ar al%unos
a"ustes.
>os arc@ivos de con$i%uracin de e"e3plo @an sido instalados en el
directorio /usr/local/nagios/etc. Estos e"e3plos nos servir:n para co3en0ar a
tra-a"ar con 8a%ios. 8ecesita3os reali0ar solo un ca3-io a estos arc@ivos
antes de proceder.
Edita3os el arc@ivo /usr/local/nagios/etc/ob!ects/contacts.cfg
ca3-iando la lnea donde aparece el correo electrnico de contacto. De-e3os
entonces de"ar el nuestro o el )ue desea3os se utilice para tal pr:ctica.
Instala3os a@ora el arc@ivo de con$i%uracin necesario para )ue apac@e
pueda e"ecutar el entorno ;e- de na%ios con el si%uiente co3ando:
# make install-webconf
Crea3os una cuenta lla3ada nagiosadmin para poder identi$icarse en
la inter$a0 ;e-. El proceso nos pedir: ade3:s esta-lecer una contraseQa:
# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
9einicia3os 'pac@e para )ue los ca3-ios surtan e$ecto:
.ebian//buntu
# /etc/init.d/apache2 restart
Cent01
# /etc/init.d/httpd restart
' continuacin procedere3os a instalar los plu%ins de na%ios. Para elloC
de-e3os eGtraer el pa)uete con el cdi%o $uente:
# cd ~/downloads
# tar xzf nagios-plugins-1.4.11.tar.gz
# cd nagios-plugins-1.4.11
Co3pila3os e instala3os los plu%ins:
4!
# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
# make
# make install
'ntes de arrancar na%iosC va3os a 3arcar el script de arran)ue para
e"ecucin auto3:tica cuando el siste3a se inicie:
# chkconfig --add nagios
# chkconfig nagios on
.eri$ica3os el arc@ivo de con$i%uracin antes de partir (se reco3ienda
e"ecutar esto cada ve0 )ue se @a%a un ca3-io en dic@o arc@ivo
# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
Si no @a< erroresC entonces arran)ue3os na%ios:
# service nagios start
Para $inali0arC entonces de-e3os entrar a la inter$a0 ;e- de na%ios
visitando la si%uiente direccin: http4//localhost/nagios/
Dace3os clic en el enlace 1ervice .etail para ver )ue es lo )ue est:
siendo 3onitori0ado en nuestro siste3a.
Escri)ir plugins para nagios utili#ando J"%
Co3o el o-"etivo es 3onitori0ar JBoss en con"unto con las otras varia-les
del siste3aC utili0ando plugins personali0ados para nuestro casoC de-e3os
sa-er escri-ir Kstos para nagiosC donde recolectare3os la in$or3acin
necesaria.
'ntes de continuarC es preciso contar con un len%ua"e de pro%ra3acin
idneo para tal situacin. El len%ua"e esco%ido para tal caso es el len%ua"e PerlC
<a )ue cuenta con li-reras de $:cil uso para la pro%ra3acin.
Perl viene por de$ecto instalado en la 3a<ora de las distri-uciones de
linuGC por lo )ue su instalacin no ser: tratada en este 3anual.
Para instalar la li-rera necesariaC es preciso e"ecutar el si%uiente
co3ando:
# cpan -i Nagios::Plugin
Por ser la pri3era ve0 )ue esta3os e"ecutando cpan (-omprehensive
(erl Archive Networ. nos pedir: al%una in$or3acin adicionalC so-re todo lo
relacionado con nuestra u-icacin actual < el espe"o 3as cercanoC para
4#
reali0ar las descar%as de pa)uetes de 3anera r:pida.
>a creacin de un plu%in na%ios necesitaC %eneral3enteC de dos
ar%u3entos )ue de-en ser pasados al 3is3oC el valor warning < critical )ue
corresponden al valor de advertencia < de criticidad del evento
respectiva3ente.
Supon%a3os )ue la alar3a dice lo si%uiente:
5ormal: de * a R*
&dvertencia: de R* a (*
Critico: de (* a 1**
Entonces nuestro script de-e estar pro%ra3ado de tal $or3a )ue el valor
a 3edir sea de$inido en porcenta"e < ser capa0 de reci-ir estos dos
ar%u3entos. Esto es de-ido a )ue na%ios para poder reconocer este script
co3o un pluginC de-e estar incluido en sus arc@ivos de con$i%uracin.
9evise3os entonces el arc@ivo commands.cfg u-icado en
/usr/local/nagios/etc/ob!ectsC en su interior pode3os ver co3o se con$i%ura
un co3andoC co3o por e"e3ploC a)uel )ue c@e)uea la car%a del servidor.
Encontra3os entonces una lnea co3o la si%uiente:
# 'check_local_load' command definition
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
}
Co3o pode3os o-servarC al re$erirnos al co3ando check3local3load se
e"ecuta un script lla3do check3load con dos par:3etros: -w para warning < -c
para critical.
Si e"ecuta3os el co3ando en $or3a localC desde la u-icacin
/usr/local/nagios/libe"ec (ruta donde se al3acenan los plugins ve3os lo
si%uiente:
# ./check_load -w 2 -c 3
OK - load average: 0.05, 0.18, 0.13
>a salida del script nos indica )ue todo est: ,KC puesto )ue el valor de
car%a est: entre * < +. De @a-er estado entre + < 2 @u-iese 3arcado WARNING
< so-re 2 @u-iese 3arcado CRITICAL
8uestro o-"etivo entonces es crear un script )ue nos per3ita indicar
estos par:3etros < tener una salida si3ilar.
El si%uiente cdi%o cu3ple con el o-"etivo:
4&
#!/usr/bin/perl
use strict;
use warnings;
use Nagios::Plugin ;
use vars qw($VERSION $PROGNAME $verbose $warn $critical);
$VERSION = '1.0';
use File::Basename;
$PROGNAME = basename($0);
my $p = Nagios::Plugin->new(
usage => "Usage: %s
[ -c|--critical=<critical threshold> ]
[ -w|--warning=<warning threshold> ]",
version => $VERSION,
blurb => 'test'
);
$p->add_arg(
spec => 'warning|w=s',
help => 'warning value'
);
$p->add_arg(
spec => 'critical|c=s',
help => 'critical value',
);
$p->getopts;
unless (defined $p->opts->warning || defined $p->opts->critical ) {
$p->nagios_die("not enough arguments");
}
#####
my $return = `/opt/jboss/bin/twiddle.sh -s localhost get jboss.system:type=ServerInfo FreeMemory`;
my @arr = split("=", $return);
my $free = $arr[1];
$return = `/opt/jboss/bin/twiddle.sh -s localhost get jboss.system:type=ServerInfo TotalMemory`;
@arr = split("=", $return);
my $total = $arr[1];
my $result = 0;
if (int $total > 0)
{
$result = int (($free / $total) * 100);
}
#####
$p->nagios_exit(
return_code => $p->check_threshold($result),
message => "Free memory $result%"
);
Co3o pode3os o-servarC el Lnico cdi%o )ue de-e3os 3odi$icar es
a)uel )ue se encuentra deli3itado por #####C <a )ue es a@ donde utili0ando
t;iddle < J/1 pode3os sa-er el valor total de 3e3oriaC la 3e3oria disponi-le
< lue%o se calcula el porcenta"e.
Para a%re%ar este plugin a los co3andos reconocidos por na%iosC
de-e3os editar el arc@ivo indicado anterior3ente < a%re%ar lo si%uiente:
#JBoss
define command{
command_name check_jboss_memory
command_line $USER1$/check_jboss_memory -w $ARG1$ -c $ARG2$
}
4R
S para poder c@e)uear este valor contra un servidorC de-e3os editar el
arc@ivo localhost.cfg dentro de /usr/local/nagios/etc/ob!ects a%re%ando las
si%uientes lneas:
#JBoss
define service{
use local-service
host_name localhost
service_description JBoss Memory
check_command check_jboss_memory!80!90
}
Donde clara3ente ve3os )ue el pri3er ar%u3ento corresponde al valor
warning (R* < el se%undo ar%u3ento corresponde al valor critical ((*.
4(
Captulo !: JAAS
' continuacin se descri-e la $or3a de ase%urar el acceso a una
aplicacin ;e- en JBossC se descri-e la $or3a 3:s si3pleC con la o-tencin de
usuarios desde un arc@ivo de teGtoC pero sirve co3o -ase para autenticar
contra -ases de datos o servidores >D'P.
Configuracin de la seguridad est'ndar en la aplicacin (eb.
Se de-e 3odi$icar el descriptor 1/> de la aplicacin ;e- (el arc@ivo es
HEB4I875;e-.G3l dentro del ;ar para a%re%ar los ta% security-constraints <
login-config:
<web-app>
<security-constraint>
<web-resource-collection>
<web-resource-name>Application Name</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Application Name</realm-name>
</login-config>
<security-role>
<role-name>Admin</role-name>
</security-role>
</web-app>
Configurar un !dulo de login J%
Se de-e con$i%urar el 3dulo contra el cual se reali0ar: la validacinC
estos 3dulos se declaran en /server/<tipo/conf/login-config."ml. El
3dulo 3:s si3ple de autenticacin es -asado en arc@ivos
(/ser6oles7oginModule.
Este 3dulo se declara co3o un nuevo application-policy en este
arc@ivo:
<application-policy name="fileLoginModule">
<authentication>
<login-module
code="org.jboss.security.auth.spi.UsersRolesLoginModule"
flag="required"/>
</authentication>
</application-policy>
!*
9e)uiere dos arc@ivos de propiedadesC lla3ados users.properties <
roles.properties )ue de-en u-icarse en el directorio HEB4I875classes del
H'9.
El $or3ato del arc@ivo users.properties es el de un arc@ivo de
propiedades donde la clave es el no3-re de usuario < el valor la clave de
acceso:
admin=adminpwd
En el arc@ivo roles.properties la clave es el no3-re del usuario < el
valor la lista de roles de ese usuarioC separados con FCF
admin=Admin
Configuracin de la seguridad espec)fica de JBoss en la aplicacin
(eb.
Se de-e a%re%ar al H'9 un descriptor de aplicacin ;e- para JBossC este
descriptor es un arc@ivo /EE'4I875"-oss4;e-.G3l dentro del ;arC < contiene
con$i%uraciones espec$icas de JBossC por e"e3plo el no3-re del lo%in 3odule a
utili0ar para la validacin de usuarios.
E"e3plo de HEB4I875"-oss4;e-.G3l:
<jboss-web>
...
<security-domain>java:/jaas/fileLoginModule</security-domain>
...
</jboss-web>
8otar )ue el no3-re despuKs de "ava:5"aas5 de-e coincidir con el no3-re
declarado en el application-policyC en el arc@ivo login-config."ml
Creacin de tablas * carga de datos en %+,.
Si la autenticacin la va3os a reali0ar contra -ase de datosC lo pri3ero
)ue necesita3os es crear las ta-las en un 3otor de -ases de datosC co3o por
e"e3plo /<S=>.
8i el no3-re de las ta-las es $i"oC ni el no3-re de los ca3pos de cada
ta-laC con lo )ue si <a tene3os un 3odelo de datos )ue responde a esta
estructura no ser: necesario 3i%rarlo. .ere3os )ueC tanto la consulta de
usuarioC co3o la consulta de per$il se reali0an a travKs de una sentencia s/l
parametri0able.
!1
El si%uiente script crea dos ta-las:
role: con una clave Lnica < un no3-re. El ca3po no3-re ser:
i3portante a la @ora de de$inir la autori0acin.
user: con una clave LnicaC un lo%inC una contraseQa < una clave $or:nea
)ue vincula un usuario a un rol.
DROP TABLE IF EXISTS `user`;
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` int(10) unsigned NOT NULL,
`name` varchar(64) collate utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL auto_increment,
`login` varchar(128) collate utf8_spanish_ci NOT NULL,
`password` varchar(128) collate utf8_spanish_ci NOT NULL,
`roleId` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `ndx_user_roleId` (`roleId`),
CONSTRAINT `fk_user_roleId`
FOREIGN KEY (`roleId`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
El si%uiente script inserta dos usuarios < dos roles:
adminC con contraseQa adminC asociado al rol F'D/I8ISE9'E,9F
userC con contraseQa passwordC asociado al rol F6SE9F
INSERT INTO `role` (`id`,`name`) VALUES
(1,'ADMINISTRADOR'),
(2,'USER');
INSERT INTO `user` (`id`,`login`,`password`,`roleId`) VALUES
(1,'admin','ISMvKXpXpadDiUoOSoAfww==',1),
(2,'user','X03MO1qnZdYdgyfeuILPmQ==',2);
>as contraseQas est:n encriptadas usando el al%orit3o /D! en Base#4.
!+
Definicin del datasource * configuracin de la pol)tica de seguridad en
JBoss.
>a de$inicin de una $uente de datos en JBoss se reali0a aQadiendo un
$ic@ero con eGtensin -ds."ml en el directorio /server/<tipo/deployC con el
si%uiente contenido:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>simpleDS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/test</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>test</user-name>
<password>test</password>
</local-tx-datasource>
</datasources>
Eene3os )ue con$i%urar:
!ndi3name: con un id Lnico para nuestro datasourceC )ue usare3os para
invocarlo desde nuestra poltica de se%uridad.
connection-url: con la direccin < el no3-re de nuestra -ase de datos
/<S=>
user-name: con el lo%in de un usuario para acceder a la -ase de datos.
Claro est: )ue no se re$iere a uno de los usuarios de las ta-las antes
creadasC sino a un usuario de /<S=> con per3isos de lectura para
acceder a la -ase de datos.
password: con la contraseQa de acceso del usuario anterior.
En nuestro caso tene3os un $ic@ero /server/<tipo/deploy/test-
ds."ml para el acceso a la -ase de datos /<S=> de testC con un usuario de
/<S=> test con contraseQa test.
JBoss no viene con el driver para /<S=> preinstaladoC con lo )ueC si aLn
no lo tene3osC de-ere3os o-tenerlo < copiar el "arC mys+l-connector-
!ava.!arC en /server/<tipo/lib.
En el $ic@ero /server/<tipo/conf/login-config."ml de-e3os introducir
la si%uiente poltica de se%uridad:
!2
<!--#simpleWeb_config -->
<application-policy
name="simpleWebAuthenticationPolicy">
<authentication>
<login-module
code="org.jboss.security.auth.spi.DatabaseServerLoginModule"
flag="required">
<module-option name="dsJndiName">
java:/simpleDS
</module-option>
<module-option name="principalsQuery">
SELECT password FROM user WHERE login=?
</module-option>
<module-option name="rolesQuery">
SELECT role.name, 'Roles'
FROM user , role
WHERE user.roleId=role.id AND
login=?
</module-option>
<module-option name="hashAlgorithm">MD5</module-option>
<module-option name="hashEncoding">base64</module-option>
</login-module>
</authentication>
</application-policy>
Eene3os )ue con$i%urar:
<application-policy name89simple'eb&uthentication(olicy9:
con un id Lnico )ue identi$ica nuestra poltica de se%uridadC )ue
usare3os desde la aplicacin ;e- para enla0arla.
<module-option name89dsJndi5ame9!ava4simple.1<module-
option: con el no3-re del datasource )ue @e3os de$inido en el punto
anterior.
<module-option name89principals:uery9</module-option: con
la sentencia S=> para la o-tencin de la contraseQa del usuario )ue
reci-e co3o par:3etro. Co3o co3enta-aC si vuestro 3odelo de datos no
se corresponde con el de este e"e3ploC a)u asi%nara3os la sentencia
correspondiente.
<module-option name89roles:uery9</module-option: con la
sentencia S=> para la o-tencin del no3-re del per$il asociado al
usuarioC con las 3is3as consideraciones )ue en el punto anterior.
<module-option name89hash&lgorithm9</module-option:
indica el no3-re de al%orit3o )ue @e3os usado para %uardar nuestras
contraseQas en la ta-la de usuarios.
<module-option name89hash%ncoding9</module-option: indica
el tipo de encoding )ue usar: el al%orit3o para co3pro-ar la contraseQa.
En este punto @e3os con$i%urado el 3dulo J''S de JBoss para )ue
acceda a nuestra -ase de datos a travKs de un datasourceC el 3is3o )ue
de-era usar nuestra aplicacin ;e-.
Ca3-iar de -ase de datosC para pasar a un entorno de produccinC por
e"e3ploC es sencilloC -asta con 3odi$icar el vnculo (el no3-re del datasource
entre la poltica de se%uridad < el datasourceC o lo )ue es 3:s co3LnC al tener
varios datasources (uno por entornoC tendra3os varias polticas de se%uridad
(una por cada uno de ellos.
!4
Captulo !I : Clustering
Configuracin de J-roups.
Para aproGi3arnos a un entorno real @a< )ue aQadir otros par:3etros en
el co3ando de arrancada. 'de3:s en este post se utili0a la con$i%uracin all
para preparar un entorno clusterizable.
Para ver los posi-les valores de arranca del servidor de aplicaciones
pode3os e"ecutar los si%uiente:
sh run.sh help
=ue devuelve las posi-les opciones de arran)ue:
-h, help Show this help message
-V, version Show version information
-D<name>[=<value>] Set a system property
-d, bootdir=<dir> Set the boot patch directory; Must be absolute or url
-p, patchdir=<dir> Set the patch directory; Must be absolute or url
-n, netboot=<url> Boot from net with the given url as base
-c, configuration=<name> Set the server configuration name
-B, bootlib=<filename> Add an extra library to the front bootclasspath
-L, library=<filename> Add an extra library to the loaders classpath
-C, classpath=<url> Add an extra url to the loaders classpath
-P, properties=<url> Load system properties from the given url
-b, host=<host or ip> Bind address for all JBoss services
-g, partition=<name> HA Partition name (default=DefaultDomain)
-u, udp=<ip> UDP multicast address
-l, log=<log4j|jdk> Specify the logger plugin type
Co3o el propsito del e"e3plo es 3ontar un cluster e3pe0a3os
utili0ando la con$i%uracin all ()ue per3ite arrancar el servidor de aplicaciones
en 3odo clusterC arrancar los ;e- servicesC D'4J8DIC < otros.
Para arrancar el servidor de aplicaciones con las $uncionalidades de
cluster:
sh run.sh -c all -b <host or ip>, host=<host or ip>
Este par:3etro es i3portante tenerlo en cuenta pues ca3-ia dos
propiedades del siste3a !boss.bind.address < bind.address.J;roups 4estos
par:3etros so-reescri-en los por de$ecto en la con$i%uracin G3l del propio
servidor4
!boss.bind.address: indica la direccin donde los servicios Eo3catC
"r3p5pooled invoBers servicesCYetc escuc@ar:n.
bind.address.J;roups: utili0ada para indicar a J?roups con )ue IP se @ace el
bind del cluster.
Se puede $i"ar a *.*.*.* co3o direccin IP para -indar a todas las
!!
direcciones.
Para nuestro e"e3plo utili0a3os la ip 1(+.1#R.*.1 para levantar los
servicios:
sh run.sh -c all -b 192.168.0.1
7inal3ente pode3os pro-ar en el nave%ador si el arran)ue @a sido
correcto con @ttp:551(+.1#R.*.1:R*R*
Para parar el servidor de aplicaciones @a< )ue indicar en )ue direccin IP
est: arrancado con el para3etro 4s < utili0ar 4S para indicar el shutdown:
sh shutdown.sh -s 192.168.0.1 -S
Ejecucin del cluster.
'rrancar JBoss en a3-iente cluster es -astante sencilloC <a )ue $ue
construido pensando en a3-ientes distri-uidos )ue re)uieren de esta
caracterstica.
Por de$ectoC JBoss est: con$i%urado para arrancar en 3odo standalone o
nodo Lnico.
Para arrancar el servicio a 3odo clusterC de-e3os se%uir los si%uientes
pasos.
.a3os a lla3ar a las 3:)uinas node1 < node+
Para arrancar el servicio escuc@ando so-re una IP en particularC de-e3os
arrancar JBoss con los si%uientes par:3etros:
sh run.sh -c all -b 192.168.0.1
Supone3os )ue el node1 tiene IP 1(+.1#R.*.1 < )ue el node+ tiene la IP
1(+.1#R.*.+. Con lo )ue el arran)ue del nodo+ ser:
sh run.sh -c all -b 192.168.0.2
Si e"ecuta3os los co3andos anteriores en las 3:)uinas correspondientes
a<n no tenemos el cluster en funcionamiento. Para @a-ilitarlo se%ui3os
los si%uientes pasos para la instalacin:
De-e3os ase%urarnos )ue las dos 3:)uinas se ven entre si
(indispensa-le para la co3unicacin del cluster
JBoss utili0a J?roups para la co3unicacin para la co3unicacin entre las
3:)uinas < se puede reali0ar a travKs de 6DP o ECP. El 3odo de
!#
co3unicacin se puede 3odi$icar en server/all/deploy/cluster-
service."mlC < de-e3os especi$icar una %rupo para evitar acopla3iento.
Para )ue nuestro cluster no se acople con otros 3ie3-ros de la red (en el
caso de )ue eGistan de-e3os dar un no3-re
7inal3ente los co3andos de arran)ue para los nodos del cluster son:
sh run.sh -c all -b 192.168.0.1 -Djboss.partition.name=TestCluster
-Djboss.partition.udpGroup=230.10.0.1
sh run.sh -c all -b 192.168.0.2 -Djboss.partition.name=TestCluster
-Djboss.partition.udpGroup=230.10.0.1
Donde -.!boss.partition.name $i"a el no3-re del cluster <
-.!boss.partition.udp;roup $i"a el %rupo 6DP en el caso de esco%er el 3odo
de co3unicacin de red 6DP.
Si se esco"e el 3odo ECP este se%undo par:3etro de con$i%uracin no es
necesario. Se utili0a el protocolo 6DP por su 3e"or rendi3iento.
Para co3pro-ar )ue los dos nodos est:n arrancados:
http://192.168.0.1:8080
http://192.168.0.2:8080
Para parar los servidores de aplicaciones:
sh shutdown.sh -s 192.168.0.1 -S
sh shutdown.sh -s 192.168.0.1 -S
pac.e !od/j0
3odA"B es un conector )ue per3ite JBoss interactuar con servidores ;e-
co3o 'pac@e e incluso IIS usando el protocolo 'JP.
>a principal $uncionalidad de este 3dulo es per3itir a servidores de
aplicaciones enla0arse con un servidor ;e-. Este servidor ;e-C tpica3ente el
servidor DEEP 'pac@eC introduce una 3a<or %estin en las coneGiones de los
clientes < 3a<or la se%uridad en las transacciones del siste3a. 's 3is3o se
puede enla0ar varias instancias al servidor ;e- per3itiendo as una 3a<or
tolerancia a errores < ali%erar la car%a en los servidores Java.
Para con$i%urar entoncesC de-e3os descar%ar el arc@ivo 3odA"B.so desde
http://tomcat.apache.org/download-connectors.cgi
!&
De-e3os entonces copiar el arc@ivo a la ruta donde se al3acenan los
3dulos de apac@eC %eneral3ente est: en /usr/lib/apache=/modules para
De-ian56-untu < en /usr/lib/httpd/modules para Cent,S.
EntoncesC para )ue se e"ecuteC dentro del directorio conf.d (dentro del
directorio de apac@e de-e3os crear los si%uientes arc@ivos:
!k.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile "conf.d/workers.properties"
JkLogFile "logs/mod_jk.log"
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%S %Y] "
<Location /jkstatus/>
JkMount status
Order deny,allow
Allow from all
</Location>
JkMount /jmx-console loadbalancer
JkMount /jmx-console/* loadbalancer
workers.properties
psN5
;orBer.listNload-alancerCstatus
;orBer.nodo1.portNR**(
;orBer.nodo1.@ostN1(+.1#R.1.+
;orBer.nodo1.t<peNa"p12
;orBer.nodo1.l-$actorN1
;orBer.nodo+.portNR**(
;orBer.nodo+.@ostN1(+.1#R.1.2
;orBer.nodo+.t<peNa"p12
;orBer.nodo+.l-$actorN1
;orBer.load-alancer.t<peNl-
;orBer.load-alancer.-alanceA;orBersNnodo1Cnodo+
;orBer.status.t<peNstatus
El pri3er arc@ivo ("B.con$ le indica a apac@e )ue de-e car%ar el 3dulo
mod3!k.soC utili0ar el arc@ivo workers.properties co3o ad"unto < )ue de-e
crear una ruta a !m"-consoleC )ue ser: la aplicacin )ue va3os a c@e)uear.
El se%undo arc@ivo (;orBers.properties le indica al 3dulo donde est:n
los distintos nodosC sus direcciones IP < el $actor de -alanceo de car%a )ue
!R
tendr:n.
6na ve0 recar%ado apac@eC -asta con acceder a la direccin indicada
para co3pro-ar )ue el cluster est: $uncionando < -alanceando la car%a.
El estado del cluster se puede ver accediendo a la si%uiente direccin
(suponiendo )ue apac@e est: corriendo en 1(+.1#R.1.1: http://192.168.1.1/jkstatus
6n wor.er es una instancia )ue est: esperando para e"ecutar servlets por
cuenta de al%Ln servidor ;e-. Por e"e3ploC pode3os tener un servidor ;e-C
co3o las solicitudes de reenvo servlet de 'pac@e a un proceso JBoss (el
tra-a"ador corriendo detr:s de Kl.
El escenario descrito anterior3ente es 3u< si3pleC de @ec@oC uno puede
con$i%urar varios wor.ers para servir servlets por cuenta de un servidor ;e-
se%uro. >as ra0ones de esta con$i%uracin pueden ser:
=uere3os )ue di$erentes conteGtos para ser servido por los di$erentes
wor.ers para proporcionar un entorno de desarrollo donde todos los
desarrolladores co3partir el 3is3o servidor ;e- propioC sino un wor.er
propio.
=uere3os )ue di$erentes @osts virtuales servidos por di$erentes procesos
JBoss para proporcionar una separacin clara entre los sitios
pertenecientes a di$erentes e3presas.
=uere3os proporcionar e)uili-rio de car%aC lo )ue si%ni$ica e"ecutar
3Lltiples wor.ers de JBoss cada uno en una 3:)uina de su propia <
distri-uir las solicitudes entre ellos
>as ra0ones son pro-a-le3ente 3:s por tener varios wor.ersC pero se
supone )ue esta lista es su$iciente.
+ropiedades ,lo)ales
El $or3ato %eneral es
<nombre> = <valor>
>os puntos son utili0ados co3o parte del no3-re para representar una
"erar)ua de con$i%uracin.
>as directivas no v:lidas se re%istrar:n durante el inicio del servidor ;e-
< evitar:n )ue el servidor ;e- $uncione correcta3ente. 'l%unas directivas @an
sido desapro-adas. ' pesar de )ue todava $uncionanC de-e ree3pla0arlas por
sus sucesores.
!(
'l%unas directivas se per3iten varias veces. Esto se seQala
eGplcita3ente en las ta-las si%uientes.
.irectiva (redeterminado .escripci)n
;orBer.list a"p12 Co3prende una lista separada por co3as de los no3-res de
los wor.ers )ue el JK van a utili0ar. 'l arrancarC el plu%in de
servidor He- crear: una instancia de los ;orBersC cu<o
no3-re aparece en la propiedad ;orBer.listC estos son ta3-iKn
los ;orBers a los )ue puede asi%nar las solicitudes.
Esta directiva puede ser usada varias veces.
;orBer.3aintain #* Corresponde al intervalo de tie3po en se%undos )ue se
validar:n los wor.ers.
+ropiedades de los (or0ers
Cada directiva de con$i%uracin de los tra-a"adores se co3pone de tres
pala-ras separadas por un punto:
worker.<nombre>.<directiva>=<valor>
>a pri3era pala-ra es sie3pre wor.ers. >a se%unda pala-ra es el no3-re
del wor.er )ue puede ele%ir.
El no3-re del wor.er slo puede contener caracteres al$anu3Kricos Z'[\
Z'[\ Z*4(\ ZA ] 4\ < es sensi-le a 3a<Lsculas.
1ariables2 1ariables de entorno.
Se pueden de$inir < usar varia-les en el arc@ivo workers.properties.
Para de$inir una varia-le se utili0a la sintaGis:
<nombre_variable> = <valor>
>os puntos est:n per3itidos en el no3-re de varia-leC pero @a< )ue
tener cuidado de no utili0ar no3-res de varia-lesC )ue c@ocan con las
directrices est:ndar. Por lo tanto los no3-res de varia-le no de-e co3en0ar
con F;orBerF.
Para utili0ar una varia-leC se puede insertar F^ (no3-reF en cual)uier
lu%ar en el lado de valor de una lnea de propiedad. Si una varia-le no se @a
de$inido antes de su usoC se -usca en el entorno de proceso una varia-le con el
3is3o no3-re < el uso de su valor.
Propiedad de .erencia.
' 3enudo se )uiere utili0ar el valor de la propiedad 3is3a de varios
#*
wor.ers. Para reducir la duplicacin de las lneas de con$i%uracin < $acilitar el
3anteni3iento del arc@ivoC se pueden @eredar propiedades de un wor.er a
otroC o incluso de una plantilla a los wor.ers.
>a directiva de referencia )ue per3ite copiar con$i%uraciones entre los
wor.ers de una 3anera "er:r)uica. Si la con$i%uracin de nodo= esta-lece
worker.nodo=.reference 8 worker.nodo> entonces @ereda todas las
propiedades de nodo=C a eGcepcin de los )ue se esta-lecen eGplcita3ente
de nodo=.
,ista de directivas de los (or0ers.
.irectiva (redeterminado .escripci)n
t<pe a"p12 Eipo de wor.er (puede ser uno de a"p12C a"p14C J8IC li-ras o
de estado. El tipo de wor.er de$ine las directrices )ue
pueden aplicarse al wor.er.
'"p12 es el tipo de ;orBer )ue se pre$iere )ue JK utili0e
para la co3unicacin entre el servidor ;e- < JBoss. Este
tipo de wor.er usa sockets co3o canal de co3unicacin.
@ost local@ost 8o3-re de @ost o direccin IP del servidor JBoss. El
servidor JBoss re3oto de-e tener soporte para a"p12. El
no3-re de host puede tener un nL3ero de puerto
incrustado separados por los dos puntos (:.
port R**( 8L3ero de puerto re3oto. El valor por de$ecto depende
del tipo de wor.er. Para los wor.ers a"p12 el puerto por
de$ecto es ?,,-C 3ientras )ue para el a"p14 el valor es
?,>>.
socBetAti3eout * Eie3po de espera en se%undos e3pleados por el canal de
co3unicacin entre JK < @ost re3oto. Si el @ost re3oto no
responde dentro del tie3po especi$icadoC JK %enerar: un
errorC < vuelva a intentarlo de nuevo. Si se pone a cero
(por de$ecto JK esperar: a una in$inita cantidad de tie3po
en todas las operaciones.
socBetAconnectAti3eout socBetAti3eoutM1*** Eie3po de espera en 3ilise%undos utili0ado por el canal
de co3unicacin entre JK < @ost re3oto. Si el @ost re3oto
no responde dentro del tie3po especi$icadoC JK %enerar:
un errorC < vuelva a intentarlo de nuevo.
socBetAti3eout est: eGpresado en se%undosC <
socBetAconnectAti3eout en 3ilise%undosC por lo )ue en
tKr3inos a-solutosC el socBetAconnectAti3eout de$ecto es
i%ual a socBetAti3eout.
socBetABeepalive 7alse Esta directiva de-e ser utili0ada cuando se tiene un
corta$ue%os entre su servidor ;e- < JBossC )ue tienden a
interru3pir las coneGiones inactivas. Este indicador le dir:
al siste3a operativo para enviar 3ensa"es KEEPA'>I.E en
las coneGiones inactivas (intervalo depender: de la
con$i%uracin %lo-al de siste3a operativoC en %eneralC 1+*
3inutosC < evitar as )ue el servidor de se%uridad para
reducir las coneGiones inactivas. Para @a-ilitar keepalive
de-e esta-lecer este valor de propiedad en @rue.
pin%A3ode Este indicador deter3ina las condiciones en )ue se
sondean las coneGiones para ase%urarse de )ue si%uen
tra-a"ando. >a sonda se reali0a con un pa)uete de a"p12
vaco (ping < espera reci-ir una respuesta adecuada
(pong dentro de al%Ln tie3po de espera.
El valor puede ser cual)uier co3-inacin de las si%uientes
-anderas (varios valores se co3-inan sin separadores:
C (connect: Si se esta-leceC la coneGin se pro-ar: una
#1
ve0 despuKs de conectar con el servidor. El tie3po de
espera puede ser $i"ado por connect3timeout. Si no se
esta-leceC el valor de ping3timeout se utili0ar: en su
lu%ar.
P (prepost: Si se esta-leceC la coneGin se pro-ar: antes
de enviar cada peticin al servidor. El tie3po de espera
puede ser $i"ado por prepost3timeout. Si no se esta-leceC
el valor de ping3timeout se utili0ar: en su lu%ar.
I (interval: Si se esta-leceC la coneGin ser: pro-ada
durante el ciclo re%ular de 3anteni3iento internoC pero
slo si est: inactivo 3:s de connection3ping3interval.
El tie3po de espera puede ser $i"ado por pin%Ati3eout.
' Si se activaC todas las $or3as anteriores se utili0ar:n.
pin%Ati3eout 1**** Eie3po de espera en 3ilise%undos utili0ado cuando se
espera de la respuesta.
connectionApin%Ainterval (pin%Ati3eout51***M1* Cuando se activa el c@e)ueo de nodosC las coneGiones
inactivas durante 3:s tie3po )ue este intervalo en
se%undos se sondean por C(ing si todava $uncionan.
connectionApoolAsi0e Esto de$ine el nL3ero de coneGiones )ue se reali0an al
bac.end 'JP )ue se 3antiene co3o una a%rupacin de
coneGiones. Esta propiedad de coneGin slo se utili0a
para 3Lltiples @ilos de servidores ;e- co3o 'pac@eC IIS <
8etscape. >a propiedad connectionApoolAsi0e de-e re$le"ar
el nL3ero de solicitudes de un proceso de servidor ;e-
de-e ser capa0 de enviar a un bac.end en paralelo.
8or3al3ente este es el 3is3o )ue el nL3ero de @ilos por
el proceso de servidor ;e-. JK descu-rir: este nL3ero
para el servidor ;e- 'pac@e auto3:tica3ente <
esta-lecer: el ta3aQo del %rupo a este valor.
5o deben utiliAarse valores superiores a > en
&pache =." prefork o &pache >.B."
connectionApoolA3insi0e (pool_15+ El nL3ero 3ni3o de coneGiones )ue se 3antendr:.
5o deben utiliAarse valores superiores a > en
&pache =." prefork o &pache >.B."
connectionAac)uireAti3eout retriesMretr<Ainterval Eie3po de espera de )ue el wor.er va a esperar para una
to3a li-re en la 3e3oria cac@K antes de desistir.
l-$actor 1 Slo se utili0a para un wor.er 3ie3-ro de un -alanceador
de car%a.
El $actor de -alanceo de car%a es la cuota de tra-a"o del
;orBer. El 7actor co3parado con los otros ;orBers )ue
@acen el -alanceador de car%a. Por e"e3ploC si un ;orBer
tiene un l-$actor ! veces superior a otrosC entonces
reci-ir: cinco veces 3:s solicitudes.
Directivas de balanceo de carga.
.irectiva (redeterminado .escripci)n
-alanceA;orBers 6na lista separada por co3as de los wor.ers )ue el
-alanceador de car%a necesita 3ane"ar.
Esta directiva puede ser usada varias veces para el
-alanceador de car%a.
Estos wor.ers no de-en aparecer en la propiedad worker.list.
sticB<Asession Erue Especi$ica si las solicitudes de ID de la sesin de-era ser
rediri%ida @acia el wor.er 3is3o. Si sticky3session se
esta-lece en @rue las sesiones son pega!osasC de lo contrario
sticky3session se esta-lece en Calse. 1ticky3session
esta-lece en false cuando JBoss est: utili0ando un
#+
ad3inistrador de sesin )ue pueden persistir los datos de
sesin a travKs de varias instancias.
sticB<AsessionA$orce 7alse Especi$ica si las solicitudes de ID de sesinC para los wor.ers
)ue se encuentran en estado de error de-en ser rec@a0ados.
Si sticky3session3force se esta-lece en @rue < el ;orBer
)ue coincide con el ID de la sesin est: en estado de errorC el
cliente reci-ir: D,, E%rror de servidorF. Si se esta-lece a
Calse otro ;orBer se pu-licar: con la correspondiente pKrdida
de sesin de cliente. Esta directiva se utili0a slo cuando se
esta-lece sticky3session 8 @rue.
3et@od 9e)uest Especi$ica )uK 3Ktodo de -alanceo de car%a se utili0a para
ele%ir a los 3e"ores ;orBers. Een%a en cuenta )ue el perodo
de sesiones < el -alanceo de car%a per$ecto son o-"etivos en
con$lictoC especial3ente cuando el nL3ero de sesiones es
pe)ueQoC o el uso de sesiones es eGtre3ada3ente varia-le
para un %ran nL3ero de sesiones de esta por lo %eneral no es
un pro-le3a.
'l%unos 3Ktodos de notaC )ue se a%re%an en una ventana de
tie3po de desli0a3iento. Se su3an los accesosC < en cada
carrera de 3antener el 3KtodoC los contadores de car%a se
dividen por +. ?eneral3enteC esto sucede una ve0 por 3inutoC
dependiendo de la con$i%uracin de worker.maintain. El
valor de los contadores de car%a pueda ser inspeccionado con
el status de los wor.ers.
Si el 3Ktodo se esta-lece en G6He+uest el -alanceador
utili0ar: el nL3ero de peticiones para encontrar el 3e"or
wor.er. >os accesos ser:n distri-uidos de acuerdo con el
lbfactor Este es el valor por de$ecto < de-era ser el
apropiado para la 3a<ora de las aplicaciones.
Si el 3Ktodo se esta-lece en G1Hession el -alanceador
utili0ar: el nL3ero de sesiones para encontrar el 3e"or
wor.er. >os accesos ser:n distri-uidos de acuerdo con el
lbfactor. De-ido a )ue el -alanceador de no 3antiene nin%Ln
tipo de estadoC en realidad no sa-e el nL3ero de sesiones. En
su lu%arC cuenta cada solicitudC sin una cooBie de sesin o
codi$icacin de direcciones 69> co3o una nueva sesin. Este
3Ktodo no sa-r:C cuando un perodo de sesiones es inv:lidoC
ni va a corre%ir sus ci$ras de car%a de acuerdo a los tie3pos
de espera de sesin o de con3utacin por error de los
wor.ers. Este 3Ktodo de-e utili0arseC si las sesiones son la
li3itacin de recursosC por e"e3ploC la 3e3oria cuando slo
se @an li3itado < las sesiones necesitan 3uc@a 3e3oria.
Si el 3Ktodo se esta-lece en G@Hraffic el -alanceador utili0ar:
el tr:$ico de red entre JK < JBoss para encontrar el 3e"or
;orBer. >os accesos ser:n distri-uidos de acuerdo con el
lbfactor. Este 3Ktodo de-e utili0arse si la red @acia < desde
los backends es el recurso li3itante.
Si se esta-lece a GBHusyness el -alanceador esco%er: al
wor.er con la car%a 3:s actualC -asado en cu:ntas peticiones
el wor.er est: cu3pliendo actual3ente. Este nL3ero se
divide por el lbfactor de los ;orBersC < el valor 3:s -a"o
(3enos ocupados de los ;orBers. Este 3Ktodo es
especial3ente interesanteC si su solicitud de to3ar un tie3po
para procesarC co3o para una aplicacin de descar%a.
locB ,pti3istic Especi$ica el 3Ktodo de -lo)ueo )ue el -alanceador de car%a
utili0a para la sincroni0acin de datos de tie3po de e"ecucin
de la 3e3oria co3partida. Si el -lo)ueo se esta-lece en 0
GptimisticHC el -alanceador no -lo)uear: el uso co3partido
de 3e3oria para encontrar el 3e"or ;orBer. Si se pone a (
GessimisticH el -alanceador -lo)uear: el uso co3partido de
la 3e3oria. El -alanceador tra-a"ar: con 3:s precisin en
estado (essimisticC pero pueden ralenti0ar el tie3po 3edio
de respuesta.
retries + Si el -alanceador de car%a no puede o-tener un wor.er v:lido
o en caso de con3utacin por errorC se intentar: de nuevo un
nL3ero de veces dado por reintentos. 'ntes de cada reintento
#2
de envoC se @ar: una pausa. Se de-e de$inir el par:3etro
retry3interval.
>a lista co3pleta de con$i%uraciones para este 3dulo la puede
encontrar en la docu3entacin o$icial de 3odA"B.
Cluster !.
Supon%a3os )ue parte del pro<ecto consiste en )ueC diaria3enteC se @a
de co3unicar a la central desde una sucursal )ui0:s la cantidad de ventas del
dia. El departa3ento de conta-ilidad pide estudiar la posi-ilidad de
in$or3ati0ar este procesoC e in$or3a de la i3portancia de )ue este proceso no
$alle. Se sa-e ade3:s )ue el departa3ento de in$or3:tica de la e3presa
dispone de un webservice a travKs del cual se puede noti$icar esta in$or3acin
(no @are3os esta parteC <a )ue no es el o-"etivo. De esta pe)ueQa
in$or3acin pode3os eGtraer las si%uientes conclusiones:
8ecesita3os un proceso )ue se e"ecute recursiva3ente a 3odo de cron.
Sa-e3osC )ue nuestro proceso de-e reco%er la in$or3acin de la -ase de
datos < enviar dic@a in$or3acin diaria3ente al cierre. Si supone3os )ue
nuestro cierre es a las +*:** @oras < la apertura es a las 1*:** @orasC
pode3os suponerC )ue nuestra tarea recursiva de-e conse%uir enviar la
in$or3acin cada da durante el periodo de tie3po )ue va desde las
+*:** @oras del da actual @asta las 1*:** @oras del da si%uiente. 6na
ve0 )ue lo consi%ueC rellena la in$or3acin enviada en al%una ta-la de
-ase de datos indicando )ue ese da <a @a sido noti$icado. Eoda esta
parte la pode3os resolver 3ediante un al%orit3o sencillo.
Ea3-iKn nos @an indicado la i3portancia )ue tiene )ue este proceso no
$alle. Evidente3ente el departa3ento de conta-ilidad no sa-e )ue lo )ue
est: pidiendo es )ue el proceso se realice en Falta disponi-ilidadF. Es
decirC necesita3os )ue el proceso se e"ecute en dos 3:)uinas distintas.
Del apartado 2. Intui3os un pro-le3a. `Pode3os noti$icar dos veces a la
central la 3is3a in$or3acinT >a respuesta es no. Es necesarioC )ue de
al%una 3anera los procesos se sincronicen. Evidente3enteC podra3os
usar la -ase de datos co3o punto de sincroni0acin < 3ediante al%Ln
al%orit3o 3:s o 3enos co3ple"o lo conse%uira3osC pero `no eGiste
al%una 3anera 3:s sencillaT. '@ es donde entra la alta disponi-ilidad de
JBoss. 9eal3ente lo )ue nosotros necesita3os es )ue nuestra tarea
plani$icada se desplie%ue en a3-os servidores de aplicacionesC pero slo
uno de ellos de-e estar activoC es decir en 3odo activo4pasivoC o 3e"or
dic@o F3aestro4esclavoFC lo )ue JBoss deno3ina D'4Sin%leton.
E3pe0are3os creando un inter$a0 )ue lla3are3os I8oti$icadorCentral:
#4
package com.linuxcenter.jboss;
public interface INotificadorCentral {
public boolean diaNotificado();
public boolean isPeriodoNotificacion();
public void notificayGuarda();
}
Creare3os a@ora la clase 8oti$icadorCentral:
package com.linuxcenter.jboss;
import java.util.Date;
import org.jboss.varia.scheduler.Schedulable;
public class NotificadorCentral implements INotificadorCentral, Schedulable {
public boolean diaNotificado() {
System.out.println("COMPRUEBO SI EL DA YA HA SIDO NOTIFICADO");
return false;
}
public boolean isPeriodoNotificacion() {
System.out.println("COMPRUEBO SI ESTOY EN PERIODO DE NOTIFICACION");
return true;
}
public void notificayGuarda() {
System.out.println("RECOJO INFORMACIN DE BASE DE DATOS.");
System.out.println("NOTIFICO A LA CENTRAL.");
System.out.println("GUARDO EN BASE DE DATOS.");
}
public void perform(Date arg0, long arg1) {
if(diaNotificado()) {
return;
}
if(!isPeriodoNotificacion()) {
return;
}
#!

notificayGuarda();
}
}
Creare3os a continuacin el descriptor del servicio: ("-oss4service.G3l
<?xml version="1.0" encoding="UTF-8"?>
<server>
<mbean code="org.jboss.varia.scheduler.Scheduler" name="notificador:service=Scheduler">
<attribute name="StartAtStartup">true</attribute>
<attribute name="SchedulableClass">com.linuxcenter.jboss.NotificadorCentral</attribute>
<attribute name="InitialStartDate">NOW</attribute>
<attribute name="SchedulePeriod">15000</attribute>
<attribute name="InitialRepetitions">-1</attribute>
</mbean>
</server>
7inal3enteC de-e3os co3pilar las clases < %enerar el arc@ivo S'9 para la
ocasin.
Este $ic@eroC lo va3os a desple%ar en la carpeta server5all5$ar3 al i%ual
)ue una aplicacin co3Ln < corriente.
Co3o los servidores est:n tra-a"ando en 3odo clusterC vere3os en
a3-as consolas la si%uiente salida:
INFO [STDOUT] COMPRUEBO SI EL DIA YA HA SIDO NOTIFICADO
INFO [STDOUT] COMPRUEDO SI ESTOY EN PERIODO DE NOTIFICACION
INFO [STDOUT] RECOJO INFORMACION DE BASE DE DATOS
INFO [STDOUT] NOTIFICO A LA CENTRAL
INFO [STDOUT] GUARDO EN BASE DE DATOS
Para preparar el cluster de alta disponi-ilidadC de-e3os considerar el
si%uiente dia%ra3a:
##
Co3o se puede o-servarC al $allar el nodo 3aestroC se traspasa la
responsa-ilidad a uno de los nodos esclavos. S los otros nodos esclavos si%uen
estando co3o tal. JBoss deno3ina esta con$i%uracin co3o I& 1ingleton.
Para con$i%urar a los nodos de este 3odoC de-e3os entonces 3odi$icar el
arc@ivo server/all/deploy/cluster-service."ml.
Co3enta3os el apartado de coneGin 6DP del si%uiente 3odo:
#&
<!--
<Config>
<UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.3}"
mcast_port="${jboss.hapartition.mcast_port:45566}"
tos="8"
ucast_recv_buf_size="20000000"
ucast_send_buf_size="640000"
mcast_recv_buf_size="25000000"
mcast_send_buf_size="640000"
loopback="false"
discard_incompatible_packets="true"
enable_bundling="false"
max_bundle_size="64000"
max_bundle_timeout="30"
use_incoming_packet_handler="true"
use_outgoing_packet_handler="false"
ip_ttl="${jgroups.udp.ip_ttl:2}"
down_thread="false" up_thread="false"/>
<PING timeout="2000"
down_thread="false" up_thread="false" num_initial_members="3"/>
<MERGE2 max_interval="100000"
down_thread="false" up_thread="false" min_interval="20000"/>
<FD_SOCK down_thread="false" up_thread="false"/>
<FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
<VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
<pbcast.NAKACK max_xmit_size="60000"
use_mcast_xmit="false" gc_lag="0"
retransmit_timeout="300,600,1200,2400,4800"
down_thread="false" up_thread="false"
discard_delivered_msgs="true"/>
<UNICAST timeout="300,600,1200,2400,3600"
down_thread="false" up_thread="false"/>
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
down_thread="false" up_thread="false"
max_bytes="400000"/>
<pbcast.GMS print_local_addr="true" join_timeout="3000"
down_thread="false" up_thread="false"
join_retry_timeout="2000" shun="true"
view_bundling="true"/>
<FRAG2 frag_size="60000" down_thread="false" up_thread="false"/>
<pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
</Config>
-->
Suponiendo )ue los nodos tienen direcciones IP >-=.>J?.>.= <
>-=.>J?.>.B. En el pri3er nodoC ca3-ia3os la con$i%uracin desco3entando
el apartado ECP < lo de"a3os de la si%uiente $or3a:
<Config>
<TCP bind_addr="192.168.1.2" start_port="7800" loopback="true"
tcp_nodelay="true"
recv_buf_size="20000000"
send_buf_size="640000"
discard_incompatible_packets="true"
enable_bundling="false"
max_bundle_size="64000"
max_bundle_timeout="30"
use_incoming_packet_handler="true"
use_outgoing_packet_handler="false"
down_thread="false" up_thread="false"
use_send_queues="false"
sock_conn_timeout="300"
skip_suspected_members="true"/>
<TCPPING initial_hosts="192.168.1.2[7800],192.168.1.3[7800]" port_range="3"
timeout="3000"
down_thread="false" up_thread="false"
num_initial_members="3"/>
<MERGE2 max_interval="100000"
down_thread="false" up_thread="false" min_interval="20000"/>
<FD_SOCK down_thread="false" up_thread="false"/>
<FD timeout="10000" max_tries="5" down_thread="false" up_thread="false" shun="true"/>
<VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false"/>
<pbcast.NAKACK max_xmit_size="60000"
#R
use_mcast_xmit="false" gc_lag="0"
retransmit_timeout="300,600,1200,2400,4800"
down_thread="false" up_thread="false"
discard_delivered_msgs="true"/>
<pbcast.STABLE stability_delay="1000" desired_avg_gossip="50000"
down_thread="false" up_thread="false"
max_bytes="400000"/>
<pbcast.GMS print_local_addr="true" join_timeout="3000"
down_thread="false" up_thread="false"
join_retry_timeout="2000" shun="true"
view_bundling="true"/>
<pbcast.STATE_TRANSFER down_thread="false" up_thread="false" use_flush="false"/>
</Config>
Para el se%undo nodoC se @acen las 3is3as 3odi$icacionesC pero
colocando la direccin IP correspondiente en los puntos 3arcados en ne%rita.
'l arrancar a3-os servidoresC ve3os )ue en el pri3er nodo se produce la
secuencia de 3ensa"es:
INFO [STDOUT] COMPRUEBO SI EL DIA YA HA SIDO NOTIFICADO
INFO [STDOUT] COMPRUEDO SI ESTOY EN PERIODO DE NOTIFICACION
INFO [STDOUT] RECOJO INFORMACION DE BASE DE DATOS
INFO [STDOUT] NOTIFICO A LA CENTRAL
INFO [STDOUT] GUARDO EN BASE DE DATOS
/ientras )ue el se%undo nodo si%ue +uieto.
'l parar el pri3er nodoC aprecia3os co3o en el se%undo nodo se to3a el
control de la aplicacin a los pocos se%undos de cado el pri3er servidor.
INFO [STDOUT] COMPRUEBO SI EL DIA YA HA SIDO NOTIFICADO
INFO [STDOUT] COMPRUEDO SI ESTOY EN PERIODO DE NOTIFICACION
INFO [STDOUT] RECOJO INFORMACION DE BASE DE DATOS
INFO [STDOUT] NOTIFICO A LA CENTRAL
INFO [STDOUT] GUARDO EN BASE DE DATOS
#(
Captulo !II: -pti&i#acin de JBoss
Para opti3i0ar el entorno JBossC de-e3os preocuparnos de los si%uientes
puntos:
0ptimiAar el front-end
Peticiones DEEP.
Co3pilacin de JSP
0ptimiAar el back-end
ConeGiones a la -ase de datos.
0ptimiAar los recursos de memoria.
9ecolectores de -asura.
>a per'ormance de una aplicacin JBoss es alta3ente dependiente del
entorno donde se est: e"ecutando. Este entorno inclu<e tanto el @ard;are
co3o el so$t;are. Cada uno de esos co3ponentes tienen un e$ecto en la
per'ormance de dic@a aplicacin.
El :r-ol de "erar)ua entonces es el si%uiente:
4 Dard;are (CP6C 9'/C DiscosC etc
4 Siste3a ,perativo
4 Java .irtual /ac@ine
4 Servidor JBoss
4 'plicacin
Eleccin de la J1M.
>a eleccin de la Java .irtual /ac@ineC co3o se puede o-servar en el
:r-olC incide directa3ente en el co3porta3iento del servidor < de la
aplicacin.
EGisten 3uc@as alternativas de J./C pero lo )ue de-e3os considerar es
lo si%uiente:
El uso de una 3:)uina con procesador de #4 -its < una J./ para esta
ar)uitectura per3ite utili0ar %randes ta3aQos de heaps.
El uso de varios procesadores (dos o 3:s < el uso de varios
&*
recolectores de -asura (< en paralelo per3iten una alta per$or3ance < un
r:pido proceso de recolecin. Sin e3-ar%oC lo )ue real3ente de-e3os
entender es el proceso de recolecin. Para esoC se reco3iendo la actuali0acin
al 3enos de la JDK versin !C la cual <a viene con auto a"uste.
De todos 3odosC cada J./ inclu<e opciones )ue pueden a$ectar a la
per$or3ance. >as 3as relevantes son las si%uientes:
Ea3aQo del heap.
9ecolecin de -asura.
Dilado (E@readin%
J!" .eap
El ta3aQo del @ead se traduce co3o la cantidad de 3e3oria )ue el J./
utili0ar: para tra-a"ar.
6n servidor JBoss < una aplicacin crea instancias de clases "ava )ue son
alo"adas en esta 3e3oria. Por de$ectoC JBoss se e"ecuta con un @eap inicial de
#4/B. Para 3odi$icar el ta3aQo del @eapC de-e3os 3odi$icar el arc@ivo run.s
con la si%uiente opcin:
Set JAVA_OPTS = %JAVA_OPTS% -xms128m -xmx512m
Opti!izacin de 3o!cat.
JBoss utili0a to3cat co3o contenedor de servletsC por lo )ue de-e3os
3odi$icar el arc@ivo u-icado en /server/<modo/deploy /!boss-
web.deployer/server."ml
En este $ic@eroC -uscare3os la si%uiente lnea:
<Connector port="8080"
address="${jboss.bind.address}"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
redirectPort="8443"
acceptCount="100"
connectionTimeout="20000"
disableUploadTimeout="true"/>
Donde entonces de-e3os tener las si%uientes consideraciones:
El valor min1pare@hreads de-e ser un poco 3enor a la car%a nor3al.
&1
El valor ma"1pare@hreads de-e ser un poco 3a<or al peak de car%a.
Esto se deduceC de-ido a )ue min1pare@hreads si%ni$ica Fal partirC
sie3pre 3antiene esta cantidad de @ilos esperandoW. ma"1pare@hreads
si%ni$ica Fsi sie3pre se 3antiene so-re 3inSpareE@readsC entonces conserva
esta cantidad de @ilos esperandoW.
Eli!inar directorios de trabajo.
Eo3cat %eneral3ente no eli3ina los directorios de tra-a"o cuando las
aplicaciones son undeployed. Esto causa pro-le3as en la co3pilacin de JSP
so-re todo cuando se re4desplie%a una aplicacin. Pode3os usar el atri-uto
.elete'ork.irs para )ue se eli3ine el directorio durante el undeployment.
<mbean
code="org.jboss.web.tomcat.tc5.Tomcat5"
name="jboss.web:service=WebServer">
attribute name=DeleteWorkDirs> true</attribute>
...
</mbean>
Co!porta!iento de la carga de clases.

Eo3cat nor3al3ente usa el car%ador de clases padre para car%ar las
clases antes del correspondiente al H'9. Esto es un est:ndar de Java=
classloading behavior. Sin e3-ar%oC desde la especi$icacin de servlet +.2
se re)uiere )ue pri3ero se e"ecute el car%ador del H'9 -uscando dentro de
5HEB4I875classes < 5HEB4 I875li-.
<mbean code="org.jboss.web.tomcat.tc5.Tomcat5"
name="jboss.web:service=WebServer">
<attribute name=Java2ClassLoadingCompliance> true</attribute>
...
</mbean>
Opti!izacin de J%P.
El co3pilador de p:%inas JSP se encuentra en 3odo development por
de$ecto.
Para au3entar la per$or3anceC se pueden reali0ar las si%uientes
operaciones:
9educir el ta3aQo de log.
Eli3inar la revisin de is-modi'ied en cada peticin.
Preco3pilar las p:%inas JSP.
&+
Opti!izacin de ,og4J
El re%istro del siste3a es uno de los aspectos principales de una
aplicacin de nivel e3presarial. JBoss usa >o%4J co3o inter$a0 de re%istro del
siste3a.
El &)ean de registro
JBoss provee de un mbean )ue puede ser utili0ado para con$i%urar las
opciones del re%istro.
Este mbean %eneral3ente est: de$inido en el si%uiente arc@ivo:
5con$5"-oss4service.G3l.

<mbean code=org.jboss.logging.Log4jService
name=jboss.system:type=Log4jService.service=Logging>
<attribute name=ConfigurationURL>resource:log4j.xml</attribute>
<attribute name=Log4jQuietMode>true</attribute>
</mbean>
Esto car%ar: la con$i%uracin desde el arc@ivo 5con$5lo%4".G3l
EGisten 2 co3ponentes )ue de-e3os o-servar en esta con$i%uracin:
4 >o%%ers : =ue re%istrar.
4 'ppenders : Donde re%istrar.
4 >a<outs : 7or3ato del re%istro.
El proceso de re%istro tiene %randes e$ectos en la per'ormance de un
servidor. Por lo cualC pode3os reali0ar lo si%uiente:
Des.abilitar el registro por consola
Edita3os el arc@ivo server5ItipoJ5con$5lo%4".con$i% C ca3-iando el
si%uiente codi%o 1/>:
<root>
<appender-ref ref=CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
por
<root>
<appender-ref ref="FILE"/>
</root>
&2
Ca!biar el nivel de registro.
Edita3os el arc@ivo server5ItipoJ5con$5lo%4".con$i% C ca3-iando los
si%uientes $ra%3entos:
<category name="org.apache">
<priority value="INFO"/>
</category>
<category name="org.jgroups">
<priority value="INFO"/>
</category>
>os valores de prioridad son los si%uienes:
%6606: 3ensa"es de error.
'&65: 3ensa"es de advertencia.
25C0: 3ensa"es de estado.
.%B/;: 3ensa"es de depuracin.
@6&C%: 3ensa"es de depuracin 3as eGplcito.
&4

También podría gustarte