Я использую HAProxy 1.4.18 со следующей конфигурацией сервера
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
На серверах запущено несколько приложений на apache / passenger.
Комбинация httpchk и disable-on-404 позволяет плавно завершить работу и довольно легко удалить сервер из lb, при этом имея прямой доступ (т.е. для тестирования).
Я пытаюсь настроить наблюдение, чтобы отключить сервер, когда приложение не работает. Я нарушил конфигурацию приложения на staging02, поэтому он всегда возвращает 500. Он правильно помечается DOWN после первых 500, но затем помечается UP на следующем httpchk.
Вот файл журнала:
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.
Есть ли способ объединить эти две проверки?
Ответы:
Различие теперь я понимаю, что /check.txt это на самом деле возвращает ответ 200 , но все запросы к приложению вернуть 500. HAProxy видит 500s , возвращающийся из проксируемых запросов и принимает сервер из бассейна , но затем начинает свои собственный проверьте, получает 200 и помещает сервер обратно в пул.
Решением будет сделать одно из:
/check.txt
./check.txt
в приложение Ruby, которое содержит достаточно логики для выбора ответа от 200 до 500 при необходимости.inter
значения что-то нелепое, например 3600. Это должно дать вам час на тестирование или (если сервер отключился сам) выяснить проблему и восстановить ее.inter
значения что-то меньшее, например, 60, но задайтеrise
для чего-то более высокое, например, 60. Это также даст вам час, прежде чем сервер будет добавлен обратно в пул. (Обратите внимание, что эти два перечислены последними, потому что они, вероятно, очень плохие идеи.)источник
/check.txt
и указать httpchk на одно приложение.check.txt
Файл был под рукой , чтобы быстро и корректно удалить сервер из всех HAProxy (3 из них в установке HA, только один активный). Также кажется, чтоdisable server
не сохраняется между перезагрузкой.