Configuración apache como balanceador con mod_jk

Después de configurarlo todo vamos a probar realmente que esto funciona, que la alta disponibilidad con replicación de sesiones es real, para ellos vamos utilizaremos apache con el módulo mod_jk (se puede instalar en uno de los dos servidores que hemos utilizado hasta ahora o en un nuevo servidor). En este caso soy partidario de un nuevo servidor para garantizar la mayor disponibilidad, en este ejemplo lo configurare en un solo apache pero lo suyo es tener mínimo dos y que ambos balanceen a nuestros servidores jboss.

Procedemos con la instalación de apache:

yum install httpd
yum install httpd-devel.x86_64

Realizamos una configuración sencilla de apache:

vi /etc/httpd/conf/httpd.conf

…
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, instead of the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 80
…
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName 192.168.1.3:80

service httpd start

Verificamos su funcionamiento accediendo a la página de inicio de apache: http://192.168.1.3/

Descargamos el artefacto “tomcat-connectors” que alberga el módulo mod_jk que se utiliza para realizar el balanceo tanto en tomcat como en widfly y lo instalamos:

wget http://apache.rediris.es//tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.42-src.tar.gz
cd /usr/local/src/
tar zxf tomcat-connectors-1.2.42-src.tar.gz
cd tomcat-connectors-1.2.42-src/
./configure --with-apxs=/usr/bin/apxs
make && make install

Procedemos con la configuración del módulo mod_jk:

cd /etc/httpd/conf.modules.d/

vi mod_jk.conf

# Load mod_jk module
# Specify the filename of the mod_jk lib
LoadModule jk_module /etc/httpd/modules/mod_jk.so
#LoadModule ssl_module modules/mod_ssl.so
# Where to find workers.properties
JkWorkersFile /etc/httpd/conf/workers.properties
# Where to put jk logs
JkLogFile /var/log/httpd/mod_jk.log
# SSL Additions below:
JkExtractSSL            On
JkHTTPSIndicator        HTTPS
JkSessionIndicator      SSL_SESSION_ID
JkCIPHERIndicator       SSL_CIPHER
JkCERTSIndicator        SSL_CLIENT_CERT

# Set the jk log level [debug/error/info]
JkLogLevel info
# Select the log format
JkLogStampFormat  "[%a %b %d %H:%M:%S %Y]"
# JkOptions indicates to send SSK KEY SIZE
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
# JkRequestLogFormat
JkRequestLogFormat "%w %V %T"
# Directiva para especificar que aplicaciones queremos que pasen
# por mod_mk para el balanceo.
# Mount your applications
# The default setting only sends Java application data to mod_jk.
# Use the commented-out line to send all URLs through mod_jk.
# JkMount /* loadbalancer
#JkMount /application/* loadbalancer
#JkMount /clusterjsp/* loadbalancer
# You can use external file for mount points.
# It will be checked for updates each 60 seconds.
# The format of the file is: /url=worker
# /examples/*=loadbalancer
JkMountFile /etc/httpd/conf/uriworkermap.properties
# Add shared memory.
# This directive is present with 1.2.10 and
# later versions of mod_jk, and is needed for
# for load balancing to work properly
JkShmFile /var/log/httpd/jk.shm
<Location "/jkstatus">
    JkMount status
    Require host localhost
Require all granted(Permitimos que desde todas las IPs se puedan conectar para ver el estado)
</Location>

Cd /etc/httpd/conf

Vi workers.properties

# Define la lista de workers  que se usaran para mapear las peticiones
worker.list=loadbalancer,status
worker.maintain=2

# Configuración basica para todos los worker
worker.basic.type=ajp13
worker.basic.socket_timeout=1
worker.basic.connect_timeout=100
worker.basic.ping_mode=A
worker.basic.port=8009
worker.basic.lbfactor=1

# Definimos el Nodo1
worker.jboss1.reference=worker.basic
worker.jboss1.host=192.168.1.1

# Definimos el Nodo2
worker.jboss2.reference=worker.basic
worker.jboss2.host=192.168.1.1

#Definimos el balanceo de carga
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=jboss1,jboss2
worker.loadbalancer.sticky_session=true
worker.loadbalancer.retries=1
worker.status.type=status

Vi uriworkermap.properties

/clusterjsp/*=loadbalancer

Verificamos que el balanceo es correcto y que las sesiones se mantienen:

7

Como se puede apreciar apache está balanceando correctamente y se mantienen las sesiones xUYjHUPoKEeJxQU_f-if0ZkaAgtZwsMqy3U-yHqW.

 

 

 

 

 

Anuncios