Files
hse-2026/materials/06-failures/seminar/consul-demo/readme.md
T
2026-10-14 20:13:57 +03:00

4.3 KiB

Consul: членство агентов и здоровье сервисов

К материалам семинара

В стенде работают три сервера Consul и три экземпляра Flask-приложения. Каждый экземпляр регистрирует себя в Consul вместе с HTTP-проверкой /health, выполняемой раз в 10 секунд. Проверка приложения и обнаружение недоступности агентов Consul — разные механизмы.

Запуск и наблюдение

Нужны Docker и Docker Compose. Команды выполняются из этой директории. В PowerShell вместо curl используйте curl.exe.

Сначала запустите серверы:

docker compose up -d consul-server-1 consul-server-2 consul-server-3

Дождитесь появления трёх узлов в интерфейсе Consul, затем запустите приложения. Такой порядок нужен, потому что регистрация приложения выполняется один раз при старте и требует доступного Consul.

docker compose up --build -d app-1 app-2 app-3
docker compose exec consul-server-1 consul members
curl http://localhost:8500/v1/catalog/services
curl http://localhost:8500/v1/health/checks/flask-hello-world
curl "http://localhost:8500/v1/health/service/flask-hello-world?passing=true"

Здесь consul members показывает агентов, каталог — зарегистрированные сервисы, а health API — проверки и экземпляры, прошедшие их. Дождитесь успешных проверок всех трёх приложений. Если приложение завершилось при регистрации, причину можно увидеть через docker compose logs app-1 app-2 app-3.

Остановка приложения

docker compose stop app-2

Повторите запросы к health API и consul members. После очередной проверки экземпляр app-2 перестанет попадать в выдачу с passing=true, хотя агент consul-server-2 останется участником группы. Сервис может ещё быть зарегистрирован в каталоге: каталог и список здоровых экземпляров имеют разный смысл. При длительном провале проверки настроена автоматическая отмена регистрации.

Верните приложение и после проверки снова сравните результаты:

docker compose start app-2

Обработчик /health в коде приложения просто возвращает OK. Он позволяет заметить недоступность HTTP-сервера, но не проверяет выполнение полезной работы или доступность зависимостей. Этот опыт показывает проверку сервиса; для изучения отказов самих агентов потребовался бы другой сценарий.

Связь с маршрутизацией

Клиент или балансировщик может использовать сведения о здоровых экземплярах для выбора адреса. В этом стенде балансировщик не настроен, и с демо Envoy он не соединён.

После работы остановите стенд:

docker compose down

Данные Consul сохраняются в каталогах consul-data-*, поэтому следующий запуск не обязательно начинается с пустого каталога.

Документация: Health API, gossip и Lifeguard в Consul.