2015-03-20 7 views
1

Я немного играю с Докером и Консулом, и у меня есть несколько вопросов относительно сопоставления агентских сервисов, особенно в среде докеров. Предположим, у меня есть сервисное имя «myGreatService», являющееся простым приложением webhostjs helloworld, инкапсулированным с изображением докеров с именем «myGreatServiceImage». Из документов Consul я понял, что когда вы регистрируете службу (через HTTP или файл определения службы), чем служба должна быть «подключена» к узлу agent/consul (проводной узел можно получить через/v1/catalog/service /) , Поэтому, если узел консула отключен (или проверка работоспособности узла решила, что он не работает), все службы, «подключенные» к этому консульному узлу, будут автоматически отмечены как «вниз». Я прав ?Консул: сколько агентов для обслуживания

Если я запустил изображение GreatServiceImage несколько раз на одном хосте через докер (в результате нескольких экземпляров службы myGreatService) , сколько агентов я должен запустить? Один хост, управляющий всеми контейнерами (все экземпляры службы) на этом хосте? Или, может быть, отдельный агент для каждого контейнера (экземпляр службы)?

+0

В производстве рекомендуется запустить консул в режиме кластера (3-5 серверов), поэтому, когда a (consul), кластер все еще доступен, а описания служб читаемы. это распределенная система, поэтому в этой настройке все узлы имеют все данные, поэтому ваша служба не «подключена» к определенному консульному узлу. – milan

ответ

5

Если проверка здоровья для службы не работает, то услуга будет отмечена как вниз и не будет отображаться, если вы делаете запрос DNS для этой службы

dig @localhost -p 8500 apache.service.consul 

Если вы делаете вызов API-интерфейс вы увидите, что служба по-прежнему указана. Это связано с тем, что служба не удаляется, она просто помечена как вниз. Если вы сделаете вызов api для проверки работоспособности этой службы, это будет показано как вниз.

curl localhost/v1/catalog/service/apache 
curl localhost/v1/health/service/apache 

Вы можете добавить флаг «Пропускать» к этому последнему звонку, чтобы получить только полезные услуги. (Так же, как запрос DNS)

curl localhost/v1/health/service/apache?passing 

Если консул агент на хосте не работает, то все службы, работающие на этом хосте не будут отображаться, если вы запрашиваете консул услуг. (либо через запрос DNS, либо через api).

Что касается количества агентов, которые должны быть запущены: Запустите один консул-агент на хост. Пусть ваши службы регистрируются через api вашего местного агента-консула. (или предварительно сконфигурируйте все ваши сервисы в конфигурационных файлах, но я рекомендую вам сделать этот динамический процесс самостоятельной регистрации).

+0

Для уточнения: что вы подразумеваете под «агентом/узлом на хосте». Вы имели в виду, что агент/узел, который «зарегистрировал» службу (и вы можете видеть точный ответ от/v1/catalog/service/call) терпит неудачу, чем любые службы, подключенные к этому агенту/узлу, просто исчезают из реестра consul (не видно из API и DNS)? Можете ли вы подтвердить, pls – user62058

+0

Агент/узел на хосте я имел в виду агента консула, запущенного на хосте. Если вы зарегистрируете услугу у определенного агента консула и этот агент опустится, вы не сможете получить эту услугу, используя либо consul api, либо dns. – Brrrr

+0

Отлично. Thx для уточнения. Поскольку я гораздо более бегущий консул в Docker, я всегда нуждаюсь в явном объяснении, что означает «выполняющий агент на хосте». – user62058

Смежные вопросы