58 lines
4.3 KiB
Markdown
58 lines
4.3 KiB
Markdown
# Consul: членство агентов и здоровье сервисов
|
|
|
|
[К материалам семинара](../readme.md)
|
|
|
|
В стенде работают три сервера Consul и три экземпляра Flask-приложения. Каждый экземпляр регистрирует себя в Consul вместе с HTTP-проверкой `/health`, выполняемой раз в 10 секунд. Проверка приложения и обнаружение недоступности агентов Consul — разные механизмы.
|
|
|
|
## Запуск и наблюдение
|
|
|
|
Нужны Docker и Docker Compose. Команды выполняются из этой директории. В PowerShell вместо `curl` используйте `curl.exe`.
|
|
|
|
Сначала запустите серверы:
|
|
|
|
```shell
|
|
docker compose up -d consul-server-1 consul-server-2 consul-server-3
|
|
```
|
|
|
|
Дождитесь появления трёх узлов в [интерфейсе Consul](http://localhost:8500), затем запустите приложения. Такой порядок нужен, потому что регистрация приложения выполняется один раз при старте и требует доступного Consul.
|
|
|
|
```shell
|
|
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`.
|
|
|
|
## Остановка приложения
|
|
|
|
```shell
|
|
docker compose stop app-2
|
|
```
|
|
|
|
Повторите запросы к health API и `consul members`. После очередной проверки экземпляр `app-2` перестанет попадать в выдачу с `passing=true`, хотя агент `consul-server-2` останется участником группы. Сервис может ещё быть зарегистрирован в каталоге: каталог и список здоровых экземпляров имеют разный смысл. При длительном провале проверки настроена автоматическая отмена регистрации.
|
|
|
|
Верните приложение и после проверки снова сравните результаты:
|
|
|
|
```shell
|
|
docker compose start app-2
|
|
```
|
|
|
|
Обработчик `/health` в [коде приложения](app/main.py) просто возвращает `OK`. Он позволяет заметить недоступность HTTP-сервера, но не проверяет выполнение полезной работы или доступность зависимостей. Этот опыт показывает проверку сервиса; для изучения отказов самих агентов потребовался бы другой сценарий.
|
|
|
|
## Связь с маршрутизацией
|
|
|
|
Клиент или балансировщик может использовать сведения о здоровых экземплярах для выбора адреса. В этом стенде балансировщик не настроен, и с [демо Envoy](../envoy-outlier-detection/readme.md) он не соединён.
|
|
|
|
После работы остановите стенд:
|
|
|
|
```shell
|
|
docker compose down
|
|
```
|
|
|
|
Данные Consul сохраняются в каталогах `consul-data-*`, поэтому следующий запуск не обязательно начинается с пустого каталога.
|
|
|
|
Документация: [Health API](https://developer.hashicorp.com/consul/api-docs/health), [gossip и Lifeguard в Consul](https://developer.hashicorp.com/consul/docs/concept/gossip).
|