Nginx HA · 9 min read · Nov 29, 2025

Cómo configurar alta disponibilidad de Nginx con Pacemaker, Corosync y Crmsh en Ubuntu 16.04

En este tutorial, te mostraré paso a paso cómo crear un servidor web Nginx en clúster de alta disponibilidad con Pacemaker, Corosync y Crmsh. Crearemos un clúster activo-pasivo o clúster de conmutación por error de Nginx utilizando Pacemaker en Ubuntu 16.04.

Pacemaker es un software de gestión de clústeres de código abierto que logra la máxima alta disponibilidad de tus servicios. Es un gestor de clústeres HA avanzado y escalable desarrollado por ClusterLabs desde 2007.

El Corosync Cluster Engine es un proyecto de código abierto derivado del proyecto OpenAIS en 2008 y lanzado bajo la Licencia BSD. Es un sistema de comunicación en grupo con características adicionales para implementar alta disponibilidad dentro de las aplicaciones.

Hay varias aplicaciones disponibles para la interfaz de Pacemaker y Crmsh es una de ellas. Es una interfaz de línea de comandos de Pacemaker para gestionar la pila de alta disponibilidad de Pacemaker. Crmsh está escrito en python. Podemos crear, configurar y solucionar problemas de la pila HA de Pacemaker con la herramienta de línea de comandos Crmsh.

Requisitos previos

  • Tres servidores Ubuntu 16.04 - web01 10.0.15.11
  • web02 10.0.15.12
  • web03 10.0.15.13
  • Una dirección IP flotante 10.0.15.15
  • Privilegios de root

¿Qué haremos?

  1. Mapeo del archivo Hosts.
  2. Instalar y configurar Nginx.
  3. Instalar Pacemaker, Corosync y Crmsh.
  4. Configurar la clave de Corosync.
  5. Iniciar todos los servicios.
  6. Crear y configurar un clúster.
  7. Pruebas.

Paso 1 - Mapeo del archivo Hosts

Nota:
Ejecuta los pasos 1 - 3 en los tres servidores ‘web01’, ‘web02’, ‘web03’.

En este tutorial, utilizaré 3 servidores Ubuntu 16.04 y cada uno de ellos tiene un nombre de host único: ‘web01’, ‘web02’ y ‘web03’. Cada servidor puede conectarse a los otros servidores con el nombre de host del servidor.

Para lograr esto, edita el archivo ‘/etc/hosts’ en todos los servidores con vim.

vim /etc/hosts

Pega la configuración de /etc/hosts a continuación.

10.0.15.11      web01  
10.0.15.12      web02  
10.0.15.13      web03  
10.0.15.15      ha-web.co

Guarda el archivo y sal de vim.

A continuación, prueba todos los servidores haciendo ping a los otros servidores a través de cada nombre de host.

ping -c 3 web01  
ping -c 3 web02  
ping -c 3 web03

Ping All Servers

Paso 2 - Instalar y configurar Nginx

Ahora comenzamos a crear la configuración de alta disponibilidad del servidor web Nginx creando el clúster de conmutación por error con Pacemaker. Primero necesitamos instalar Nginx en cada uno de los nodos del servidor.

Instala Nginx con el comando apt a continuación.

apt install -y nginx

Cuando la instalación finalice, reemplaza la página predeterminada de nginx con una página única en cada servidor ejecutando los comandos a continuación para que luego podamos identificar qué servidor entregó una página.

#Ejecutar comando en 'web01'  
echo '

web01 - hakase-labs

' > /var/www/html/index.html #Ejecutar comando en 'web02' echo '

web02 - hakase-labs

' > /var/www/html/index.html #Ejecutar comando en 'web03' echo '

web03 - hakase-labs

' > /var/www/html/index.html

Ahora detén el servidor web.

systemctl stop nginx

La instalación y configuración de Nginx se ha completado.

Install and Configure Nginx on Ubuntu 16.04

Paso 3 - Instalar Pacemaker, Corosync y Crmsh

Pacemaker es una aplicación de gestión de clústeres de código abierto. Corosync es un motor de clúster para Pacemaker, y Crmsh es una herramienta basada en python para gestionar un clúster de Pacemaker. Todas estas aplicaciones están disponibles en el repositorio de Ubuntu.

Instala Pacemaker, Corosync y crmsh con el comando apt a continuación.

apt install -y pacemaker corosync crmsh

Después de la instalación, todos estos servicios se ejecutan automáticamente en el sistema. Detenlos con los comandos systemctl a continuación.

systemctl stop corosync  
systemctl stop pacemaker

La pila de software que proporciona la alta disponibilidad para Nginx ha sido instalada.

Install Pacemaker, Corosync, and Crmsh on Ubuntu 16.04

Paso 4 - Configurar Corosync

Nota:
Ejecuta el paso 4 solo en el servidor ‘web01’.

Dado que no estamos usando pcsd para Ubuntu, necesitamos configurar Corosync manualmente. Generaremos la clave de Corosync para la autenticación del clúster y crearemos un nuevo archivo de configuración de Corosync en el servidor ‘web01’, luego copiaremos la clave y la configuración a los otros servidores ‘web02’ y ‘web03’.

Antes de generar la clave de Corosync, necesitamos instalar el nuevo paquete ‘haveged’. Se utiliza para obtener mejores números aleatorios para la generación de la clave de Corosync.

Instala haveged desde el repositorio con el comando apt.

apt install -y haveged

Ahora genera una nueva clave de Corosync con el comando a continuación.

corosync-keygen

Cuando la generación de la clave esté completa, podrás ver la nueva clave ‘authkey’ en el directorio ‘/etc/corosync/‘.

ls -lah /etc/corosync/

Generate Corosync Key

A continuación, ve al directorio ‘/etc/corosync’ y haz una copia de seguridad del archivo de configuración predeterminado ‘corosync.conf’.

cd /etc/corosync/  
mv corosync.conf corosync.conf.bekup

Luego crea un nuevo archivo de configuración ‘corosync.conf’ con vim.

vim corosync.conf

Pega la configuración a continuación en ese archivo.

# Configuración del Protocolo Totem  
totem {  
  version: 2  
  cluster_name: hakase-cluster  
  transport: udpu  
   
# Configuración de la interfaz para Corosync  
  interface {  
    ringnumber: 0  
    bindnetaddr: 10.0.15.0  
    broadcast: yes  
    mcastport: 5407  
  }  
}  
   
# Nodelist - Lista de Servidores  
nodelist {  
  node {  
    ring0_addr: web01  
  }  
  node {  
    ring0_addr: web02  
  }  
  node {  
    ring0_addr: web03  
  }  
}  
   
# Configuración del Quorum  
quorum {  
  provider: corosync_votequorum  
}  
   
# Configuración del Log de Corosync  
logging {  
  to_logfile: yes  
  logfile: /var/log/corosync/corosync.log  
  to_syslog: yes  
  timestamp: on  
}  
   
service {  
  name: pacemaker  
  ver: 0  
}

Guarda el archivo y sal del editor.

A continuación, copia la clave de autenticación y el archivo de configuración del servidor ‘web01’ a los servidores ‘web02’ y ‘web03’.

scp /etc/corosync/* root@web02:/etc/corosync/  
scp /etc/corosync/* root@web03:/etc/corosync/

Copy Corosync Configuration from web01 node to others

Cuando todo esté completo, ve a los servidores ‘web02’ y ‘web03’, luego verifica los archivos.

ssh root@web02  
cd /etc/corosync/  
ls -lah

Corosync configuration on web02 node

La configuración de Corosync se ha completado.

Paso 5 - Iniciar todos los servicios del clúster

Nota:
Ejecuta el paso 5 en todos los servidores.

Inicia la pila de software HA, pacemaker y corosync, en todos los servidores. Luego habilítalo para que se inicie automáticamente al arrancar.

Inicia Corosync y agrégalo para que se inicie automáticamente al arrancar.

systemctl start corosync  
systemctl enable corosync

Ahora inicia pacemaker y habilítalo para que se inicie al arrancar.

systemctl start pacemaker  
update-rc.d pacemaker defaults 20 01  
systemctl enable pacemaker

Todos los servicios han sido iniciados, verifica todos los nodos y asegúrate de que el estado del servidor sea ‘En línea’ en todos ellos.

crm status

Cluster Node Status

O puedes verificar el estado comprobando los miembros de Corosync con el comando corosync-cmapctl a continuación.

corosync-cmapctl | grep members

Verás todas las direcciones IP de los servidores.

Corosync Member List

Paso 6 - Crear y configurar el clúster

NOTA:
Ejecuta el paso 6 solo en el servidor web01

En este paso, configuraremos el clúster Nginx activo-pasivo utilizando la herramienta de línea de comandos crmsh. Dado que no estamos utilizando un dispositivo STONITH, queremos deshabilitar STONITH e ignorar la política de Quorum en nuestro clúster.

Ejecuta los comandos crm a continuación para deshabilitar ‘STONITH’ e ignorar la política de Quorum.

crm configure property stonith-enabled=false  
crm configure property no-quorum-policy=ignore

Ahora verifica el estado de STONITH y la política de quorum con el comando crm a continuación.

crm configure show

Verás el resultado a continuación.

Disable STONITH and Ignoring the Quorum Policy

A continuación, necesitamos crear algunos nuevos recursos para el clúster. Pacemaker admite los siguientes tipos de Agentes de Recursos (RA).

  • LSB (Linux Standard Based) - Proporcionado por la distribución de Linux. ej: ‘/etc/init.d/service’ script.
  • OCF (Open Cluster Framework) - Conjunto de herramientas para computación en clúster. El proyecto es parte de la Fundación Linux.

Para nuestro servidor web Nginx HA, necesitamos crear dos recursos OCF: ‘virtual_ip’ para la IP flotante y ‘webserver’ para el servicio nginx.

Crea un nuevo recurso ‘virtual_ip’ para la configuración de la IP flotante con el comando crm a continuación.

sudo crm configure primitive virtual_ip \  
ocf:heartbeat:IPaddr2 params ip="10.0.15.15" \  
cidr_netmask="32" op monitor interval="10s" \  
meta migration-threshold="10"

Y para el ‘webserver’ de nginx, crea el recurso con el comando a continuación.

sudo crm configure primitive webserver \  
ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf \  
op start timeout="40s" interval="0" \  
op stop timeout="60s" interval="0" \  
op monitor interval="10s" timeout="60s" \  
meta migration-threshold="10"

Cuando esto esté hecho, verifica los nuevos recursos ‘virtual_ip’ y ‘webserver’ con el comando a continuación. Asegúrate de que todos los recursos tengan el estado ‘iniciado’.

crm resource status

Add new Virtual_ip and Webserver Resources to the Cluster

Finalmente, necesitamos agregar un grupo para la nueva configuración del servicio de IP de conmutación por error. Queremos migrar el servicio ‘Nginx’ en un recurso ‘webserver’ con una IP flotante en un recurso ‘virtual_ip’.

Ya hemos creado la IP flotante y el servicio, ahora agrega esos recursos a un nuevo grupo llamado ‘hakase_balancing’ con el comando a continuación. Por supuesto, puedes elegir tu propio nombre de grupo aquí, solo asegúrate de reemplazar el nombre donde sea que se use.

sudo crm configure group hakase_balancing virtual_ip webserver

Se ha definido un nuevo grupo de recursos con el nombre ‘hakase_balancing’. Puedes verificarlo con el comando a continuación.

crm resource show

Obtendrás un grupo llamado hakase_balancing con miembros ‘virtual_ip’ y ‘webserver’ recursos.

Add new Group Resource for the Cluster

La configuración del clúster se ha completado.

Paso 7 - Pruebas

Prueba el estado del nodo y el estado del clúster.

crm status

Cluster Node Status and Resources Status

Tenemos 3 nodos con estado ‘En línea’.

Tenemos un grupo de recursos llamado ‘hakase_balancing’, y ahora se está ejecutando en el nodo ‘web01’.

Prueba el servidor web Nginx desde un navegador web. Visita la dirección IP flotante, el nombre de mi servidor de prueba es - ha-web.co. Usa el nombre que has elegido para tu servidor aquí.

Todos los recursos están en el nodo ‘web01’.

Prueba del clúster activo-pasivo o de conmutación por error

Detén el clúster en el servidor ‘web01’ ejecutando el comando a continuación en el nodo ‘web01’.

crm cluster stop

Obtendrás el resultado ‘ INFO: Servicios del clúster detenidos ‘.

Ahora inicia sesión en el nodo ‘web02’ y verifica el estado del clúster.

crm status

Nginx High Availability Cluster on Ubuntu 16.04

Ahora obtienes el resultado de que el nodo ‘web01’ está ‘Fuera de línea’, y los recursos de virtual_ip y webserver se han cambiado al nodo ‘web02’.

Cuando vuelvas a visitar la IP flotante ‘ ha-web.co ‘, obtendrás la página de web02.

La alta disponibilidad de Nginx con Pacemaker, Corosync y Crmsh en Ubuntu 16.04 se ha instalado y probado con éxito.

Referencia

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.