Назад | Перейти на главную страницу

haproxy httpchk множественная проверка на бэкэнде

можно ли проверить два условия на одном бэкэнде? пример

backend web-static
        option httpchk GET /path/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        option httpchk GET /path2/alive.php HTTP/1.1\r\nHost:\ www1.domain.com
        server appsrv1 192.168.1.10:80 check inter 3000 weight 1

Ах, у меня был такой же вопрос! Наши разработчики создали многофункциональную веб-службу с одним именем URL, поскольку нам необходимо поддерживать браузеры, не совместимые с CORS (IE 8 и 9). Одно DNS-имя, ведущее к одному VIP-адресу, имеет несколько подкаталогов, каждый из которых является отдельным приложением. Таким образом, наш балансировщик нагрузки должен проверять работоспособность каждой из служб, а затем обрабатывать это как большой тест «И», т. Е. Если даже один службы не проходит проверку, то мы должны выдернуть этот сервер из фермы, пока все из них проходят.

Мы переходим от балансировщиков нагрузки Cisco ACE, и на этой платформе вы просто определяете несколько конфигураций «зонда», а затем вызываете несколько зондов в пределах одной серверной фермы, одну строку за другой, и он запускает все зонды. Как вы, вероятно, заметили, HAProxy не позволяет вам определять более одного «option httpchk» ... или, по крайней мере, игнорирует все, кроме одного, так что вы не получите требуемого тестирования. Но из руководства я понял, что могу сделать это, не используя httpchk, подставив ряд строк «подключить, отправить, проверить» под «опцией tcp-check». Работает отлично.

option tcp-check
tcp-check connect
tcp-check send GET\ /FirstApplication/check.aspx?healthcheck\ HTTP/1.0\r\n\r\n
tcp-check expect string Healthy
tcp-check connect
tcp-check send GET\ /SecondApplication/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesThisIsGood
tcp-check connect
tcp-check send GET\ /ThirdApp/Check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string ExpectedCheckResult
tcp-check connect
tcp-check send GET\ /NumberFourApp/check.aspx\ HTTP/1.0\r\n\r\n
tcp-check expect string YesItIsWorking

Обратите внимание, что вы должны экранировать каждый пробел в отправляемой строке. Я использую HTTP / 1.0 в запросе, который по умолчанию не поддерживает поддержку активности, поэтому я повторно подключаюсь к каждой серии строк. Полагаю, я мог бы также использовать HTTP / 1.1, но тогда мне также пришлось бы передавать заголовок Host, поэтому я думаю, что так проще. Выполнение этих четырех проверок подряд все равно занимает всего 60 мс, так что я доволен. Также обратите внимание, что я просто использую «ожидаемую строку», но есть также «ожидаемую строку» для поиска регулярных выражений по содержимому результатов, возвращаемому с сервера.

Наверное, проще было бы сделать PHP-оболочку: он проверяет другие файлы и, если все в порядке, возвращает HTTP-код 200, если нет - 404.

Насколько я помню, у нас это тоже сработало, когда мы хотели проверить функциональность.