首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未在所有Eureka实例上注册的微服务

未在所有Eureka实例上注册的微服务
EN

Stack Overflow用户
提问于 2019-12-26 22:25:29
回答 2查看 1.2K关注 0票数 1

Spring Boot版本:2.1.6版本

Spring Cloud版本: Greenwich.SR1

目标是在集群中设置两个Eureka服务器实例,并将所有微服务都注册到这两个实例中,以实现HA。目前,我正在运行Ubuntu 18.04的本地机器上测试它。

因此,正如官方文档中所提到的,我已经设置了Eureka实例的对等感知。启动两个Eureka Server实例时,在Instance-1 (端口8080)的仪表板上的available replicas下显示Instance-2名称,在Instance-2(端口8081)的仪表板上显示Instance-1名称。到目前一切尚好。

我已经将它们作为war部署在外部tomcat服务器上,而不是作为jar运行。War名称是"eureka-naming-server“。所以我的访问地址变成了:http://localhost:8080/eureka-naming-server/eurekahttp://localhost:8081/eureka-naming-server/eureka

我已经使用Apache2和mod_jk设置了一个负载均衡器。因此,我可以使用Apache URL作为http://localhost:80/eureka-naming-server/eureka来访问它们,而不是使用它们各自的URL,即http://localhost:8080/eureka-naming-server/eurekahttp://localhost:8081/eureka-naming-server/eureka,我可以看到负载平衡正常发生。

现在的问题是,一旦我在微服务中将Eureka URL作为http://localhost:80/eureka-naming-server/eureka,它只在一个实例上注册,这取决于负载均衡器重定向了请求的Eureka实例。但是,即使设置了对等感知,微服务也不会在另一个eureka实例上注册。

在Eureak服务器中,我使用以下依赖项:

代码语言:javascript
运行
复制
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

尤里卡-1号道具:

代码语言:javascript
运行
复制
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号道具:

代码语言:javascript
运行
复制
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

在微服务中,我使用了以下依赖项:

代码语言:javascript
运行
复制
<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>

微服务属性:

代码语言:javascript
运行
复制
eureka:
  instance:
    metadata-map:
      configPath: /config
  client:
    service-url:
      defaultZone: http://localhost/eureka-naming-server/eureka

在机器的/etc/hosts文件中,我将其设置为:

代码语言:javascript
运行
复制
127.0.0.1 eureka-server-1

127.0.0.1 eureka-server-2

我可以在日志中看到它正在注册的eureka实例:

代码语言:javascript
运行
复制
WARN 13748 --- [nio-8009-exec-3] Registered instance CONFIG-SERVER/192.168.1.16:config-server:8888 with status UP (replication=false)

另一个未注册的Eureka实例,当它由于负载均衡器而收到心跳时,会在日志中显示以下内容:

代码语言:javascript
运行
复制
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仪表盘

我已经尝试过herehere的建议了。但似乎什么都不起作用。

那么,我还能遗漏什么呢?

EN

回答 2

Stack Overflow用户

发布于 2021-09-03 13:14:13

问题:

代码语言:javascript
运行
复制
spring:
  application:
    name: eureka-naming-server

您为应用程序添加了相同的名称,因此它显示为如下所示。

您需要将其更改为,

尤里卡-1号道具:

代码语言:javascript
运行
复制
spring:
  application:
    name: eureka-naming-server-1

尤里卡-2号道具:

代码语言:javascript
运行
复制
spring:
  application:
    name: eureka-naming-server-2
票数 0
EN

Stack Overflow用户

发布于 2021-10-18 17:37:51

检查您的eureka服务器的安全配置可能也是值得的。如果您启用了spring boot安全性,则需要确保在配置的defaultZone部分中包含相应的用户名/密码。

例如,在您的eureka server1配置中: eureka.client.serviceUrl.defaultZone=http://:@eureka-server-2:8761/eureka

( eureka服务器2配置的visa反之亦然)

我之所以提到这一点,是因为我在该配置值中遗漏了我自己的用户名/密码值,并且它没有在我所有的eureka实例上注册我的微服务。在做了这个更改之后,它就像我所期望的那样工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59489749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档