En este tutorial, le mostraré paso a paso cómo crear un servidor web Nginx en clúster de alta disponibilidad con Pacemaker, Corosync y Crmsh. Crearemos un servidor web Nginx de clúster activo-pasivo o clúster de conmutación por error usando Pacemaker en Ubuntu 16.04.
Marcapasos es un software de administración de clústeres de código abierto que logra la máxima disponibilidad de sus servicios. Es un administrador 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 grupal con funciones adicionales para implementar alta disponibilidad dentro de las aplicaciones.
Hay varias aplicaciones disponibles para la interfaz de Pacemaker y Crmsh es uno de ellos. Es una interfaz de línea de comandos de Pacemaker para administrar la pila de alta disponibilidad de Pacemaker. Crmsh está escrito en Python. Podemos crear, configurar y solucionar problemas de la pila Pacemaker HA 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 raíz
¿Qué haremos?
- Asignación del archivo de hosts.
- Instalar y configurar Nginx.
- Instale Pacemaker, Corosync y Crmsh.
- Configurar clave Corosync.
- Iniciar todos los servicios.
- Crear y configurar un clúster.
- Pruebas.
Paso 1:asignación del archivo de hosts
Ejecute los pasos 1 - 3 en los tres servidores 'web01', 'web02', 'web03'.
En este tutorial, usaré 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 lograrlo, edite el archivo '/etc/hosts' en todos los servidores con vim.
vim /etc/hosts
Pegue 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
Guarde el archivo y salga de vim.
Luego, pruebe 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
Paso 2:instalar y configurar Nginx
Ahora comenzamos a crear la configuración de alta disponibilidad del servidor web Nginx mediante la creación del clúster de conmutación por error con Pacemaker. Primero debemos instalar Nginx en cada uno de los nodos del servidor.
Instale Nginx con el siguiente comando apt.
apt install -y nginx
Cuando finalice la instalación, reemplace la página predeterminada de nginx con una página única en cada servidor ejecutando los comandos a continuación para que podamos identificar más tarde qué servidor entregó una página.
#Run Command on 'web01'
echo '<h1>web01 - hakase-labs</h1>' > /var/www/html/index.html
#Run Command on 'web02'
echo '<h1>web02 - hakase-labs</h1>' > /var/www/html/index.html
#Run Command on 'web03'
echo '<h1>web03 - hakase-labs</h1>' > /var/www/html/index.html
Ahora detenga el servidor web.
systemctl stop nginx
La instalación y configuración de Nginx se ha completado.
Paso 3:instale Pacemaker, Corosync y Crmsh
Pacemaker es una aplicación de administració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 administrar un clúster de Pacemaker. Todas estas aplicaciones están disponibles en el repositorio de Uubuntu.
Instale Pacemaker, Corosync y crmsh con el siguiente comando apt.
apt install -y pacemaker corosync crmsh
Después de la instalación, todos estos servicios se ejecutan automáticamente en el sistema. Deténgalos con los siguientes comandos systemctl.
systemctl stop corosync
systemctl stop pacemaker
Se instaló la pila de software que proporciona alta disponibilidad para Nginx.
Paso 4:configurar Corosync
Ejecute el paso 4 solo en el servidor 'web01'.
Como no usamos pcsd para Ubuntu, debemos 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 otros servidores 'web02' y 'web03'.
Antes de generar la clave de Corosync, debemos instalar el nuevo paquete 'haveged'. Se utiliza para obtener mejores números aleatorios para la generación de claves de Corosync.
Instale haveged desde el repositorio con el comando apt.
apt install -y haveged
Ahora genere una nueva clave Corosync con el siguiente comando.
corosync-keygen
Cuando se completa la generación de claves, puede ver la nueva clave 'authkey' en el directorio '/etc/corosync/'.
ls -lah /etc/corosync/
A continuación, vaya al directorio '/etc/corosync' y haga una copia de seguridad del archivo de configuración predeterminado 'corosync.conf'.
cd /etc/corosync/
mv corosync.conf corosync.conf.bekup
Luego cree un nuevo archivo de configuración 'corosync.conf' con vim.
vim corosync.conf
Pegue la siguiente configuración en ese archivo.
# Totem Protocol Configuration
totem {
version: 2
cluster_name: hakase-cluster
transport: udpu
# Interface configuration for Corosync
interface {
ringnumber: 0
bindnetaddr: 10.0.15.0
broadcast: yes
mcastport: 5407
}
}
# Nodelist - Server List
nodelist {
node {
ring0_addr: web01
}
node {
ring0_addr: web02
}
node {
ring0_addr: web03
}
}
# Quorum configuration
quorum {
provider: corosync_votequorum
}
# Corosync Log configuration
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
service {
name: pacemaker
ver: 0
}
Guarde el archivo y salga del editor.
A continuación, copie la clave de autenticación y el archivo de configuración del servidor 'web01' al servidor 'web02' y 'web03'.
scp /etc/corosync/* [email protected]:/etc/corosync/
scp /etc/corosync/* [email protected]:/etc/corosync/
Cuando todo esté completo, vaya a los servidores 'web02' y 'web03', luego verifique los archivos.
ssh [email protected]
cd /etc/corosync/
ls -lah
La configuración de Corosync se ha completado.
Paso 5:iniciar todos los servicios de clúster
Ejecute el paso 5 en todos los servidores.
Inicie la pila de software del clúster de alta disponibilidad, Pacemaker y corosync, en todos los servidores. Luego habilítelo para que se inicie automáticamente en el momento del arranque.
Inicie Corosync y agréguelo para que se inicie automáticamente al arrancar.
systemctl start corosync
systemctl enable corosync
Ahora inicie el marcapasos y habilítelo para que se inicie en el arranque.
systemctl start pacemaker
update-rc.d pacemaker defaults 20 01
systemctl enable pacemaker
Todos los servicios se han iniciado, verifique todos los nodos y asegúrese de que el estado del servidor sea 'En línea' en todos ellos.
crm status
O puede comprobar el estado comprobando los miembros de Corosync con el siguiente comando corosync-cmapctl.
corosync-cmapctl | grep members
Verá todas las direcciones IP del servidor.
Paso 6:crear y configurar el clúster
Ejecute el paso 6 solo en el servidor web01
En este paso, configuraremos el clúster Nginx activo-pasivo mediante la herramienta de línea de comandos crmsh. Dado que no usamos un dispositivo STONITH, queremos desactivar STONITH e ignorar la política de quórum en nuestro clúster.
Ejecute los comandos crm a continuación para deshabilitar 'STONITH' e ignorar la política de quórum.
crm configure property stonith-enabled=false
crm configure property no-quorum-policy=ignore
Ahora verifique el estado de STONITH y la política de quórum con el siguiente comando crm.
crm configure show
Verá el resultado como se muestra a continuación.
A continuación, necesitamos crear algunos recursos nuevos para el clúster. Pacemaker admite los siguientes tipos de agentes de recursos (RA).
- LSB (basado en el estándar de Linux):proporcionado por la distribución de Linux. ejemplo:secuencia de comandos '/etc/init.d/service'.
- 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.
Cree un nuevo recurso 'virtual_ip' para la configuración de IP flotante con el siguiente comando crm.
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 'servidor web' de nginx, cree el recurso con el siguiente comando.
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 haya terminado, verifique los nuevos recursos 'virtual_ip' y 'webserver' con el siguiente comando. Asegúrese de que todos los recursos tengan el estado 'iniciado'.
crm resource status
Finalmente, necesitamos agregar un grupo para la nueva configuración del servicio 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 creamos la IP flotante y el Servicio, ahora agregue esos recursos a un nuevo grupo llamado 'hakase_balancing' con el siguiente comando. Por supuesto, puede elegir su propio nombre de grupo aquí, solo asegúrese 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'. Puede comprobarlo con el siguiente comando.
crm resource show
Obtendrá un grupo llamado hakase_balancing con recursos de miembros 'virtual_ip' y 'webserver'.
La configuración del clúster se ha completado.
Paso 7 - Prueba
Probando el estado del nodo y el estado del clúster.
crm 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'.
Probando el servidor web Nginx desde un navegador web. Visite la dirección IP flotante, el nombre de mi servidor de prueba es - ha-web.co . Use el nombre que ha elegido para su servidor aquí.
Todos los recursos están en el nodo 'web01'.
Prueba de clúster activo-pasivo o conmutación por error
Detenga el clúster en el servidor 'web01' ejecutando el siguiente comando en el nodo 'web01'.
crm cluster stop
Obtendrá el resultado 'INFO:Servicios de clúster detenidos '.
Ahora inicie sesión en el nodo 'web02' y verifique el estado del clúster.
crm status
Ahora obtiene el resultado de que el nodo 'web01' está 'Fuera de línea', y los recursos de virtual_ip y el servidor web se cambian al nodo 'web02'.
Cuando vuelva a visitar la IP flotante 'ha-web.co ', obtendrá la página web02.
Nginx High Availability with Pacemaker, Corosync y Crmsh en Ubuntu 16.04 se instaló y probó con éxito.