未在所有Eureka实例上注册的微服务 [英] Microservices not registering on all Eureka Instances
问题描述
Spring Boot版本:2.1.6.RELEASE
Spring Cloud版本:Greenwich.SR1
目标是在一个集群中设置两个Eureka服务器实例,并将所有微服务都注册到这两个实例中,以实现HA。目前,我正在运行Ubuntu 18.04的本地计算机上进行测试。
正如官方文档中提到的,我已经设置了Eureka实例的对等感知。启动两个Eureka Server实例时,在Instance-1(端口8080)的仪表板上的Available Replica下显示Instance-2名称,在Instance-2(端口8081)的仪表板上显示Instance-1名称。到目前为止还不错。
我已经将它们作为WAR部署在外部Tomcat服务器上,而不是作为JAR运行。战争名称是"尤里卡命名服务器"。因此我的访问URL变为:http://localhost:8080/eureka-naming-server/eureka和http://localhost:8081/eureka-naming-server/eureka。
我已经使用Apache2和mod_jk设置了一个负载均衡器。因此,我可以使用Apache URL AShttp://localhost:80/eureka-naming-server/eureka访问它们,而不是使用它们各自的URL(即http://localhost:8080/eureka-naming-server/eureka、http://localhost:8081/eureka-naming-server/eureka)访问它们,我可以看到负载平衡正常进行。
现在的问题是,一旦我在微服务中将Eureka URL指定为http://localhost:80/eureka-naming-server/eureka,它就只在一个实例上注册,这取决于负载平衡器重定向请求的是哪个Eureka实例。但是,即使设置了对等感知,微服务也不会在另一个eureka实例上注册。在Eureak服务器中,我使用以下依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
尤里卡-1道具:
spring:
application:
name: eureka-naming-server
jmx:
default-domain: eureka-naming-server
eureka:
client:
service-url:
defaultZone: http://eureka-server-2:8081/eureka-naming-server/eureka
#register-with-eureka: false
#fetch-registry: false
instance:
hostname: eureka-server-1
尤里卡-2道具:
spring:
application:
name: eureka-naming-server
jmx:
default-domain: eureka-naming-server
eureka:
client:
service-url:
defaultZone: http://eureka-server-1:8080/eureka-naming-server/eureka
#register-with-eureka: false
#fetch-registry: false
instance:
hostname: eureka-server-2
在微服务中,我使用以下依赖项:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
微服务道具:
eureka:
instance:
metadata-map:
configPath: /config
client:
service-url:
defaultZone: http://localhost/eureka-naming-server/eureka
在计算机的/etc/hosts文件中,我将其设置为:
127.0.0.1 eureka-server-1
127.0.0.1 eureka-server-2
我可以在日志中看到正在注册的Eureka实例:
WARN 13748 --- [nio-8009-exec-3] Registered instance CONFIG-SERVER/192.168.1.16:config-server:8888 with status UP (replication=false)
另一个未注册的Eureka实例在由于负载均衡器接收到心跳时,在日志中显示如下:
WARN 13748 --- [nio-8009-exec-3] c.n.e.registry.AbstractInstanceRegistry : DS: Registry: lease doesn't exist, registering resource: CONFIG-SERVER - 192.168.1.16:config-server:8888
2019-12-26 19:00:34.995 WARN 13748 --- [nio-8009-exec-3] c.n.eureka.resources.InstanceResource : Not Found (Renew): CONFIG-SERVER - 192.168.1.16:config-server:8888
Eureka-1仪表盘
Eureka-2仪表盘
我已经尝试了here和here提到的建议。但似乎什么都不管用。
那么我在这里会遗漏什么呢?
推荐答案
可能还需要检查您的EUREKA服务器的安全配置。如果您启用了Spring Boot安全性,则需要确保在配置的defaultZone部分包含相应的用户名/密码。
即在您的eureka server1配置中:eureka.client.serviceUrl.defaultZone=http://:@eureka-server-2:8761/eureka(Eureka服务器2配置的VISA反之亦然)
我之所以提到这一点,只是因为我在该配置值中遗漏了我自己的用户名/密码值,而且它没有在我所有的Eureka实例上注册我的微服务。进行此更改后,工作情况与我预期的一致。这篇关于未在所有Eureka实例上注册的微服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!