Eureka Server:如何实现高可用性

Neo*_*Neo 26 spring-cloud netflix-eureka

我是春天的新手.我已阅读此文档,它说客户端应用程序必须指定服务URL:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)

但是如果localhost:8761下降怎么办?

Gur*_*thi 36

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/
Run Code Online (Sandbox Code Playgroud)

..和第二个服务器实例如下:

server:
   port: 1112
eureka:
   instance:
      hostname: peer2
   client:
      serviceUrl:
           defaultZone: http://peer1:1111/eureka/
Run Code Online (Sandbox Code Playgroud)

当Eureka服务器实例启动时,它们将相互寻找.所有微服务都会自动注册,所以如果一个服务器发生故障,其他服务器实例将始终存在.在两个Eureka实例上,您将能够看到所有已注册的微服务.像这样,您可以在生产环境中进行扩展并拥有多个服务器实例.

注意:如果您在单个系统上尝试此操作,请不要忘记编辑/ etc/hosts文件:
127.0.0.1 peer1
127.0.0.1 peer2

  • 感谢您的回答。在您的示例中,假设我启动了一个新的微服务并将 serviceUrl 设置为“http://peer1:1111/eureka/”。如果此时peer1恰好宕机,我的微服务将无法启动。我认为应该为客户端(微服务)提供整个“集群”的地址,而不是单个 eureka 实例,这意味着,所有 eureka 实例对客户端来说都应该是单个实例 (2认同)
  • 是的,如果peer1关闭,则微服务将失败,并出现以下异常:`ERROR DiscoveryClient- <service>-无法发送心跳!com.netflix.discovery.shared.transport.TransportException:无法在任何已知服务器上执行请求。“是的,没错,没有为客户端提供单个实例的地址。为了平衡Eureka服务器上的这些命中率,我还看到了负载均衡器黑白微服务和Eureka Server实例。 (2认同)