#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
Кроме того, если вы можете пойти на компромисс и провести только одну проверку работоспособности для сервера, от которого вы зависите, вы можете захотеть использовать опцию отслеживать. Однако это не решит вашу проблему, если вы хотите провести несколько проверок работоспособности.