2015-07-10 80 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

相關問題