En el post de hoy veremos cómo podemos balancear y dotar de alta disponibilidad a nuestros servidores de conexión de VMware Horizon y a nuestros AppVolumes Managers.
Para que mentalmente os podais hacer una idea de lo que vamos a hacer, os dejo con el siguiente esquema:
En él, podeis ver cómo añadiremos 2 nuevos servidores a nuestra infraestructura e instalaremos HAProxy + Keepalive en ellos.
Utilizaremos PhotonOS 3.0 revision3 para montar los servidores. PhotonOS es una versión optimizada para entornos vSphere con unos recursos mínimos. Podremos descargar la OVA with virtual hardware v13 (UEFI Secure Boot) desde aquí
Despiegue Photon OS
El despliegue de la OVA es muy sencillo y solo tendremos que seguir el asistente del propio vCenter
Configuración inicial
Por defecto, la ova de PhotonOS está configurada para coger IP por DHCP y SSH está habilitado en el arranque.
Nos conectaremos por SSH a la IP que nos ha proporcionado y accederemos con las credenciales por defecto (root/changeme). La primera vez que hagamos login nos pedirá cambiar la contraseña.
Una vez tengamos desplegadas las 2 VMs haremos una pequeña configuración inicial para empezar.
- Actualizamos el SO
1 |
|
- Configurar IP estática
Por defecto, el fichero de configuración de IP se encuentra en
/etc/systemd/network/99-dhcp-en.network
Con nuestro editor de textos preferido (vim, por ejemplo), deshabilitaremos DHCP
1 |
|
Crearemos un nuevo fichero de configuración con la siguiente configuración y lo llamaremos /etc/systemd/network/10-static-en.network
1 |
|
NOTA: Pondremos la IP correspondiente a cada uno de los servidores
- Cambiaremos el propietario del fichero con el siguiente comando:
1 |
|
Para poder usar las VIP en ambos nodos de Keepalive y HAProxy, será necesario realizar ciertos cambios para permitir el reenvio a nivel IP y permitir que ambos servicios usen una IP que no está definida en la interfaz física de la VM.
Por defecto, PhotonOS tiene este comportamiento deshabilitado y lo podremos habilitar de la siguiente manera:
- Creamos y editamos el fichero de configuración
/etc/sysctl.d/55-keepalived.conf
1 |
|
NOTA: Fijaros que en la misma carpeta, está un fichero llamado
50-security-hardening.conf
. Al usar nosotros un numero superior en el fichero creado, es posible que se sobreescriban algunas configuraciones definidas por defecto.
Finalmente, necesitaremos configurar iptables para permitir el acceso http/https. /etc/systemd/scripts/ip4save
NOTA: Añadiremos también el puerto 8404 para configurar el acceso al portal de estadísticas de HAProxy. Lo veremos mas adelante.
Añadiremos estas 4 lineas:
1 |
|
Quedando un fichero similar a este:
1 |
|
Reiniciamos el servidor con el comando reboot
Instalación alta disponibilidad con Keepalived
Para dotar de alta disponibilidad a nuestro balanceador, usaremos Keepalived. Keepalived utiliza VRRP (Virtual Router Redundancy Protocol) para asignar una virtual IP (VIP) al nodo master de HAProxy y que así esté siempre disponible.
Instalaremos keepalived en ambos nodos con el siguiente comando:
1 |
|
Una vez instalado haremos un backup de la configuración antes de modificarla.
1 |
|
Y crearemos un nuevo fichero de configuración similar a este:
Nodo MASTER: PhotonLB-01
1 |
|
Nodo SLAVE: PhotonLB-02
1 |
|
Resumiendo:
- El nodo MASTER tiene una prioridad 101 y el BACKUP 100
- Cada 2 segundos Keepalived chequea que HAProxy esté corriendo. Si está UP incrementa en 2 la prioridad y si está DOWN la baja 2
- Mientras HAProxy esté UP en ambos servidores, el que tenga prioridad mas alta será MASTER
- Si HAProxy se para en el nodo MASTER, la prioridad bajará y el BACKUP se convertirá en MASTER
En este punto, ya tenemos la configuración básica de keepalive. Se puede arrancar pero dará algunos fallos ya que todavia no tenemos instalado HAProxy y el script de chequeo fallará.
1 |
|
NOTA: Con el comando
journalctl -r
podemos ver el registro de logs
En el log veremos una salida similar a esta, el servicio se ha arrancado correctamente pero el script de HAProxy falla porque aún no está instalado.
1 |
|
Para acabar, habilitaremos el servicio keepalived para que arranque durante el boot del servidor.
1 |
|
Instalación de HAProxy
Instalamos HAProxy con el siguiente comando:
1 |
|
Antes de empezar con la config, crearemos un directorio extra donde guardaremos información de estadísticas.
1 |
|
Al igual que con el fichero de configuración de keepalived, haremos un backup previo de la configuración original.
1 |
|
NOTA: A diferencia que keepalived, HAProxy tiene que tener idéntica configuración en ambos servidores. Así que asegurate de que los cambios que se realicen, se hagan de forma idéntica en ambos nodos.
El nuevo fichero de configuración tendrá la siguiente información:
1 |
|
-
Statistics & Admin configuration: En esta parte creamos 2 grupos y 2 usuarios (Uno admin y otro read-only). Este grupo se usará para ver las estadísticas de HAProxy y para poner los servidores de backend en modo mantenimiento. Definimos el frontend para que acepte conexiones a cualquier ip
bind: *:8404
Este es el puerto que definimos en iptables, os acordais? Para acceder al frontend y poder ver las estadísticas y habilitar/deshabilitar backend nos conectaremos a la URL http://192.168.6.122:8404/stats -
Horizon Connection Servers: La primera parte sólo hacemos una redirección de HTTP a HTTPS. A continuación, la interfaz se configura utilizando la VIP para Horizon. En el backend se especifican los servidores de conexión y el algoritmo de equilibrio de carga. La opción ssl-hello-chk es necesaria para asegurarse de que HAProxy no solo verifique si el puerto 443 está abierto en el backend para configurar el backend como activo, sino también para verificar que realmente haya una conexión SSL válida al backend. Si no especificamos esto, el backend se activará para HAProxy, mientras que es posible que los servicios de Horizon aún se estén iniciando y aún no estén disponibles para su uso. En condiciones normales, cada 30 segundos se comprueban los backends. Cuando un backend está inactivo, la verificación se realiza cada 5 s (downinter 5s), y cuando una verificación falla o tiene éxito después de una falla anterior, los backends se verifican cada 2s (fastinter 2s).
-
AppVolumes Managers: Esta sección es similar a la de los Connection Server
Una vez tengamos la configuración hecha en ambos servidores, es momento de arrancar el servicio
1 |
|
La salida del comando journalctl -r
deberia ser similar a esta:
1 |
|
Para acabar, habilitaremos el servicio haproxy para que arranque durante el boot del servidor.
1 |
|
Si todo ha ido bien y los servicios han arrancado sin errores, nos podremos conectar al portal de estadísticas en la url http://192.168.6.122:8404/stats (nos pedirá el usuario/contraseña que hemos definido en la configuración de haproxy)
Comprobar estado keepalive
No quiero despedirme sin antes enseñaros un pequeño método para verificar el estado del Keepalive y quien es MASTER y quien es BACKUP
Con el siguiente comando, podremos verificar el “role” que tiene cada servidor:
1 |
|
Y con este la prioridad que tiene cada uno de ellos
1 |
|
También otro comando interesante es el que vacia el log, por si tenemos muchos registros y nos cuesta indentificar cada acción
1 |
|
1 |
|
Y hasta aquí el post de hoy.
Espero sea de utilidad.
Un saludo!
Miquel.