Приложение Spring boot регистрирует один и тот же экземпляр несколько раз в кластере consul

#spring #spring-boot #consul #service-discovery #spring-cloud-consul

#весна #пружинный ботинок #консул #обнаружение службы #spring-cloud-consul

Вопрос:

Я пытаюсь зарегистрировать приложение spring boot в кластере consul.

  1. У меня есть 3 узла consul cluster 1 master 2 агента.
  2. У меня есть балансировщик нагрузки перед 2 агентами консула, так что это ХА.
  3. В моем приложении.yml. Я прошу службы присоединиться через балансировщик нагрузки
 spring
  cloud:
    consul:
      enabled: true
      port: loadbalancer_port
      host: http://loadbalancer
      discovery:
        instance-id: ${info.app.environment}:${spring.application.name}
        tags:
          - ${spring.profiles.active}
 
  1. Теперь, когда моя служба перезапускается, она создает дублирующуюся запись в consul.
  2. Я так и понял, потому что он регистрируется в 2 разных агентах.

Означает ли это, что я не могу иметь HA consul с loadbalancer? или я должен попросить службы зарегистрироваться для определенных агентов без балансировки нагрузки?

Пожалуйста, помогите!!

Ответ №1:

Consul предназначен для развертывания клиентского агента Consul на каждом сервере в вашем центре обработки данных (см. Справочную архитектуру Consul). Вместо централизованной регистрации служб службы, запущенные на компьютере, регистрируются локальным/совместно расположенным агентом Consul. Затем агенты отправляют список зарегистрированных на них сервисов на серверы Consul, которые затем объединяют эту информацию от каждого агента для формирования каталога сервисов. Каталог поддерживает высокоуровневое представление кластера, включая то, какие службы доступны, какие узлы запускают эти службы, информацию о работоспособности и т.д.

TLDR; Удалите балансировщик нагрузки и зарегистрируйте службы непосредственно у агентов, чтобы избежать этой проблемы, когда регистрации служб дублируются на разных хостах.

Комментарии:

1. У меня также возникает та же проблема с несколькими регистрациями одной и той же службы с одного и того же сервера. Мы регистрируемся на локальном хосте, а не на consul-балансировщике нагрузки. при выполнении kill -9 <pid> или перезапуске ядра происходит многократная регистрация. В чем может быть проблема? как это можно решить?

2. Вы видите несколько регистраций одной и той же службы для агента с разными идентификаторами службы или с одним и тем же идентификатором службы? Следующая команда предоставит сокращенный список служб, зарегистрированных в агенте. curl --silent localhost:8500/v1/agent/services | jq '.[] | {ID: .ID, Service: .Service, Address: .Address, Port: .Port}'

3. Это одна и та же служба, но разные идентификаторы службы. Когда приложение запускается после 1. ядро перезапускается по какой-либо причине или 2. когда мы убиваем -9 <pid> и затем запускаем службу, в Consul регистрируются как старый идентификатор службы, так и новый идентификатор службы. Это приводит к появлению нескольких записей в HAProxy.

4. есть ли решение этой проблемы?