У нас есть 2 веб-сервера, которые мы хотим сбалансировать. На каждом сервере есть основное веб-приложение, пользующееся успехом у публики. У каждого сервера также есть ряд зависимых микросервисов, которые используются внутри основного приложения.
Мы хотим, чтобы балансировщик нагрузки исключал сервер, если какой-либо из микросервисов этого сервера обнаруживается как неработающий.
http://server1/mainApp
http://server1/microservice1
http://server1/microservice2
http://server1/mainApp
http://server2/microservice1
http://server2/microservice2
Так что если http://server2/microservice2
идет вниз тогда мы хотим server1 для обслуживания всего трафика. Или если http://server1/microservice1
идет вниз мы хотим server2 к трафику сервера.
Возможна ли такая логика в HAproxy? или есть другая технология, которая может сделать это за нас?
Спасибо!
Ты можешь использовать tcp-check
. В бэкэнд-разделе добавьте что-то вроде этого:
option tcp-check
tcp-check connect
tcp-check send GET\ /\mainApp\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)
tcp-check connect
tcp-check send GET\ /\microservice1\/check HTTP/1.0\r\n
tcp-check send Host:\ haproxy.1wt.eu\r\n
tcp-check send \r\n
tcp-check expect rstring (2..|3..)
Видеть: https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4.2-tcp-check%20connect
HAproxy не имеет встроенных функций для сложных проверок работоспособности, подобных этой.
Тем не менее, что вы можете сделать, так это написать быструю и грязную страницу на бэкэндах (или на LB, если это проще / лучше), которая выполняет запросы GET для всех микросервисов и возвращает заданный код состояния или строку для заданного результата; 200 и «ОК», если все в порядке, 503 и «ОТКАЗ», если нет.
Я написал аналогичную страницу .NET, чтобы проверить, запущена ли в системе конкретная служба, потому что IIS всегда возвращал 200, даже если служба поддержки не работала.
Поскольку у вас всего 3 микросервиса, он должен работать хорошо, но не так много, если у вас десятки или сотни.