Сервисы когда-нибудь регистрируются на eureka как localhost.Эврика репликация - PullRequest
0 голосов
/ 17 декабря 2018

Введение

Так что в целом все работает нормально.Но я замечаю, что иногда после перезапуска некоторые из наших сервисов регистрируются как localhost.

Это приводит к тому, что администратор весенней загрузки сходит с ума, и начинает спамить нас, что сервисы не работают.

Итак, мы начинаем получатьследующие электронные письма:

SEQUENCE-SERVICE (52c98f2235a2) is OFFLINE 
Instance 52c98f2235a2 changed status from OFFLINE to OFFLINE 
Status Details
exception
io.netty.channel.AbstractChannel$AnnotatedConnectException
message
Connection refused: no further information: localhost/127.0.0.1:8007
Registration
Service Url http://localhost:8007/ 

Health Url  http://localhost:8007/sequence-service/v1/actuator/health 

Management Url  http://localhost:8007/actuator 

Инфраструктура

У нас есть три сервера.Итак, у нас есть два сервера, на которых запущены по одному eureka каждый, а также на них работают микросервисы.

У нас есть третий сервер, на котором запущены метрики, и администратор весенней загрузки.

Конфигурация Eurekaв основном:

Eureka-0

server.port=7995
eureka.instance.hostname=prod
eureka.instance.appname= discovery-service
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://admin:admin@prod1:7995/eureka/


spring.application.name = discovery-service
security.user.name=admin
security.user.password=admin
spring.security.user.name=admin
spring.security.user.password=admin

endpoints.health.sensitive=false
management.endpoints.web.exposure.include=info, health


spring.profiles.active=prod,mbakTest

eureka.instance.metadata-map.user.name=${security.user.name}
eureka.instance.metadata-map.user.password=${security.user.password}

Eureka-1

server.port=7995
eureka.instance.hostname=prod1
eureka.instance.appname= discovery-service
eureka.client.registerWithEureka=true
eureka.client.fetchRegistry=true
eureka.client.serviceUrl.defaultZone=http://admin:admin@prod:7995/eureka/


spring.application.name = discovery-service
security.user.name=admin
security.user.password=admin
spring.security.user.name=admin
spring.security.user.password=admin

eureka.instance.metadata-map.user.name=${security.user.name}
eureka.instance.metadata-map.user.password=${security.user.password}

Sequence-Service

#Eureka configuration
eureka.client.enabled=true
eureka.client.healthcheck.enabled=true
eureka.client.registerWithEureka=false
eureka.client.fetchRegistry=true
eureka.instance.leaseRenewalIntervalInSeconds=15
eureka.instance.leaseExpirationDurationInSeconds=30
    eureka.client.serviceUrl.defaultZone=${EUREKA_SERVICE_URL:http://admin:admin@prod:7995/eureka/,http://admin:admin@prod1:7995}/eureka/

Вопросы

Итак, у меня два вопроса

1) Так что я не понимаю, почему иногда все хорошо, а иногда мыПолучите письма от Spring-boot-admin, сообщающие нам, что сервис не работает.Но сервис не работает - он зарегистрирован на localhost.Когда мы перезапускаем его, все в порядке.Обычно это происходит после перезапуска.

2) Является ли эта конфигурация правильной и надежной?Я думаю, что если один eureka или сервер выйдет из строя, другой займет его место.

1 Ответ

0 голосов
/ 27 июня 2019

Решение, которое я в итоге использовал, состояло в том, чтобы переключиться на IP-адрес вместо имени хоста.

У меня есть подозрение, что когда:

  • микросервис работает на том же сервере, что и eureka&
  • eureka.instance.preferIpAddress = false

Микросервис может регистрироваться как hostname = localhost.

Установив eureka.instance.preferIpAddress=true, теперь мои микросервисы всегда регистрируются наих IP-адреса.До сих пор это всегда был публичный IP-адрес.

...