Eureka Server: как добиться высокой доступности

Я новичок в весеннем облаке. Я прочитал этот документ, и в нем говорится, что клиент приложение должно указать URL службы:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

Но что, если localhost:8761 выйдет из строя?


person Neo    schedule 24.07.2016    source источник


Ответы (1)


Eureka Discovery Server следует использовать в режиме конфигурации Peer-Aware в производственных установках. Проверьте: http://cloud.spring.io/spring-cloud-static/spring-cloud.html#_peer_awareness

Например, ваш первый экземпляр сервера eureka будет иметь такую ​​конфигурацию:

server:
   port: 1111
eureka:
   instance:
      hostname: peer1
   client:
      serviceUrl:
           defaultZone: http://peer2:1112/eureka/

..и второй экземпляр сервера, например:

server:
   port: 1112
eureka:
   instance:
      hostname: peer2
   client:
      serviceUrl:
           defaultZone: http://peer1:1111/eureka/

Когда экземпляры сервера Eureka загрузятся, они будут искать друг друга. Все микросервисы будут регистрироваться в них автоматически, поэтому, если один из них выйдет из строя, другой экземпляр сервера всегда будет там. На обоих экземплярах Eureka вы сможете увидеть все зарегистрированные микросервисы. Таким образом, вы можете масштабировать и иметь несколько экземпляров сервера в производственной среде.

Примечание. Если вы пытаетесь сделать это на одной системе, не забудьте отредактировать файл /etc/hosts:
127.0.0.1 peer1
127.0.0.1 peer2

person Gurneet Sethi    schedule 24.07.2016
comment
Спасибо за Ваш ответ. В вашем примере предположим, что я запускаю новую микрослужбу и устанавливаю для serviceUrl значение 'peer1:1111/eureka'. . Если в это время произойдет отказ узла peer1, мой микросервис не запустится. Я думаю, что клиентам (микорсервисам) следует давать адрес всего «кластера» вместо одного экземпляра eureka, что означает, что все экземпляры eureka должны казаться клиентам одним экземпляром. - person Neo; 24.07.2016
comment
Да, если узел peer1 не работает, микросервис завершится ошибкой, за исключением следующего вида: ERROR DiscoveryClient-<service>- was unable to send heartbeat! com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server". Да, верно, клиентам не дается адрес единственного экземпляра. У меня была последняя конфигурация, в которой я передал разделенные запятыми значения всех экземпляров сервера. Чтобы сбалансировать эти обращения к серверам Eureka, я также видел черно-белые балансировщики нагрузки, микросервисы и экземпляры Eureka Server. - person Gurneet Sethi; 24.07.2016
comment
Мы делаем это в среде нашей компании, используя балансировщик нагрузки, чтобы опережать пару Eureka. - person Andy Brown; 22.06.2017
comment
Привет, это только пара? Могу ли я настроить 3 экземпляра, и если один из них выйдет из строя, два других смогут взять его на себя? Спасибо. - person Clement.Xu; 23.10.2017
comment
Это не ограничивается парой. Вы можете настроить больше экземпляров, и другие возьмут на себя управление. - person Gurneet Sethi; 23.10.2017
comment
Как это работает в случае zuul и eureka. можно использовать балансировку нагрузки zuul, подключившись к кластеру eureka. - person vijay b; 17.06.2019
comment
@AndyBrown, поможет ли балансировщик нагрузки перед парой эврика. (1) клиент будет разговаривать только с одним экземпляром eureka при запуске и регистрироваться в нем. Затем сервер eureka реплицирует эту информацию другим узлам. (2) как насчет сердцебиения, клиент, отправляющий сердцебиение на какой-либо сервер eureka, делает трюк, сообщая кластеру eureka о том, что он жив - person samshers; 21.08.2019
comment
@самшерс. Да, два сервера Eureka реплицируют регистрацию и продление (пульс) между собой. - person Andy Brown; 21.08.2019
comment
@AndyBrown, это замечательно. Если для клиентских служб я предоставляю только один экземпляр Eureka (пока существует кластер Eureka), есть ли у клиента способ узнать о кластере и добавить одноранговые узлы Eureka в список экземпляров Eureka. Или иначе, может ли сервер Eureka сообщить клиенту о кластере Eureka. - person samshers; 21.08.2019
comment
@samshers См. этот ответ, чтобы узнать, как сделать вашу клиентскую сторону устойчивой без балансировщика нагрузки. В основном перечислите все ваши серверы в конфигурации клиента, разделенные запятыми. Все ваши клиенты попадут в первый, если он вверх. Первый сервер будет реплицироваться на другой. Если затем первый сервер умирает, то тактовые импульсы клиента должны переключиться на второй, который из-за репликации уже знает о клиенте. Когда сервер 1 вернется в исходное состояние, он автоматически повторно синхронизируется с сервером №2. Вы можете рандомизировать порядок списка, разделенного запятыми, чтобы разделить нагрузку. - person Andy Brown; 22.08.2019
comment
Когда каждый сервер eureka указывает на другой (другие), как избежать исключения подключения ко второму одноранговому узлу, когда первый запущен, а второй еще не запущен. - person Sanjiv Jivan; 10.11.2019
comment
@AndyBrown, не могли бы вы предоставить конфигурации, которые вы сделали при использовании балансировщика нагрузки. Я пытаюсь сделать то же самое, но микросервисы не зарегистрированы на всех экземплярах Eureka. Вы можете обратиться к моей настройке здесь - person Priyam; 26.12.2019