Instalación de mod_cluster en Apache

por | diciembre 17, 2018

Si tenemos cuenta en Red Hat con suscripción activa podemos descargar el conector nativo (módulo para Apache) desde su web.

Si no tenemos cuenta, también podemos hacernos con el módulo descargando los binarios. Actualmente las dos versiones de la rama estable disponibles en la web de Jboss son:

Tenemos una tercera opción que es compilar el módulo desde código fuente. Esta opción además es la única que tenemos de momento para conseguir el módulo de la rama de desarrollo 2.0 que actualmente se encuentra en pre-release y sin binarios oficiales publicados.

Compilando versión 1.3.1 e inferiores

Para la versión 1.2.6:

wget -c http://downloads.jboss.org/mod_cluster//1.2.6.Final/linux-x86_64/mod_cluster-1.2.6.Final-src.tar.gz
tar -zxvf mod_cluster-1.2.6.Final-src.tar.gz 
cd mod_cluster-1.2.6.Final-src/
./build.sh

Y la 1.3.1 que es la última versión disponible de la rama estable:

wget -c http://downloads.jboss.org/mod_cluster//1.3.1.Final/linux-x86_64/mod_cluster-1.3.1.Final-src.tar.gz
tar -zxvf mod_cluster-1.3.1.Final-src.tar.gz
cd mod_cluster-1.3.1.Final-src/
./build.sh

En ambos casos tendremos los módulos en output/linux2-x64/opt/jboss/httpd/lib/httpd/modules, con una pequeña diferencia: el módulo mod_slotmem.so de la versión 1.2.6 pasa a llamarse mod_cluster_slotmem.so en la 1.3.1

Compilando la versión 2.0

Esta versión actualmente se encuentra en pre-release y el proyecto que tiene el código del módulo de Apache se ha renombrado a mod_proxy_cluster. Un poco lioso la verdad…

Necesitamos los headers de Apache para compilar el módulo:

# Debian y derivadas (Ubuntu)
apt install apache2-dev

# RHEL y derivadas (Fedora,CentOS)
yum install httpd-devel

Procedemos. En mi caso tuve que especificar en Debian el directorio de headers de Apache al lanzar cmake:

git clone https://github.com/modcluster/mod_proxy_cluster.git
cd mod_proxy_cluster/native
mkdir build 
cd build
cmake ../ -G "Unix Makefiles" -DAPACHE_INCLUDE_DIR=/usr/include/apache2

Ahora tenemos los módulos para Apache en el directorio modules:

[jota@jota-pc build]$ ls modules/
mod_advertise.so  mod_cluster_slotmem.so  mod_manager.so  mod_proxy_cluster.so

Carga de módulos en Apache

Tanto si hemos descargado los binarios como si los hemos compilado desde fuentes, tendremos que mover los módulos al directorio de carga de módulos de Apache. Esto depende de la distro:

# Debian & derivadas
/usr/lib/apache2/modules

# RHEL & derivadas
/etc/httpd/modules

Una vez los módulos en su sitio tenemos que cargarlos en la configuración. En primer lugar tenemos que comentar la carga de mod_proxy_balancer ya que es incompatible con mod_cluster:

# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

Cargamos los módulos que será necesarios para funcionalidades de mod_cluster:

# Básico
LoadModule proxy_module modules/mod_proxy.so

# Si las conexiones con backend van a ir por HTTP
LoadModule proxy_http_module modules/mod_proxy_http.so

# Si las conexiones con backend van a ir por AJP
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

# Si las conexiones con backend van a ir por HTTPS (también si el VirtualHost es seguro)
LoadModule ssl_module modules/mod_ssl.so

Cargamos los módulos específicos de mod_cluster:

# Versión 1.2.6 o inferiores
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

# Versión 1.3.1 y posteriores (incluída 2.0)
LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

NOTA: Es importante el orden de carga de módulos. Por ejemplo, mod_proxy.so debe cargarse antes de los específicos de mod_cluster u obtendremos un error en el arranque del servidor web.

Con esto ya tenemos mod_cluster instalado en nuestro Apache. Si arrancamos deberíamos ver una línea que incluya:

mod_cluster/1.3.1.Final configured -- resuming normal operations

La parte siguiente es cómo configurarlo y da para otro artículo.