Как написать проверку haproxy на 2 разных серверах одновременно, возможно, с помощью lua-скрипта?

#lua #haproxy

#lua #haproxy

Вопрос:

У меня есть 2 сервера (A и B) для одного и того же бэкэнда с одним в качестве резервного, но работа этих серверов зависит от 2 других серверов (A’ и B’), по одному для каждого сервера: сервер A можно использовать, если сервер A запущен И если сервер A’ запущен, сервер B можно использовать, если сервер B запущен И сервер B’ запущен.

На данный момент я не могу сказать haproxy «использовать сервер A, если сервер A запущен и если сервер A’ запущен»?

Пример.:

 backend foo
        option httpchk
        server A 10.99.98.97:8001 check inter 10s rise 2 fall 5
        server B 10.99.98.96:8001 check inter 10s rise 2 fall 5 backup

backend bar
        option httpchk
        server A' 10.99.98.95:8001 check inter 10s rise 2 fall 5
        server B' 10.99.98.94:8001 check inter 10s rise 2 fall 5 backup
  

Если A’ не работает, я больше не могу использовать A, но haproxy не знает этого с помощью этих тестов (мне действительно не нужна внутренняя панель, это просто для того, чтобы показать, в чем проблема)… По разным причинам я не могу использовать определенный путь для проверки сервера A’ из теста :

 backend foo
        option httpchk GET /url_on_A_which_checks_A'
        server A 10.99.98.97:8001 check inter 10s rise 2 fall 5..
  

Интересно, возможно ли с помощью lua протестировать два разных сервера, прежде чем считать, что сервер «запущен»? Я не хочу проводить проверку для каждого входящего запроса, например, в разделе интерфейса (проблема с производительностью)…

Я представляю себе что-то вроде :

 backend foo
        option lua.check
        server A 10.99.98.97:8001 lua.check inter 10s rise 2 fall 5..
  

С запросом на порт 8001 на A И на ‘ в lua.check…

Извините за мой английский,

Спасибо

Ответ №1:

Если вам нужно проверить работоспособность нескольких серверов, есть хитрость, которую вы можете использовать с помощью внешней проверки. Основная суть трюка заключается в том, чтобы выполнить внешнюю проверку, которая затем вызывает ваш сокет статистики haproxy и проверяет работоспособность серверов на разных серверных системах.

Вот пример, который я написал, который использует внешнюю проверку работоспособности для проверки состояния всех серверов с одинаковыми именами. Обратите внимание, что есть два серверных модуля, единственное назначение которых — выполнять проверки работоспособности, например, они не подключены ни к какому интерфейсу:

https://gist.github.com/mweiss/125ce3eaf1f511d103c229f4b0cb419c

Для получения дополнительной информации о внешних проверках см.:

https://cbonte.github.io/haproxy-dconv/1.8/configuration.html#option external-check


Кроме того, если вы можете пойти на компромисс и провести только одну проверку работоспособности для сервера, от которого вы зависите, вы можете захотеть использовать опцию отслеживать. Однако это не решит вашу проблему, если вы хотите провести несколько проверок работоспособности.