Consul от HashiCorp решает задачу, которая в небольшой инфраструктуре обычно закрыта руками — “какой адрес у сервиса X прямо сейчас” и “где лежит этот конфиг, пока он не доехал до всех нод”. Сам Consul — это распределённый каталог сервисов с health-check’ами плюс встроенное KV-хранилище, и оба механизма доступны уже в режиме для локального теста.

Поднять агента для знакомства, без кластера и без прав root:

consul agent -dev

Это единственный сервер-агент в своём собственном datacenter, годится только для теста — HTTP API слушает 127.0.0.1:8500, DNS-интерфейс — порт 8600.

Зарегистрировать сервис — описать его в файле и отдать агенту:

{
  "service": {
    "name": "web",
    "port": 8080,
    "check": { "http": "http://localhost:8080/health", "interval": "10s" }
  }
}
consul services register web.json
consul catalog services   # проверить, что сервис появился в каталоге

Health-check здесь не опция для галочки — именно по нему Consul решает, отдавать ли адрес сервиса остальным через DNS/API, упавшая проверка молча убирает инстанс из выдачи.

KV-хранилище — третий угол той же системы, рядом с discovery, а не отдельный продукт:

consul kv put config/web/timeout 30s
consul kv get config/web/timeout

На этом примере удобно понять, почему Consul часто всплывает рядом с Patroni как DCS — etcd и Consul решают одну и ту же задачу распределённого хранилища с консенсусом, просто с разным API поверх.

#linux #sysadmin #consul