¿Cuál es la práctica estándar para que un servidor notifique a un equilibrador de carga que no está disponible?

Normalmente, el equilibrador de carga realiza sus propias comprobaciones de estado en un grupo de servidores preconfigurado para determinar si están en línea. Luego, dirige el tráfico a los servidores que sabe que están disponibles para procesar solicitudes. Si un servidor deja de responder, el equilibrador de carga deja de enrutar el tráfico hacia él. Pero continuará con los controles de salud. Cuando el servidor comienza a responder a las comprobaciones de estado nuevamente, el equilibrador de carga comienza a enrutar el tráfico nuevamente.

La comprobación de estado generalmente se puede configurar para

  • Capa 3 Ping (Eco ICMP),
  • Layer 4 TCP connect (), o
  • Comprobación de URL de capa 7 con código de respuesta HTTP (200 OK frente a algún error).

Para administrar todo esto fuera del balanceador de carga, entonces sí, necesitaría usar un balanceador de carga con una API. Stingray Traffic Manager es uno que incluye una API RESTful y está disponible como un dispositivo virtual. Lo usamos en Internap para nuestras implementaciones de alojamiento y clientes en la nube.

Pero probablemente desee un servicio separado que verifique los servidores y le indique al equilibrador de carga que los elimine. Ese servicio de monitoreo podría configurarse para aceptar mensajes de servidores que necesitan eliminarse del grupo para que las actualizaciones del equilibrador de carga estén centralizadas. Con este método, podría desarrollar una escala automática adicional con máquinas virtuales agregando nuevos nodos de servidores al equilibrador de carga a pedido (en lugar de preconfigurar el grupo de servidores de antemano). Así es como funcionan muchos servicios de autoescalado: prueban la aplicación de forma independiente y están preconfigurados para activar nuevos nodos (generalmente máquinas virtuales) utilizando un conjunto predefinido de scripts de configuración para una automatización completa.

A diferencia de las comprobaciones de estado de la capa 3, las comprobaciones de estado basadas en el servicio para las comprobaciones de estado de la capa 4 y la capa 7 se basan en el servicio virtual. Cuando un servidor real falla tal verificación, se eliminará solo del servicio virtual correspondiente; todos los demás servicios virtuales que usan este servidor real no se ven afectados.

control de salud

Tipo / Descripción

ICMP

LoadMaster envía solicitudes de eco ICMP (pings) a los servidores reales. Un servidor real falla esta comprobación cuando no responde con una respuesta de eco ICMP en el tiempo de respuesta configurado para el número configurado de reintentos.

TCP

LoadMaster intenta abrir una conexión TCP al servidor real en el puerto de servicio configurado: envía un paquete TCP SYN al servidor en el puerto de servicio. El servidor pasa la verificación si responde con un TCP SYN ACK en el intervalo de tiempo de respuesta. En este caso, LoadMaster cierra la conexión enviando un RESET TCP. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, se supone que está muerto.

FTP

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 21). Si el servidor responde con un mensaje de saludo con el código de estado 220, LoadMaster envía un comando QUIT al servidor, cierra la conexión y lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto.

TELNET

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 23). Si el servidor responde con una cadena de comando que comienza con el carácter ‘0xff’, LoadMaster cierra la conexión y marca el servidor como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con una cadena de comando diferente, se supone que está muerto.

SMTP

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 25). Si el servidor responde con un mensaje de saludo con el código de estado 220, LoadMaster envía un comando QUIT al servidor, cierra la conexión y lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto.

HTTP

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 80). LoadMaster envía una solicitud HTTP / 1.0 HEAD al servidor, solicitando la página “/”. Si el servidor envía una respuesta HTTP con un código de estado de 2 (200-299, 301, 302, 401), LoadMaster cierra la conexión y marca el servidor como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto. Soporte HTTP 1.0 y 1.1 disponible. HTTP 1.1 le permite verificar los servidores web habilitados para el encabezado del host.

HTTPS

LoadMaster abre una conexión SSL con el servidor real en el puerto de servicio (puerto 443). LoadMaster envía una solicitud HTTP / 1.0 HEAD al servidor, solicitando la página “/”. Si el servidor envía una respuesta HTTP con un código de estado de 2 (200-299, 301, 302, 401), LoadMaster cierra la conexión y marca el servidor como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado o si responde con un código de estado diferente, se supone que está muerto. Soporte HTTP 1.0 y 1.1 disponible. HTTP 1.1 le permite verificar los servidores web habilitados para el encabezado del host.

POP3

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 110). Si el servidor responde con un mensaje de saludo que comienza con + OK, LoadMaster envía un comando QUIT al servidor, cierra la conexión y lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto.

NNTP

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 119). Si el servidor responde con un mensaje de saludo con el código de estado 200 o 201, LoadMaster envía un comando QUIT al servidor, cierra la conexión y lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto.

IMAP

LoadMaster abre una conexión TCP al servidor real en el puerto de servicio (puerto 143). Si el servidor responde con un mensaje de saludo que comienza con “+ OK” o “* OK”, LoadMaster envía un comando LOGOUT al servidor, cierra la conexión y lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado, o si responde con un código de estado diferente, se supone que está muerto.

DNS

LoadMaster envía una solicitud de fuente de autoridad (SOA) al servidor real en el puerto de servicio (puerto 53 UDP). Si el servidor responde con éxito a la solicitud SOA, LoadMaster lo marca como activo. Si el servidor no responde dentro del tiempo de respuesta configurado durante el número de veces configurado o si responde sin éxito a la solicitud SOA, se supone que está muerto.

RDP

LoadMaster envía un token de enrutamiento RDP al servidor real.

La comprobación de estado de RDP admite la autenticación de nivel de red.

Dependiendo del equilibrador de carga que esté utilizando, es posible que tenga una opción para realizar el equilibrio de carga entre los diferentes servidores en función del tiempo de respuesta del servidor únicamente. Para que algo como esto funcione, las comprobaciones de estado de la Capa 4 / Capa 7 deben deshabilitarse, y luego el tiempo de respuesta se mide según la rapidez con que el servidor podría responder a las solicitudes de los clientes.

Tales tiempos de respuesta se basan generalmente en los paquetes TCP SYN y TCP SYN ACK. A continuación, puede definir que si tarda más de unos X milisegundos, el equilibrador de carga debe omitir el servidor y probar con otro.

Otro método es basarlo únicamente en controles de salud solamente. En cuyo caso, si el estado del servidor parece deteriorarse, se omite la solicitud.

No me he encontrado con un LB que hace un RSET a través de API.

Además de lo que dijo Ravi, con AWS Elastic Load Balancing puede configurarlo para enviar un ping a una página web / url en su servidor para hacer una comprobación de estado. Si puede hacer que la url devuelva una respuesta que no sea 200 cuando se ejecuta el trabajo de mantenimiento, entonces el equilibrador de carga no usará ese servidor de aplicaciones para atender la solicitud. Cuando termine su trabajo, puede responder con un estado normal.

Según el equilibrador de carga, es posible que pueda utilizar una estrategia similar.

Si está en AWS (Amazon Cloud), podría agregar / eliminar mediante programación el servidor que ejecuta tareas de mantenimiento en momentos específicos desde el equilibrador de carga.

Otra opción es utilizar servidores web como nginx para equilibrar la carga que puede eliminar servidores cuando son lentos y volver a intentar en los momentos configurados para volver a servir el tráfico.

Dependiendo del equilibrador de carga y del servicio que esté utilizando, ciertamente es posible sacar un servidor de la rotación cuando no está listo para aceptar solicitudes. Por ejemplo, Windows Azure usa un equilibrador de carga F5 y el SDK de Azure proporciona una forma de indicar el estado de la aplicación. Los estados van desde ‘Listo’, ‘Ocupado’, ‘Inactivo’, etc. Si el estado del servidor / instancia de la aplicación es ‘Ocupado’, el equilibrador de carga no enviará ningún tráfico de esa manera. Casi todo lo que no sea ‘Listo’ se encontrará con el mismo comportamiento.

More Interesting

¿Qué son los servidores web JEE y los servidores de aplicaciones?

¿Cuánto cuesta construir una aplicación web con análisis de datos pesados ​​en su back-end?

¿Qué tan poderoso de un servidor web necesito para mi aplicación de prueba en línea? Puede haber 2,000 usuarios a la vez tomando la prueba.

¿Es una buena idea codificar una aplicación web y su API en una sola aplicación Laravel?

¿Cuáles son las ventajas y desventajas entre cobrar a los usuarios de forma continua y el pago único a tanto alzado para una cuenta premium bajo un modelo freemium?

¿Cuáles son los pasos técnicos exactos de un usuario que interactúa con una aplicación web? (Preferiblemente usando el marco Flask).

¿Cuáles son los beneficios, si los hay, de una interfaz de usuario basada en texto sobre una interfaz basada en web?

¿Qué idiomas y cosas avanzadas debo aprender sobre la web antes de comenzar un inicio basado en la web? Por favor, proporcione los enlaces para los recursos

¿Dónde puedo encontrar los mejores temas de bootstrap?

Cómo promocionar un sitio de software (scripts web)

¿Qué sucede si los datos de mi aplicación web crecen muy rápido?

¿Hay alguna aplicación que publique automáticamente deseos de cumpleaños en los muros de amigos?

¿Cuál es la forma más fácil de crear mis propios sitios web? Por favor, da pasos para ello.

¿Por qué las personas usan IFTTT? Hice una cuenta pero no estoy seguro de por qué debería quedarme.

Cómo usar IFTTT