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
RewriteMap
soporte en Apache combinado con RewriteRule
expresiones proxy. He creado un mecanismo cliente/servidor simple para que los servidores de aplicaciones se "registren" con el frontend y un RewriteMap
programa 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.