Balanceo de clúster OpenSearch con HAProxy

Introducción

Este tema describe la configuración de un cluster de OpenSearch previamente configurado agregando un balanceo de carga y alta disponibilidad usando HAProxy.

Para ello se configurará un servidor primario el cual repartirá las solicitudes que hagan los usuarios de manera equitativa (o como se necesite) entre los nodos del cluster en cuestión. Esto se conoce como balanceo de carga y, además, se pueden añadir servidores secundarios que comenzarán a trabajar si el principal falla: Esta característica es conocida como alta disponibilidad.

Instalación y configuración de clúster OpenSearch

Luego de la instalación y configuración de un cluster OpenSearch siguiendo esta documentación oficial se tendrá una arquitectura multinodo con un cluster plenamente funcional.

Como arquitectura didáctica acá se describe un cluster de tres nodos con los siguientes nombres:

  1. os-node1.
  2. os-node2.
  3. os-node3.

Instalación y configuración de HAProxy

Es recomendable distribuir a Pandora FMS Server, OpenSearch y HAProxy en servidores independientes.

En este tutorial se instalará y configurará en la propia máquina donde se tiene el nodo de Pandora FMS Server con Rocky Linux 9 como sistema operativo. Recuérdese que en producción debe de ser una máquina independiente para este propósito.

Para instalar el paquete de HAProxy (y el editor de texto Vim, probablemente instalado por defecto en el OS):

dnf install -y haproxy vim

Una vez instalado se hace una copia del fichero de configuración por defecto de HAProxy:

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.default

Editar dicho fichero con la siguiente configuración:

/etc/haproxy/haproxy.cfg
global
    #log /dev/log local0
    log /dev/log local1 notice
    maxconn 4096
    user haproxy
    group haproxy
    daemon
    tune.ssl.default-dh-param 2048

defaults
    log     global
    mode    http
    #option  httplog
    option  dontlognull
    timeout connect 5s
    timeout client  30s
    timeout server  30s
    retries 3

# ====================================
# Frontend -- HTTP 
# ====================================
frontend opensearch_frontend
    #bind *:9200
    bind *:9200 ssl crt /etc/haproxy/certs/haproxy.pem
    default_backend opensearch_backend

# ====================================
# Backend -- HTTPS node with auth
# ====================================
backend opensearch_backend
    balance roundrobin
   

    # Connect to HTTPS backends
    server node1 <ip-node1>:9200 ssl verify none check
    server node2 <ip-node2>:9200 ssl verify none check
    server node3 <ip-node3>:9200 ssl verify none check

# ====================================
# Stats page optional
# ====================================
listen stats
    bind *:8404
    mode http
    stats enable
    stats uri /haproxy?stats
    stats refresh 10s
    stats auth admin:Pandor4!

Se debe sustituir <ip-nodeX> por la dirección IP de cada nodo de OpenSearch en el cluster. Se deben añadir más nodos siguiendo el mismo formato en caso de tener un cluster más grande. Guardar y salir del editor de texto utilizado.

Esto es un fichero de configuración de referencia, por lo que algunas opciones se pueden configurar en función a las necesidades del entorno, como los timeouts y/o los retries y/o la verificación de los certificados SSL.

Página de estadísticas

En la configuración ha sido expuesta una URL la cual es útil para monitorizar el estado del HAProxy y sus estadísticas. Es opcional y se puede desactivar borrando (o marcando dichas líneas como comentarios) en el bloque a partir de Stats page optional:

/etc/haproxy/haproxy.cfg
# ====================================
# Stats page optional
# ====================================
#listen stats
#    bind *:8404
#    mode http
#    stats enable
#    stats uri /haproxy?stats
#    stats refresh 10s
#    stats auth admin:Pandor4!

También es posible restringir su acceso limitando la dirección IP expuesta y/o cambiando el puerto y/o cambiando las credenciales de acceso.

En este caso la web de estadísticas quedará en:

http://<pandorafms_node_URL>:8404/haproxy?stats

Para acceder con las credenciales admin:Pandor4!:

Certificado HTTPS para HAProxy

En la siguiente línea de la configuración se hace referencia a un certificado para el cifrado de la transmisión de comandos y datos:

/etc/haproxy/haproxy.cfg
bind *:9200 ssl crt /etc/haproxy/certs/haproxy.pem

En producción lo ideal es usar un certificado oficial y firmado por un CA confiable.

Para estas pruebas de laboratorio se usará un certificado autogenerado y almacenado con los comandos:

sudo mkdir -p /etc/haproxy/certs
cd /etc/haproxy/certs
sudo openssl req -x509 -nodes -days 365 \
    -newkey rsa:2048 \
    -keyout /etc/haproxy/certs/haproxy.key \
    -out /etc/haproxy/certs/haproxy.crt \
    -subj "/CN=haproxy.local"

Ahora se debe combinar el certificado autogenerado con clave en un único archivo (requerido por HAProxy):

sudo \ 
  cat /etc/haproxy/certs/haproxy.key \ 
  /etc/haproxy/certs/haproxy.crt >  \ 
  /etc/haproxy/certs/haproxy.pem

Si se utiliza un certificado oficial y firmado por un CA confiable los pasos serán similares, salvo el uso los ficheros del certificado oficial.

Se debe reiniciar el servicio de HAProxy:

systemctl restart haproxy

Para comprobar que se tiene accesibilidad a los nodos de OpenSearch, ejecutando desde la terminal del nodo donde se instaló HAProxy:

curl \ 
  -XGET \ 
  -ku admin:'P4nd0r4!FMS' \ 
  "https://127.0.0.1:9200/_cat/nodes?v"

Si se hace un par de llamadas a la raíz de la API se podrá comprobar que las llamadas se balancean entre nodos:

curl -XGET -ku admin:'P4nd0r4!FMS' "https://127.0.0.1:9200/

Resultados:

Configuración en la Consola web de Pandora FMS

Menú Management → Settings → System Settings → Log collector .

Los valores mostrados corresponden al caso expuesto donde se instaló HAProxy en el mismo nodo del PFMS Server (en producción se deben colocar los valores reales):

Es recomendable distribuir a Pandora FMS Server, OpenSearch y HAProxy en servidores independientes.

Si aparece la verificación de conexión en color verde (cuadro OpenSearch status) indica que se tiene configurado y conectado OpenSearch y HAProxy con Pandora FMS.

←Volver al índice de documentación de Pandora FMS