【问题标题】:Eureka Server: How to achieve high availabilityEureka Server:如何实现高可用
【发布时间】:2016-11-27 17:48:28
【问题描述】:

我是 Spring Cloud 的新手。我读过this doc,它说客户端应用程序必须指定一个服务网址:

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

但是如果localhost:8761 宕机了怎么办?

【问题讨论】:

    标签: spring-cloud netflix-eureka


    【解决方案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 对等体1
    127.0.0.1 对等体2

    【讨论】:

    • 感谢您的回答。在您的示例中,假设我启动了一个新的微服务并将 serviceUrl 设置为“peer1:1111/eureka”。如果此时peer1恰好宕机,我的微服务将无法启动。我认为应为客户端(微服务)提供整个“集群”的地址,而不是单个 eureka 实例,这意味着,所有 eureka 实例对客户端来说都应该是单个实例
    • 是的,如果 peer1 关闭,微服务将失败,异常如下:ERROR DiscoveryClient-<service>- was unable to send heartbeat! com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server"。是的,对,客户端没有获得单个实例的地址。我有我的最后一个配置,其中我传递了所有服务器实例的逗号分隔值。为了平衡 Eureka 服务器上的这些命中,我还看到了负载均衡器 b/w 微服务和 Eureka 服务器实例。
    • 我们在公司环境中使用负载均衡器来处理 Eureka 对。
    • 您好,仅限一对吗?我可以设置 3 个实例,如果其中一个出现故障,其他两个可以接管吗?谢谢。
    • 不限于一对。您可以设置更多实例,其他人将接管。
    猜你喜欢
    • 2020-06-26
    • 1970-01-01
    • 2015-02-13
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    相关资源
    最近更新 更多