Проверка работоспособности HAProxy: с помощью httpchk и наблюдать?

10

Я использую 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.

Есть ли способ объединить эти две проверки?

Ouranos
источник
Просто чтобы быть уверенным, что HAProxy определенно является проблемой, не могли бы вы найти три соответствующие строки журнала на вашем бэкэнд-сервере Apache и добавить их к вашему вопросу?
Ладададада
Один из серверов Apache специально настроен неправильно, чтобы все приложения на нем возвращали код ошибки 500. Однако /check.txt всегда работает, если я не удаляю файл. Я хочу, чтобы сервер apache был отключен, если он возвращает ошибку 500, даже если файл check.txt все еще существует.
Уран

Ответы:

4

Различие теперь я понимаю, что /check.txt это на самом деле возвращает ответ 200 , но все запросы к приложению вернуть 500. HAProxy видит 500s , возвращающийся из проксируемых запросов и принимает сервер из бассейна , но затем начинает свои собственный проверьте, получает 200 и помещает сервер обратно в пул.

Решением будет сделать одно из:

  1. Настройте Apache, а не приложение, чтобы каждый запрос возвращал ответ 500, даже статический файл /check.txt.
  2. Перейдите /check.txtв приложение Ruby, которое содержит достаточно логики для выбора ответа от 200 до 500 при необходимости.
  3. Установите для этого interзначения что-то нелепое, например 3600. Это должно дать вам час на тестирование или (если сервер отключился сам) выяснить проблему и восстановить ее.
  4. Установите для этого interзначения что-то меньшее, например, 60, но задайте riseдля чего-то более высокое, например, 60. Это также даст вам час, прежде чем сервер будет добавлен обратно в пул. (Обратите внимание, что эти два перечислены последними, потому что они, вероятно, очень плохие идеи.)
Ladadadada
источник
Да, это то, что происходит. Я думаю, мне придется избавиться от /check.txtи указать httpchk на одно приложение. check.txtФайл был под рукой , чтобы быстро и корректно удалить сервер из всех HAProxy (3 из них в установке HA, только один активный). Также кажется, что disable serverне сохраняется между перезагрузкой.
Уран