2015-07-10 93 views
0

有两个尤里卡服务器(称为ES1和ES2)具有以下配置。尤里卡服务器高速缓存刷新

spring: 
    profiles: production 

server: 
    port: 8761  

eureka: 
    client: 
    registerWithEureka: true 
    fetchRegistry: true 
    serviceUrl: 
     defaultZone: http://${eureka.peer.hostname}:8761/eureka/ 

的同步工程,但释放,当一个尤里卡服务器(说ES2)被放倒对方尤里卡服务器(ES1)在生产过程中依然保持着旧的缓存信息,并在ES2开始回到它注册尤里卡客户但不会发生旧客户端的注销,导致功能区负载均衡器使用过时的信息。

用于在配置下注册尤里卡客户端。

eureka: 
    instance: 
    metadataMap: 
     instanceId: ${service.contextPath}:${spring.application.instance_id:${random.value}} 
    client: 
    serviceUrl: 
     defaultZone: http://localhost:8761/eureka/ 

为什么旧实例不能从尤里卡服务器上取消注册?因此,我们必须完成关闭和重启我们的基础设施。

+0

希望这有助于 - https://github.com/spring-cloud/spring-cloud-netflix/issues/373#issuecomment-110331739 –

回答

0

我想你看到的是尤里卡的自我保护功能的结果。简而言之,当Eureka服务器发现它在最后一分钟内收到的预计续订少于80%时,将自动停止到期的实例租约。当ES1出现故障时,ES2不再接收最初在ES1注册的客户端的心跳信号 - 这样可能会激活自我保护模式。

为避免这种情况,您应该使用ES1 ES2配置您的客户端:如果ES1不可用,客户端将自动切换到ES2。对于这一点,简单地列出两个地址如下:

eureka: 
    client: 
    serviceUrl: 
     defaultZone: http://ES1:8761/eureka/,http://ES2:8761/eureka/ 

您还可以禁用自我保护功能 - 但这并不是预期的配置时,在集群 - 所以我们期待奇怪的行为:-(

+0

@Vibhaanshu有关于此的任何消息吗?上述分析与您的情况相符吗? –

+0

对不起,我迟到了。注意到遵循的部署策略是不正确的,因为这个peer eureka服务器有过时的服务实例id,所以我们没有让服务从eureka正确注销。有一台服务器上的服务注册在同一台服务器上运行的尤里卡服务器,并在该服务器上为另一台服务器上的尤里卡服务器注册。同步发生在两个尤里卡服务器之间。将测试您的方法,并在定义策略的过程中部署不同版本的服务,而不会停机。 – Vibhaanshu

相关问题