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

У меня есть 2 сервера (A и B) для одного и того же бэкэнда с одним в качестве резервного, но эти серверы зависят от работы двух других серверов (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 'из теста 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 и на A 'в lua.check ...

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

Спасибо

1 Ответ

0 голосов
/ 18 марта 2019

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

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

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

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

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


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

...