【问题标题】:Eureka Renews threshold & Renews (last min)尤里卡续订阈值和续订(最后一分钟)
【发布时间】:2018-07-04 09:35:43
【问题描述】:

我有一个 Eureka Server A 和两个客户端实例 B(Client3) 和 C(Client4)

我从Eureka Server得到了日志,如下:

2018-01-25 12:56:27.828  INFO 7145 --- [nio-8765-exec-2] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT3/client3:bb488bb73fd313321e393915f746bfe5 with status UP (replication=false)
2018-01-25 12:56:28.417  INFO 7145 --- [nio-8765-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT3/client3:bb488bb73fd313321e393915f746bfe5 with status UP (replication=true)
2018-01-25 12:56:33.028  INFO 7145 --- [nio-8765-exec-3] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT4/client4:9fcbf4ed26162ee12c4c4b85774c39b1 with status UP (replication=false)
2018-01-25 12:56:33.542  INFO 7145 --- [nio-8765-exec-8] c.n.e.registry.AbstractInstanceRegistry  : Registered instance CLIENT4/client4:9fcbf4ed26162ee12c4c4b85774c39b1 with status UP (replication=true)

a) 它们是什么意思?我的意思是每个客户出现两次

b) Renews threshold : 5 , Renews (last min) : 8, 为什么 renew last min 是 8 ,应该是 4?由于只有两个客户端,每个客户端每分钟 2 次心跳

c) 当我启动 3rd Service D(CLient5) 时,renew threshold 是 6 而不是 7,这是为什么呢?

d) Eureka Peers 如何将信息增量信息传递给彼此以及何时?例如,目前有两个 eureka 服务器(对等)和两个客户端(每个 1 个实例)。现在当一个新客户端注册时,它会向两个对等方发送节拍还是只向一个对等方发送节拍?一方面,其他对等方怎么知道?

【问题讨论】:

    标签: spring spring-cloud netflix-eureka spring-cloud-netflix


    【解决方案1】:

    a) 这意味着 Eureka 正在向自身复制心跳。这很可能是由于配置错误。如果您查看 Eureka 的仪表板,您的主机可能在unavailable-replicas 列表中。为了解决这个问题,Eureka 实例名称需要与defaultZone 中使用的主机名相同。因此,对于您的独立 Eureka 服务器,配置应如下所示

    eureka:
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://localhost:8080/eureka/
      instance:
        hostname: localhost
    

    eureka.instance.hostnameeureka.client.serviceUrl.defaultZone 中的主机名匹配至关重要。配置完成后,unavailable-replicas 应该会消失。

    b) 修复 a) 后,此问题应该会得到修复,您应该会看到 4 次续订。

    c) 去引用解释here

    数学原理是这样的:如果有两个客户注册到一个 Eureka实例,每一个每30s发送一次心跳,该实例 应该在一分钟内收到 4 次心跳。 Spring 增加了一个较低的最小值 1到那个(可配置 eureka.instance.registry.expectedNumberOfRenewsPerMin),所以 实例预计每分钟接收 5 次心跳。这时候 乘以 0.85(可配置为 eureka.server.renewalPercentThreshold) 并四舍五入到下一个 整数,这让我们再次回到 5。如果任何时候少 Eureka 在 15 分钟内收到超过 5 个心跳(可由 eureka.server.renewalThresholdUpdateIntervalMs),它进入 自我保存模式并停止过期已注册 实例。

    因此,在您的情况下,对于两个实例:(2 * 2 + 1) * 0.85 = 4.25,四舍五入为 5。对于三个实例,(2 * 3 + 1) * 0.85 = 5.95 四舍五入为 6。

    d) Eureka 客户端仅向一个服务器实例发送心跳。该实例将这些心跳传递给其他实例,使它们保持更新。如果你查看 Eureka 服务器日志,你可以找到这样的日志

    InstanceRegistry: renew SERVICEA serverId localhost:serviceA:12345, isReplication {}true
    

    如果isReplication 为真,这意味着更新是从对等服务器节点发送的。如果为 false,则表示实例本身收到了续订。

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 2016-12-26
      • 2020-04-26
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 2013-10-18
      • 1970-01-01
      • 2015-02-27
      相关资源
      最近更新 更多