Comprobaciones de estado de HAProxy: ¿usando httpchk y observe?

10

Estoy usando HAProxy 1.4.18 con la siguiente configuración de back-end

backend staging
  option httpchk HEAD /check.txt HTTP/1.0
  http-check disable-on-404
  default-server error-limit 1 on-error mark-down
  server staging01 x.x.x.x:80 check observe layer7
  server staging02 x.x.x.x:80 check observe layer7

Los servidores ejecutan múltiples aplicaciones en apache / pasajero.

La combinación de httpchk y disable-on-404 permite un apagado elegante y la eliminación de un servidor del lb con bastante facilidad mientras se puede acceder directamente (es decir, para pruebas).

Estoy tratando de configurar Observe para deshabilitar un servidor cuando una aplicación no funciona. He roto la configuración de la aplicación en staging02 por lo que siempre devuelve un 500. Está correctamente marcado DOWN después de los primeros 500 pero luego marcado UP en el siguiente httpchk.

Aquí está el archivo de registro:

Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 2 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is DOWN, reason: Health analyze, info: "Detected 1 consecutive errors, last one was: Wrong http response". 1 active and 1 backup servers left. 1 sessions active, 0 requeued, 0 remaining in queue.
Server staging/staging02 is UP, reason: Layer7 check passed, code: 200, info: "OK", check duration: 0ms. 2 active and 1 backup servers online. 0 sessions requeued, 0 total in queue.

¿Hay alguna forma de combinar esos dos cheques?

ouranos
fuente
Solo para estar seguro de que HAProxy es definitivamente el problema, ¿podría encontrar las tres líneas de registro coincidentes de su servidor Apache de fondo y agregarlas a su pregunta?
Ladadadada
Uno de los servidores apache está mal configurado a propósito para que todas las aplicaciones en él devuelvan un código de error 500. Sin embargo, el /check.txt siempre funciona a menos que elimine el archivo. Quiero que el servidor apache esté deshabilitado si devuelve un error 500 incluso si el archivo check.txt todavía está allí.
ouranos

Respuestas:

4

La distinción Ahora entiendo es que /check.txt hace realidad devuelve una respuesta 200, pero todas las peticiones a la aplicación 500. devolver un HAProxy ve el 500 que regresan de las solicitudes de proxy y toma el servidor fuera de la piscina, pero luego inicia su propia comprobar, recibe un 200 y vuelve a poner el servidor en el grupo.

La solución sería hacer uno de:

  1. Configure Apache, en lugar de la aplicación, para que cada solicitud devuelva una respuesta 500, incluso el archivo estático /check.txt.
  2. Cambie /check.txta una aplicación Ruby que contenga la lógica suficiente para elegir entre una respuesta de 200 y 500 cuando sea apropiado.
  3. Establezca el intervalor en algo ridículo como 3600. Esto debería darle una hora para hacer su prueba o (si el servidor se averió por sí solo) resolver el problema y volver a activarlo.
  4. Establezca el intervalor en algo más pequeño como 60 pero establezca el risevalor en algo más alto como 60. Esto también le daría una hora antes de que el servidor se agregara nuevamente al grupo. (Tenga en cuenta que estos dos se enumeran al final porque probablemente son muy malas ideas).
Ladadadada
fuente
Sí, eso es lo que está pasando. Creo que tendré que deshacerme de /check.txty apuntar el httpchk a una aplicación. El check.txtarchivo fue útil para eliminar de forma rápida y elegante un servidor de todos los HAProxy (3 de ellos en la configuración de HA, solo uno activo). También parece que disable serverno persiste entre recargas.
ouranos