Tema anterior: HALB: equilibrador de carga HTTP dependiente de la sesión basado en proxy de HA

Tema siguiente: PS8: conmutador de puerto escalable


L3LB: equilibrador de carga de TCP/UDP

Última versión: 2.0.2-1

L3LB: equilibrador de carga de TCP/UDP

Vista rápida

Catálogo

Sistema

Categoría

Conmutadores

Volúmenes de usuario

no

Memoria mín.

96 MB

SO

Linux

Restricciones

no

Descripción general del funcionamiento

L3LB es un conmutador para distribuir sesiones TCP/UDP entrantes a servidores del tipo mismo o diferentes. La funcionalidad de equilibrio de carga TCP se basa en el paquete de software de equilibrio de carga de TCP/HTTP de HAProxy; el equilibrio de carga UDP se basa en Netfilter.

L3LB equilibra la carga del tráfico de entrada mediante varios algoritmos diferentes. Para el tráfico TCP, L3LB realiza una operación sencilla por turnos para equilibrar la carga, igualando la carga para los servidores de back-end. L3LB también es compatible con sesiones persistentes TCP, vinculando el cliente a un servidor de back-end concreto usando la dirección IP de origen de la solicitud como clave. Para el tráfico UDP, L3LB utiliza el algoritmo de operación por turnos (este es el único algoritmo disponible para el tráfico UDP).

L3LB controla constantemente el estado de todos los servidores de back-end. Mientras se está en el modo TCP, los controles de estado que realiza L3LB consisten en controles sencillos de la conexión TCP. En el caso de que L3LB detectara un error del servidor utilizando el método de control de estado parametrizado, L3LB pasará el tráfico a un servidor alternativo. Si el servidor fallido finalmente se recupera, L3LB puede volver a traspasar el tráfico al servidor recuperado. Para el modo UDP se utiliza un método PING de ICMP para verificar la disponibilidad de un servidor de back-end.

L3LB muestra una interfaz del servicio Web en su terminal ctl. Esta interfaz permite que un usuario active/desactive los terminales de salida out1 - out8 pragmáticamente y también que recupere el estado de todos los terminales. Esto es útil en aquellos casos en los que se produce algún tipo de error de back-end (es decir, en un dispositivo de base de datos o de almacenamiento) donde la propia aplicación puede desactivar automáticamente el tráfico a un conjunto específico de servidores. En este caso, L3LB es incapaz de detectar por sí mismo este tipo de error; así pues, será la aplicación la que tendrá que detectar el error y desactivar el conjunto correspondiente de servidores de back-end.

L3LB se ha diseñado para ser sumamente rápido utilizando muy pocos recursos. Bajo condiciones normales, L3LB consume sobre 25 kB de memoria en cada sesión, o 1 GB en 40.000 sesiones simultáneas, y procesa hasta 6.000 solicitudes por segundo.

Recursos

Recurso

Mínimo

Máximo

Predeterminado

CPU

0.1

16

0.4

Memoria

96 MB

32 GB

96 MB

Ancho de banda

1 Mbps

2 Gbps

250 Mbps

La cantidad de memoria proporcionada a L3LB no aumenta el rendimiento ni el tiempo de respuesta. L3LB es un dispositivo vinculado al ancho de banda/CPU.

Terminales

Nombre

Dir.

Prot.

Descripción

in

in

Cualquiera

Entrada común. Las solicitudes TCP recibidas se dirigen a una de las salidas mediante información de sesión basada en el origen o en la selección de una operación por turnos.

ctl

in

HTTP

Terminal de control que se usa para activar o desactivar las salidas y recuperar el estado del terminal de salida.

out1-out8

Saliente

Cualquiera

Salidas equilibradas. Se puede dejar sin conexión cualquiera de estas salidas; el tráfico sólo se distribuye a las salidas activadas y conectadas. De forma predeterminada, todos los terminales están activados.

mon

Saliente

CCE

Se usa para enviar estadísticas de uso de recursos y rendimiento.

Propiedades

Propiedades generales

Nombre

Tipo

Descripción

mode

Cadena

Especifica el modo de operación. Los valores válidos son:
tcp_roundrobin: se distribuyen las sesiones TCP entrantes a todos los servidores de back-end conectados y activados mediante una operación por turnos.
tcp_source: la dirección de IP de origen de la solicitud TCP se utiliza para vincular la sesión a un servidor de back-end concreto.
udp_roundrobin: L3LB funciona en modo de equilibrio de carga UDP.
Valor predeterminado: tcp_roundrobin.

ports

Cadena

Una lista delimitada por comas o espacios de puertos e intervalos de puertos que L3LB envía a servidores de back-end. Se especifican intervalos de puertos como puerto_inferior:puerto_superior con guión ("-") o dos puntos (":") como separador entre ellos. Ejemplo: 80,81,90-99 110:120 140 141. Se coloca el tráfico recibido en un puerto sin especificar.
Valor predeterminado: 80

max_connections

Entero

El número máximo de conexiones simultáneamente activas que L3LB puede gestionar. Cuando se alcanza este número, se siguen aceptando nuevas conexiones, pero se retrasa su procesamiento hasta que se cierre otra conexión. Al iniciarse el dispositivo, L3LB determina automáticamente el número máximo de conexiones basándose en la memoria disponible, lo compara con el valor de esta propiedad y utiliza el valor más bajo. Si esta propiedad es 0, se utiliza el valor calculado. Ni la memoria disponible ni una configuración explícita de esta propiedad tienen un efecto directo sobre el rendimiento del equilibrador o su tasa de solicitud máxima. Establecer un número bajo (o tener poca memoria) afecta a la respuesta sólo si los servidores de back-end están realizando operaciones largas para cada solicitud (por ejemplo, búsquedas en una base de datos), lo que haría que muchas solicitudes permaneciesen abiertas al mismo tiempo. Esta propiedad es sólo válida para los modos de operación tcp_roundrobin y tcp_source.
Valor predeterminado: 0

backup_outputs

Cadena

Una lista delimitada por espacios o comas (out1 - out8) de salidas que se consideran servidores de copia de seguridad. No se admiten intervalos de salida (out1-out3). El tráfico se dirige a los servidores de copia de seguridad solamente si ninguno de los servidores de back-end está disponible. La finalidad de estos servidores de copia de seguridad es notificar a los clientes que algo está mal o redirigirlos, en lugar de generar errores de servidor de back-end no disponible o de tiempo de espera agotado. Ejemplo: out1,out2,out3. Si está vacío, no se usa ningún servidor de copia de seguridad.
Valor predeterminado: "" (no se usa ningún servidor de copia de seguridad).

Propiedades de los controles de estado

Para los modos de operación tcp_roundrobin y tcp_source se usa una conexión TCP sencilla al primer puerto especificado en la propiedad de puerto. En el modo de operación udp_roundrobin se utiliza siempre un método ping de ICMP.

Nombre

Tipo

Descripción

healthcheck_interval

Entero

Intervalo entre controles de estado; especificado en segundos. No se realiza ninguna comprobación si esta propiedad es 0.
Valor predeterminado: 20

Propiedades de tiempo de espera

Estas propiedades son solamente válidas para los modos de operación tcp_roundrobin y tcp_source.

Nombre

Tipo

Descripción

client_timeout

Entero

Tiempo de espera en segundos para esperar una solicitud de un cliente después de haber establecido la conexión.
Valor predeterminado: 150.

server_timeout

Entero

Tiempo de espera en segundos para esperar una contestación de un servidor de back-end después de haber establecido la conexión.
Valor predeterminado: 150.

conn_timeout

Entero

Tiempo de espera en segundos para establecer cualquier conexión TCP desde dentro de L3LB a través de uno de sus terminales (se incluyen los controles de estado). Tenga en cuenta que cuando L3LB tiene una carga de red importante, las comprobaciones del estado pueden agotar el tiempo de espera por error cuando este valor se establece en un valor muy bajo (en estos casos L3LB comenzará a desactivar salidas que pueden generar un funcionamiento inesperado de las aplicaciones). No se recomienda establecer esta propiedad en un valor inferior a 20 segundos.
Valor predeterminado: 20.

Propiedades de interfaz de servicios Web

Nombre

Tipo

Descripción

ctl_port

Entero

Puerto que se usa para acceder a la interfaz de control de servicios Web a través del terminal ctl.
Valor predeterminado: 80.

Contadores personalizados

El dispositivo L3LB informa sobre los siguientes contadores personalizados a través del terminal "mon".

Los contadores siguientes pertenecen al grupo de contadores de L3LB. X puede tener un valor comprendido entre 1 y 8.

Nombre del contador

Descripción

outX_status

Estado del terminal de salida outX: 0: activado y operativo, 1: activado y no operativo, 100: desconectado.

outX_queue

Número de solicitudes en cola del terminal outX. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

outX_queue_max

Máximo histórico de solicitudes en cola simultáneas del terminal outX. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

outX_sessions

Número de sesiones activas del terminal outX.

outX_sessions_max

Número máximo de sesiones activas simultáneas del terminal outX.

outX_sessions_total

Número de sesiones completadas del terminal outX. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

outX_errors

Número de controles de estado incorrectos del terminal outX.

queue

Longitud de la cola actual, acumulada para out1 - out8. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

queue_max

Máximo histórico de solicitudes en cola simultáneas, acumulado para out1 - out8. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

sessions_active

Número de sesiones activas, acumulado para out1 - out8.

sessions_max

Número máximo histórico de sesiones activas, acumulado para out1 - out8.

sessions_total

Número de sesiones completadas, acumulado para out1 - out8. No se informa de este contador mientras se encuentra en modo udp_roundrobin.

errors

Número total de errores de control de estado, acumulado para out1 - out8.

Rendimiento

Tasa de solicitudes

L3LB enruta un mínimo de 6.000 transacciones (pares solicitud/respuesta) por segundo, según el tamaño del documento y el ancho de banda de la red disponible.

Rendimiento de los datos

L3LB enruta un mínimo de 15 MBytes por segundo

Conexiones simultáneas

L3LB admite un mínimo de 2.000 solicitudes simultáneas pendientes. (Una "solicitud pendiente" es una conexión TCP abierta desde el cliente, donde hay una o varias sesiones TCP sin completar en curso). El número máximo de conexiones simultáneas depende de la memoria libre disponible y puede tener un valor máximo de 40.000. L3LB se ha sometido a pruebas para admitir más de 15.000 transferencias activas simultáneas.

Mensajes de error

En caso de error al iniciar el dispositivo, pueden aparecer los errores siguientes en el registro del sistema:

Mensaje de error

Descripción

Error: unable to determine appliance memory configuration, please contact CA Technologies support.

L3LB dio error al detectar la cantidad de memoria disponible. Póngase en contacto con Soporte técnico de CA.

Error: failed to create the HAProxy config file, please contact CA Technologies support.

L3LB dio error al crear el archivo de configuración de HAProxy. Póngase en contacto con Soporte técnico de CA (posiblemente se deba a que queda poco espacio en el disco).

Error: failed to determine number of available CPUs, please contact CA Technologies support.

L3LB dio error al detectar el número de CPU disponibles. Póngase en contacto con Soporte técnico de CA.

Error: invalid operation mode specified

Modo especificado no válido. Debería ser tcp_roundrobin, tcp_source o udp_roundrobin.

Error: ctl_port value must be between 1 and 65535.

El valor de ctl_port debe ser mayor que 1 y menor que 65535.

Error: failed to start L3LB, please see '/var/log/appliance/log' log file for details.

Se ha producido un error del sistema al iniciar L3LB. Póngase en contacto con Soporte técnico de CA.

Error: failed to initialize the control web service interface, please contact CA Technologies support.

Se ha producido un error del sistema mientras se inicializaba la interfaz de servicio Web de control que se muestra en el terminal de control. Póngase en contacto con Soporte técnico de CA.

Error: failed to initialize statistics reporting, please contact CA Technologies support.

Se ha producido un error del sistema mientras se inicializaba el informe de estadísticas. Póngase en contacto con Soporte técnico de CA.

Error: failed to initialize the user interface terminal, please contact CA Technologies support.

Se ha producido un error del sistema mientras se inicializaba la interfaz de usuario gráfica que se muestra en el terminal ui. Póngase en contacto con Soporte técnico de CA.

Descripción general

El terminal ctl (en el puerto configurado) muestra una interfaz de servicio Web de control que permite activar o desactivar los terminales de salida (out1 - out8) y recuperar el estado del terminal actual.

Protocolo

Este protocolo únicamente utiliza el método GET HTTP, ya que sólo proporciona funcionalidad de lectura. Por ello, todos los tipos de solicitudes de protocolo compatibles se pueden definir mediante su URI y la estructura de salida. Los caracteres que el URI deba considerar especiales deberán llevar caracteres de escape mediante la codificación % estándar.

A continuación, se ofrece una descripción de todos los URI compatibles.

Llamadas de control

Desactivación de los terminales de salida

Hay dos formatos distintos para desactivar la llamada de control en función de cómo se identifique el terminal de salida:

Solicitud: /api/disable?channel=out3 (desactiva el terminal de salida out3)

Solicitud: /api/disable?10.11.12.13 (desactiva el terminal de salida que se conecta al servidor Web con la dirección IP 10.11.12.13)

Respuesta:

L3LB devuelve la estructura siguiente con un código de estado y un mensaje de estado opcional:

{
   "status":
   {
   "code": valor_de_código,
   "message": "mensaje_de_estado"
   }
}

A continuación se indican los posibles valores de código de estado:

Valor de código

Descripción

0

La operación ha tenido éxito y el terminal se ha desactivado.

10

La operación no se realizado correctamente; la configuración de L3LB no se ha modificado. La causa más probable es que el terminal ya esté desactivado o que la dirección IP especificada no sea válida.

100

Se ha producido un error al procesar la solicitud. Encontrará más detalles en el mensaje de estado.

Activación de los terminales de salida

Hay dos formatos distintos para activar la llamada de control en función de cómo se identifique el terminal de salida:

Solicitud: /api/enable?channel=out3 (activa el terminal de salida out3)

Solicitud: /api/enable?10.11.12.13 (activa el terminal de salida que está conectado al servidor Web con la dirección IP 10.11.12.13)

Respuesta:

L3LB devuelve la estructura siguiente con un código de estado y un mensaje de estado opcional:

{
   "status":
   {
   "code": valor_de_código,
   "message": "mensaje_de_estado"
   }
}

A continuación se indican los posibles valores de código de estado:

Valor de código

Descripción

0

La operación ha tenido éxito y el terminal se ha activado.

10

La operación no se realizado correctamente; la configuración de L3LB no se ha modificado. La causa más probable es que el terminal ya esté activado o que la dirección IP especificada no sea válida.

100

Se ha producido un error al procesar la solicitud. Encontrará más detalles en el mensaje de estado.

Recuperación del estado del terminal de salida

Solicitud: /api/status (devuelve el estado de todos los terminales de salida)

Respuesta:

L3LB devuelve la estructura siguiente con un código de estado y un mensaje de estado opcional:

{
   "status":
   {
   "code": valor_de_código,
   "message": "mensaje_de_estado",
   "terminal_id": "estado_de_terminal",
   "terminal_id": "estado_de_terminal",
   ...
   }
}

Sólo se devuelve la información de estado correspondientes a todos los terminales conectados; no se comunica el estado de los terminales desactivados o desconectados.

A continuación se indican los posibles valores de código de estado:

Valor de código

Descripción

0

La operación se ha realizado correctamente.

100

Se ha producido un error al procesar la solicitud. Encontrará más detalles en el mensaje de estado.

Los posibles valores de terminal están comprendidos entre out1 y out8.

Los posibles valores de estado son:

Valor de estado

Descripción

up

El terminal está conectado y activo.

down

El terminal está inactivo. El servidor Web que está conectado a este terminal está inactivo o ha dado error al realizar el control de estado de L3LB.

Ejemplo de salida de estado:

{
   "status":
   {
   "code": 0,
   "message": "",
   "out1": "up",
   "out2": "up",
   "out3": "down",
   "out4": "up"   
   }
Equilibrado de carga de los clústeres de correo Web

El correo electrónico se ha convertido en una parte importante de los procesos de negocio de hoy en día, por lo que los clústeres de correo Web deben estar disponibles las 24 horas al día los 7 días de la semana. El ejemplo a continuación muestra cómo se pueden utilizar HALB y L3LB conjuntamente para equilibrar la carga y aumentar la disponibilidad de los servidores de correo Web y SMTP. En caso de error, los servidores pueden desactivar las salidas de HALB o L3LB a través de la interfaz ctl. El modo tcp_roundrobin de L3LB se utiliza en este caso.

Cómo se pueden utilizar HALB y L3LB conjuntamente para equilibrar la carga y aumentar la disponibilidad de servidores smtp y de correo Web

Equilibrado de carga de los servidores de aplicaciones

Raramente un sitio Web moderno sirve solamente contenido estático. Normalmente gran parte de las tareas de procesamiento del lado del servidor se producen en el lado del servidor. Este diagrama de ejemplo muestra una forma de equilibrar la carga de accesos ininterrumpidos desde un clúster de servidores Web a varios servidores de aplicaciones, Apache Tomcat en este caso. El modo de operación tcp_source garantiza la compatibilidad adecuada para las sesiones de servidor Web a servidor de aplicaciones.

Equilibrado de carga de los servidores de aplicaciones

Equilibrado de carga de los servicios de voz sobre IP

Los protocolos de voz sobre IP (VoIP) comunes utilizan UDP como protocolo principal; equilibrar la carga de este tráfico es una tarea crucial para disfrutar de una escalabilidad sencilla en los clústeres de VoIP. En este ejemplo se utiliza el modo de operación udp_roundrobin.

Equilibrado de carga de servicio de voz sobre IP

Notes

Software de fuente abierta y de terceros utilizado dentro del dispositivo

L3LB utiliza los siguientes paquetes de fuente abierta de terceros, además de los paquetes de fuente abierta de terceros que utiliza su clase base LUX5.

Software

Versión

Modificado

Licencia

Notes

haproxy

1.2.18

No

GPLv2

Página principal

libxml2

2.6.26

No

MIT

N/A

php-thttpd

2.25b

No

BSD

N/A

libipt_statistic

1.3.5-1.2.1

No

GPLv2

Página principal

iptables

1.3.5-1.2.1

No

GPLv2

Página principal

Clase base

La imagen del dispositivo LUX5 se utiliza como la clase base para los dispositivos L3LB.

Volúmenes de la clase

No se necesita cambiar el tamaño del disco, L3LB está utilizando los valores predeterminados definidos para la clase base LUX5.

Contenido del directorio L3LB

El software L3LB se instala en el subárbol /appliance.

Paquetes

Se instalan los siguientes paquetes estándar (del duplicado oficial):

Además, se instalan los siguientes paquetes personalizados (fuentes incluidas).

Contenido del directorio de la versión:

Imagen del dispositivo exportada:

Fuentes:

Pruebas (consulte el plan de pruebas CatSwitchesL3LBTp y las notas de versión CatSwitchesL3LBRelNotes):

Teoría de operación

L3LB utiliza un solo servicio en segundo plano: el equilibrador de carga de TCP/HTTP de HAProxy (http://haproxy.1wt.eu). Para equilibrar la carga de tcp, solamente se activa el modo de operación TCP.

Se definen un número de oyentes y de back-ends en el archivo de configuración haproxy.cfg, que se crea por el script appliance.sh al inicio del dispositivo mediante los valores de propiedad configurados. Se crea un oyente para el terminal in y se utiliza para todo el tráfico de red entrante que necesita un equilibrado de carga. Se crea otro oyente en la interfaz ui para exportar la GUI de estadísticas al usuario. Se crea otro oyente en la interfaz "lo0" interna de bucle invertido para extraer las estadísticas de tiempo de ejecución y comunicarlas a través del terminal mon. Todos los terminales outX conectados se definen como un back-end, hacia donde se puede reenviar el tráfico de entrada.

El oyente del terminal in recibe una solicitud HTTP y, en función del modo de operación, modifica la cookie en los modos passive, insert y sync. A continuación, la solicitud se reenvía a uno de los servidores de back-end. Si hay una sesión existente para esta solicitud, se reenvía al mismo servidor de back-end de todas las solicitudes anteriores. Si no hay ninguna sesión existente para esta solicitud, el servidor de back-end se selecciona mediante una operación por turnos. Posiblemente la respuesta del servidor se modifica de nuevo y se vuelve a reenviar al cliente.

Configuración

El script inicial appliance.sh genera el archivo de configuración para HAProxy durante el inicio. Usa las propiedades definidas en /etc/applogic.sh para crear un archivo de configuración /appliance/haproxy.cfg. Se escriben un número de propiedades adicionales, que se calculan en el momento de inicio, en el archivo de configuración (ulimit-n, nbproc, dirección de enlace).

Archivos de registro

El registro de solicitudes se desactiva en L3LB, solamente se comunican los errores graves al registro del sistema (los demás errores no se registran).

Notes

Software de fuente abierta y de terceros utilizado dentro del dispositivo

L3LB utiliza los siguientes paquetes de fuente abierta de terceros, además de los paquetes de fuente abierta de terceros que utiliza su clase base LUX5.

Software

Versión

Modificado

Licencia

Notes

haproxy

1.4.9

No

GPLv2

Página principal

php-thttpd

2.25b

No

BSD

N/A

libipt_statistic

1.3.5-1.2.1

No

GPLv2

Página principal

iptables

1.3.5-5.3.el5_4

No

GPLv2

Página principal