Afinar el núcleo de Linux y la instancia de HAProxy para altas cargas

Afinar el núcleo de Linux y la instancia de HAProxy para altas cargas

  • Autor de la entrada:
  • Categoría de la entrada:Entradas

Si alguna vez ha configurado un balanceador de carga como HAProxy o un servidor web como Nginx o Apache para manejar un alto número de usuarios concurrentes, entonces puede que haya descubierto que se requieren bastantes ajustes para lograr los efectos deseados. ¿Podrías recitarlos todos desde la parte superior de tu cabeza? Si no, no te preocupes – este artículo te tiene cubierto.
Echaremos un vistazo a dos tipos de ajustes. Los primeros son los ajustes del kernel de Linux, que son comunes independientemente de si estás usando HAProxy, Nginx, Apache u otros servidores web. El segundo tipo cubre la configuración específica de HAProxy.

Número de archivos abiertos

¿Por qué deberíamos preocuparnos por los archivos abiertos cuando manejamos el tráfico de la web? Es simple – cada conexión entrante o saliente necesita abrir un zócalo y cada zócalo es un archivo en un sistema Linux. Si estás configurando un servidor web que sirve contenido estático del sistema de archivos local, entonces cada conexión resultará en un socket abierto. Sin embargo, si está configurando un balanceador de carga que sirve contenido de servidores de fondo, entonces cada conexión entrante abrirá un mínimo de dos sockets, o incluso más, dependiendo de la configuración de balanceo de carga.

Conntrack

En los sistemas de producción hay una alta probabilidad de que estés usando un cortafuegos iptables/ufw/firewalld en tu sistema. Todos estos servicios utilizan el módulo de kernel nf_conntrack. El módulo se carga automáticamente al iniciar el servicio y añade algunos parámetros adicionales del kernel.

Parámetros TCP

Todos los valores que se indican a continuación deben configurarse en /etc/sysctl.conf o /etc/sysctl.d/.conf y habilitarse ejecutando sysctl -p. Los valores utilizados asumen que el servidor tiene mucha memoria libre – en mi caso cada servidor tiene 4GB de RAM.

Rango de puertos TCP

Esto es relevante si estás configurando un balanceador de carga o un proxy inverso. En este escenario puedes encontrarte con un problema llamado agotamiento del puerto de origen TCP. Si no estás utilizando algún tipo de agrupación o multiplexación de conexiones, en general cada conexión de un cliente al equilibrador de carga también abre una conexión relacionada con uno de los backends. Esto abrirá un enchufe en el sistema del loadbalancer.

Número de procesos

De forma predeterminada, HAProxy utiliza un solo proceso para servir las solicitudes. Si se ejecuta en un sistema con múltiples núcleos, puede que descubra durante los periodos de alta carga que un único núcleo tiene un 100% de utilización de la CPU mientras que otros están mayormente inactivos.