Ank*_*sal 5 spring spring-cloud netflix-eureka spring-cloud-netflix
我有一台 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)
Run Code Online (Sandbox Code Playgroud)
a) 它们是什么意思?我的意思是每个客户出现两次
b) 更新阈值:5,更新(最后分钟):8,为什么更新最后分钟是 8,它应该是 4?由于只有两个客户,每个客户每分钟 2 次节拍
c) 当我启动第3个服务D(CLient5)时,更新阈值是6而不是7,这是为什么?
d) Eureka Peers 如何以及何时相互传递信息增量信息?例如,当前有两个 eureka 服务器(对等体)和两个客户端(每个客户端 1 个实例)。现在,当新客户端注册时,它会向两个对等点发送节拍还是仅向一个对等点发送节拍?其中之一,其他同行如何知道?
a)这意味着 Eureka 正在向自身复制心跳。这很可能是由于配置错误造成的。如果您查看 Eureka 的仪表板,您的主机可能会出现在unavailable-replicas. 要解决此问题,Eureka 实例名称需要与 中使用的主机名相同defaultZone。因此,对于您的独立 Eureka 服务器,配置应该如下所示
eureka:
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://localhost:8080/eureka/
instance:
hostname: localhost
Run Code Online (Sandbox Code Playgroud)
eureka.instance.hostname与 中的主机名匹配至关重要eureka.client.serviceUrl.defaultZone。一旦你配置了这个,它unavailable-replicas就会消失。
b)修复 a) 后,此问题应该得到修复,并且您应该会看到 4 次续订。
c)在这里引用解释
数学原理是这样的:如果有两个客户端注册到一个 Eureka 实例,每个客户端每 30 秒发送一次心跳,则该实例应该在一分钟内收到 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
Run Code Online (Sandbox Code Playgroud)
如果isReplication为 true,则表示更新是从对等服务器节点发送的。如果为 false,则意味着实例本身已收到续订。
| 归档时间: |
|
| 查看次数: |
1130 次 |
| 最近记录: |