Aquí está mi escenario (diseñado por mi predecesor):carga de proxy Apache detección de fallos en el servidor back-end equilibrio
Dos servidores Apache que sirven deber proxy inverso para un número de servidores web mixta backend (Apache, IIS, Tomcat, etc.) . Hay algunos sitios para los cuales tenemos varios servidores back-end web, y en esos casos, hacer algo como:
<Proxy balancer://www.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.41:80
</Proxy>
<VirtualHost *:80>
ServerName www.example.com:80
CustomLog /var/log/apache2/www.example.com.log combined
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://www.example.com/
ProxyPassReverse balancer://www.example.com/
</Location>
</VirtualHost>
lo tanto, en este ejemplo, tengo un sitio (www.example.com) en el las configuraciones de los servidores proxy, y ese sitio está conectado a uno u otro de los dos servidores backend, 192.168.1.40 y .41.
Estoy evaluando esto para asegurarme de que somos tolerantes a fallas en todos nuestros servicios web (ya he puesto los dos servidores proxy inversos en un clúster IP compartido por este motivo), y quiero asegurarme que los servidores backend de carga equilibrada son tolerantes a fallas también. Pero estoy teniendo problemas para averiguar si la detección de fallas de back-end (y la lógica para evitar el servidor backend fallido) está integrada en el módulo mod_proxy_balancer ...
Así que si 192.168.202.40 falla, Apache detectará esto (I ¿Entenderá si se necesita primero una solicitud fallida) y enrutar automáticamente todas las solicitudes al otro servidor, 192.168.202.41? ¿O continuará equilibrando las solicitudes entre el backend fallido y el backend operacional?
he encontrado algunas pistas en la documentación de Apache para mod_proxy y mod_proxy_balancer que parecen indicar que el no se puede detectar ("MaxAttempts = número máximo de intentos de cesión antes de renunciar.", "Failonstatus = una sola o por comas lista separada de códigos de estado HTTP. Si se establece, esto forzará al trabajador a un estado de error cuando el servidor devuelva cualquier código de estado en la lista. "), pero después de unos días de búsqueda, no he encontrado nada concluyente que diga con certeza que (o al menos "debería") detectar la falla y recuperación de back-end.
Diré que la mayoría de los resultados de búsqueda utilizan el protocolo AJP para pasar el tráfico a los servidores backend, y esto aparentemente admite la detección de fallas, pero mis backends son una mezcla de Apache, IIS, Tomcat y otros , y estoy bastante seguro de que muchos de ellos no son compatibles con AJP. También son una mezcla de Windows 2k3/2k8 y Linux (principalmente Ubuntu Lucid) cajas ejecutando varias aplicaciones diferentes con diferentes requisitos, por lo que los módulos adicionales como Backhand y LVS no son una opción para mí.
También he intentado poner a prueba empíricamente esta función, mediante la creación de un nuevo sitio de prueba como esta:
<Proxy balancer://test.example.com>
BalancerMember http://192.168.1.40:80
BalancerMember http://192.168.1.200:80
</Proxy>
<VirtualHost *:80>
ServerName test.example.com:80
CustomLog /var/log/apache2/test.example.com.log combined
LogLevel debug
<Location />
Order allow,deny
Allow from all
ProxyPass balancer://test.example.com/
ProxyPassReverse balancer://test.example.com/
</Location>
</VirtualHost>
Dónde 192.168.1.200 es una dirección falsa que no se ejecuta ningún servidor web, para simular una falla de back-end. El sitio de prueba se sirvió sin problemas para un grupo de máquinas de cliente diferentes, pero incluso con el conjunto de LogLevel para depurar, no vi nada registrado para indicar que detectó que uno de los servidores back-end estaba inactivo ... Y Me gustaría estar 100% seguro de que puedo llevar nuestros backend de carga equilibrada para el mantenimiento (uno a la vez, por supuesto) sin afectar los sitios de producción.
Última respuesta aquí, pero esto me ayudó. Tuve que forzar la actualización a 2.2.17, ya que los repos de Lucid normales solo tienen 2.2.14, que no admite el parámetro "failonstatus". Se agregaron los repos natty temporalmente, se actualizaron a 2.2.17, y ahora todo parece estar funcionando. Gracias! –
@David Newcomb La única solución que he encontrado que realmente funciona (aunque es fea) es usar 'maxattempts' (ver http://serverfault.com/questions/503531/apache2-proxy-tomcat6-prevent-503-error -while-starting/503539 # 503539). –