Búsqueda de sitios web

Cómo configurar y mantener alta disponibilidad/agrupación en Linux


Alta disponibilidad (HA) simplemente se refiere a la cualidad de un sistema para funcionar continuamente sin fallas durante un largo período de tiempo. Las soluciones de HA se pueden implementar mediante hardware y/o software, y una de las soluciones comunes para implementar HA es la agrupación.

En informática, un clúster se compone de dos o más computadoras (comúnmente conocidas como nodos o miembros) que trabajan juntas para realizar una tarea. En tal configuración, solo un nodo proporciona el servicio y los nodos secundarios asumen el control si falla.

Los grupos se dividen en cuatro tipos principales:

  • Almacenamiento: proporciona una imagen coherente del sistema de archivos en todos los servidores de un clúster, lo que permite a los servidores leer y escribir simultáneamente en un único sistema de archivos compartido.
  • Alta disponibilidad: elimine los puntos únicos de falla y conmute por error los servicios de un nodo del clúster a otro en caso de que un nodo deje de funcionar.
  • Equilibrio de carga: envía solicitudes de servicios de red a múltiples nodos del clúster para equilibrar la carga de solicitudes entre los nodos del clúster.
  • Alto Rendimiento: realiza procesamiento paralelo o concurrente, ayudando así a mejorar el rendimiento de las aplicaciones.

Otra solución ampliamente utilizada para proporcionar HA es la replicación (específicamente replicaciones de datos). La replicación es el proceso mediante el cual una o más bases de datos (secundarias) se pueden mantener sincronizadas con una única base de datos primaria (o maestra).

Para configurar un clúster, necesitamos al menos dos servidores. A los efectos de esta guía, utilizaremos dos servidores Linux:

  • Nodo1: 192.168.10.10
  • Nodo2: 192.168.10.11

En este artículo, demostraremos los conceptos básicos de cómo implementar, configurar y mantener alta disponibilidad/agrupación en Ubuntu 16.04/18.04 y CentOS 7. Demostraremos cómo agregar el servicio HTTP Nginx al clúster.

Configurar los ajustes DNS locales en cada servidor

Para que los dos servidores se comuniquen entre sí, debemos configurar los ajustes DNS locales apropiados en el archivo /etc/hosts en ambos servidores.

Abra y edite el archivo usando su editor de línea de comando favorito.

sudo vim /etc/hosts  

Agregue las siguientes entradas con las direcciones IP reales de sus servidores.

192.168.10.10	node1.example.com
192.168.10.11 	node2.example.com

Guarde los cambios y cierre el archivo.

Instalación del servidor web Nginx

Ahora instale el servidor web Nginx usando los siguientes comandos.

sudo apt install nginx  [On Ubuntu]
sudo yum install epel-release && sudo yum install nginx [On CentOS 7]

Una vez que se complete la instalación, inicie el servicio Nginx por ahora y habilítelo para que se inicie automáticamente en el momento del arranque, luego verifique si está funcionando usando el comando systemctl.
En Ubuntu, el servicio debe iniciarse automáticamente inmediatamente después de que se complete la configuración previa del paquete; simplemente puede habilitarlo.

sudo systemctl enable nginx
sudo systemctl start nginx
sudo systemctl status nginx

Después de iniciar el servicio Nginx, necesitamos crear páginas web personalizadas para identificar y probar operaciones en ambos servidores. Modificaremos el contenido de la página de índice predeterminada de Nginx como se muestra.

echo "This is the default page for node1.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS1
echo "This is the default page for node2.example.com" | sudo tee /usr/share/nginx/html/index.html 	#VPS2

Instalación y configuración de Corosync y Pacemaker

A continuación, tenemos que instalar Pacemaker, Corosync y Pcs en cada nodo de la siguiente manera.

sudo apt install corosync pacemaker pcs	#Ubuntu 
sudo yum install corosync pacemaker pcs	#CentOS 

Una vez completada la instalación, asegúrese de que el demonio pcs se esté ejecutando en ambos servidores.

sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl status pcsd

Creando el clúster

Durante la instalación, se crea un usuario del sistema llamado “hacluster ”. Por lo tanto, debemos configurar la autenticación necesaria para las piezas. Comencemos creando una nueva contraseña para el usuario “hacluster”, necesitamos usar la misma contraseña en todos los servidores:

sudo passwd hacluster

A continuación, en uno de los servidores (Nodo1), ejecute el siguiente comando para configurar la autenticación necesaria para los equipos.

sudo pcs cluster auth node1.example.com node2.example.com -u hacluster -p password_here --force

Ahora cree un clúster y rellénelo con algunos nodos (el nombre del clúster no puede exceder los 15 caracteres; en este ejemplo, hemos utilizado examplecluster) en el servidor Nodo1.

sudo pcs cluster setup --name examplecluster node1.example.com node2.example.com 

Ahora habilite el clúster al arrancar e inicie el servicio.

sudo pcs cluster enable --all
sudo pcs cluster start --all

Ahora verifique si el servicio de clúster está en funcionamiento usando el siguiente comando.

sudo pcs status
OR
sudo crm_mon -1

En el resultado del comando anterior, puede ver que hay una advertencia acerca de que no hay dispositivos STONITH pero STONITH todavía está habilitado en el clúster. Además, no se han configurado recursos/servicios del clúster.

Configurar opciones de clúster

La primera opción es desactivar STONITH (o disparar al otro nodo en la cabeza), la implementación de cercado en Pacemaker.

Este componente ayuda a proteger sus datos para que no se dañen mediante el acceso simultáneo. A los efectos de esta guía, lo desactivaremos ya que no hemos configurado ningún dispositivo.

Para desactivar STONITH, ejecute el siguiente comando:

sudo pcs property set stonith-enabled=false

A continuación, ignore también la política de Quorum ejecutando el siguiente comando:

sudo pcs property set no-quorum-policy=ignore

Después de configurar las opciones anteriores, ejecute el siguiente comando para ver la lista de propiedades y asegúrese de que las opciones anteriores, stonith y la política de quórum estén deshabilitadas.

sudo pcs property list

Agregar un recurso/servicio de clúster

En esta sección, veremos cómo agregar un recurso de clúster. Configuraremos una IP flotante que es la dirección IP que se puede mover instantáneamente de un servidor a otro dentro de la misma red o centro de datos. En resumen, una IP flotante es un término técnico común, utilizado para IP que no están vinculadas estrictamente a una única interfaz.

En este caso, se utilizará para admitir la conmutación por error en un clúster de alta disponibilidad. Tenga en cuenta que las IP flotantes no son sólo para situaciones de conmutación por error, sino que también tienen algunos otros casos de uso. Necesitamos configurar el clúster de tal manera que solo el miembro activo del clúster sea "dueño" o responda a la IP flotante en un momento dado.

Agregaremos dos recursos del clúster: el recurso de dirección IP flotante llamado “floating_ip” y un recurso para el servidor web Nginx llamado “http_server”.

Primero comience agregando el flotante_ip de la siguiente manera. En este ejemplo, nuestra dirección IP flotante es 192.168.10.20.

sudo pcs resource create floating_ip ocf:heartbeat:IPaddr2 ip=192.168.10.20 cidr_netmask=24 op monitor interval=60s

dónde :

  • floating_ip: es el nombre del servicio.
  • “ocf:heartbeat:IPaddr2”: le dice a Pacemaker qué script usar, IPaddr2 en este caso, en qué espacio de nombres se encuentra (pacemaker) y a qué estándar se ajusta ocf.
  • intervalo de monitor de operación=60s”: indica a Pacemaker que verifique el estado de este servicio cada minuto llamando a la acción de monitor del agente.

Luego agregue el segundo recurso, llamado http_server. Aquí, el agente de recursos del servicio es ocf:heartbeat:nginx.

sudo pcs resource create http_server ocf:heartbeat:nginx configfile="/etc/nginx/nginx.conf" op monitor timeout="20s" interval="60s"

Una vez que haya agregado los servicios del clúster, emita el siguiente comando para verificar el estado de los recursos.

sudo pcs status resources

Al observar el resultado del comando, se enumeran los dos recursos agregados: “floating_ip ” y “http_server ”. El servicio float_ip está desactivado porque el nodo principal está en funcionamiento.

Si tiene un firewall habilitado en su sistema, debe permitir que todo el tráfico a Nginx y todos los servicios de alta disponibilidad a través del firewall para una comunicación adecuada entre los nodos:

-------------- CentOS 7 -------------- 
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=high-availability		
sudo firewall-cmd --reload

-------------- Ubuntu -------------- 
sudo ufw allow http	
sudo ufw allow high-availability						
sudo ufw reload 

Prueba de alta disponibilidad/agrupación

El paso final e importante es probar que nuestra configuración de alta disponibilidad funciona. Abra un navegador web y navegue hasta la dirección 192.168.10.20. Debería ver la página Nginx predeterminada de node2.example.com como se muestra en la captura de pantalla.

Para simular una falla, ejecute el siguiente comando para detener el clúster en nodo2.example.com.

sudo pcs cluster stop http_server

Luego, vuelva a cargar la página en 192.168.10.20; ahora debería acceder a la página web predeterminada de Nginx desde nodo1.example.com.

Alternativamente, puede simular un error diciéndole al servicio que se detenga directamente, sin detener el clúster en ningún nodo, usando el siguiente comando en uno de los nodos:

 
sudo crm_resource --resource http_server --force-stop 

Luego, debe ejecutar crm_mon en modo interactivo (el predeterminado), dentro del intervalo de monitorización de 2 minutos, debería poder ver el aviso del clúster de que http_server falló y se movió. a otro nodo.

Para que sus servicios de clúster se ejecuten de manera eficiente, es posible que deba establecer algunas restricciones. Puede consultar la página de manual de pcs (man pcs) para obtener una lista de todos los comandos de uso.

Para obtener más información sobre Corosync y Pacemaker, consulte: https://clusterlabs.org/

Resumen

En esta guía, hemos mostrado los conceptos básicos de cómo implementar, configurar y mantener alta disponibilidad/agrupación/replicación en Ubuntu 16.04/18.04 y CentOS 7. Demostramos cómo agregar el servicio HTTP Nginx a un clúster. Si tiene alguna idea que compartir o preguntas, utilice el formulario de comentarios a continuación.