有两个以下配置的eureka服务器(比如ES1和ES2)。
eureka:
instance:
metadataMap:
instanceId: ${service.contextPath}:${spring.application.instance_id:${random.value}}
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
同步有效但在发布到生产期间,当一台eureka服务器(比如说ES2)被关闭时,另一台eureka服务器(ES1)仍然保留旧的缓存信息,当ES2启动时,它会注册eureka客户端但注销旧客户端没有发生,导致功能区负载均衡器使用陈旧信息。
使用以下配置注册eureka客户端。
{{1}}
为什么旧实例没有从eureka服务器取消注册?因此,我们必须完全关闭并重启我们的基础设施。
答案 0 :(得分:0)
我猜你看到的是尤里卡自我保护功能的结果。简而言之,Eureka服务器在注意到它在最后一分钟收到的预期续订少于80%时会自动停止实例租约到期。当ES1发生故障时,ES2不再接收最初在ES1上注册的客户端的心跳 - 然后可能会激活自我保护模式。
为避免这种情况,您应该使用ES1 和 ES2配置客户端:如果ES1不可用,客户端将自动切换到ES2。为此,只需按如下方式列出两个地址:
eureka:
client:
serviceUrl:
defaultZone: http://ES1:8761/eureka/,http://ES2:8761/eureka/
你也可以禁用自我保护功能 - 但这不是群集中的预期配置 - 所以期待奇怪的行为: - (