¿Equilibrador de carga HTTP con soporte para membresía dinámica de backend?

¿Equilibrador de carga HTTP con soporte para membresía dinámica de backend?

Me gustaría implementar un equilibrador de carga HTTP/proxy inverso frente a varios servidores de aplicaciones backend. El problema es que el conjunto de servidores puede cambiar con el tiempo y se pueden crear nuevos servidores de aplicaciones dinámicamente (por lo que el conjunto total no se puede conocer de antemano). Esto significa algo comoBarniz, que puede realizar controles de salud contra unconocidoconjunto de backends, no es una opción.

Lo mejor que se me ha ocurrido es el prg RewriteMapsoporte en Apache combinado con RewriteRuleexpresiones proxy. He creado un mecanismo cliente/servidor simple para que los servidores de aplicaciones se "registren" con el frontend y un RewriteMapprograma que selecciona backends de esta lista. Funciona, pero hueleen realidadhacky.

Parece que debe ser un escenario razonablemente común (con tantos proveedores de servicios en la nube que facilitan la puesta en marcha de nuevos servidores bajo demanda). ¿Cómo están resolviendo este problema otras personas? ¿Estás utilizando simplemente un equilibrador de carga comercial? ¿Todos están preparando algo por su cuenta?

Respuesta1

El módulo mod_proxy_balancer incorporado (bueno, suministrado) de Apache proporciona la mayor parte de esta funcionalidad, incluida la ponderación individual y la incorporación y salida controlada de los backends de los miembros.

También hay una aplicación de administrador de balanceador para visualizar y controlar este comportamiento en tiempo de ejecución.

Mire aquí para más detalles:http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html

Respuesta2

nginx no admite esto de fábrica, pero es bastante fácil de implementar. Lo hice a continuación explicado en detalle.

1) cree un archivo de configuración separado solo para upstreams (upstreams.conf) e inclúyalos desde nginx.conf principal 2) ahora puede editar este archivo a mano o con un script por separado, escribí un script en Perl simple para administrar este archivo, agregar/eliminar texto líneas con descripción ascendente. 3) enviar señal HUP al proceso principal de nginx para emitir una recarga elegante 4) Se ha implementado alguna interfaz de usuario web para controlar estas operaciones y proporcionar comprobaciones de estado, pero no es software libre

Dispute que hay un par de módulos de 3 lados que implementan una interfaz de administración y verificación de estado, eche un vistazo

http://wiki.nginx.org/HttpHealthcheckModule https://bitbucket.org/benjaminws/nginxmgr/ https://github.com/FRiCKLE/ngx_supervisord

No estoy seguro, pero es posible que haproxy también tenga la misma funcionalidad.

Respuesta3

Casi todas las soluciones comerciales de equilibrio de carga (F5, Citrix, A10, etc.) tienen API de administración de configuración (basadas en REST o SOAP) que podrían aprovecharse fácilmente para este propósito: los servidores pueden agregarse a los grupos relevantes como parte de su enrutamiento de inicio. y se eliminan a sí mismos cuando se cierran. Si un servidor falla, el LB lo rebajará debido a fallas en las comprobaciones de estado.

información relacionada