F版本SpringCloud 5—Eureka集群和自我保護機制

源碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

前言

上篇文章中,通過程式碼搭建了Eureka註冊中心和客戶端,是Eureka的簡單應用,在本文中將會講解更多關於Eureka服務端的應用以及原理。

Eureka 自我保護機制

進入自我保護機制的標誌【重點】

在使用Eureka的過程中,有時候會在Eureka服務端的頁面上看到如下的內容:

在監控頁面上會看到一行紅字兒,這些紅字兒什麼意思呢?代表著Eureka註冊中心進入了自我保護機制。

什麼是自我保護機制【重點】

默認情況下,如果Eureka Server在一定時間內沒有接受到服務實例的心跳,Eureka將會註銷該實例(默認90秒).但是當網路分區發生故障時,微服務客戶端和Eureka Server 無法正常通訊。以上行為可能變得特別危險了,因為微服務本身是健康的,此時不能註銷該服務實例。

Eureka通過自我保護機制來解決這個問題,當Eureka Server在短時間丟失過多的服務實例(可能發生了網路分區的故障),那麼Eureka Server進入自我保護模式,一旦進入此模式,Eureka Server將會保護服務註冊表中的資訊,不再刪除服務註冊表中的數據(也就是不再註銷任何的服務實例),當網路故障恢復後,Eureka Server會自動退出自我保護模式。

綜上,自我保護模式是一種應對網路故障的安全保護措施,它的架構哲學是寧可同時保留所有的微服務,也不盲目註銷任何健康的微服務,使用自我保護模式可以讓Eureka,更加健壯,穩定。

一句話:大面積出現客戶端失聯的時候,Eureka 註冊中心進入自我保護模式,不註銷任何實例

自我保護機制的配置

在Eureka Server中配置關閉自我保護機制

#關閉自我保護機制  默認開啟  eureka.server.enable-self-preservation=false  

如果想及時剔除失效的eureka服務除了關閉自我保護機制外,可以調低eureka的心跳值

eureka-server服務端  配置文件中我們添加如下配置    #關閉保護機制,以確保註冊中心將不可用的實例正確剔除  eureka.server.enable-self-preservation=false  #(代表是5秒,單位是毫秒,清理失效服務的間隔 )  eureka.server.eviction-interval-timer-in-ms=5000    
客戶端  配置文件中我們添加如下配置    # 心跳檢測檢測與續約時間  # 測試時將值設置設置小些,保證服務關閉後註冊中心能及時踢出服務  # 配置說明  #  lease-renewal-interval-in-seconds 每間隔10s,向服務端發送一次心跳,證明自己依然」存活「  #  lease-expiration-duration-in-seconds  告訴服務端,如果我20s之內沒有給你發心跳,就代表我「死」了,將我踢出掉。  eureka.instance.lease-renewal-interval-in-seconds=10  eureka.instance.lease-expiration-duration-in-seconds=20  

註冊中心高可用「註冊中心集群」

註冊中心集群 防止單點故障

Eureka可以通過運行多個實例並互相註冊實現高可用部署,Eureka Server實例會彼此同步資訊。

創建並配置Eureka集群

Tips:程式碼在前上篇教程的基礎上開發,源碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

1.創建第二個Eureka服務端 eureka-server-8800

2.修改pom文件

3.創建並修改啟動類

package com.lby;    import org.springframework.boot.SpringApplication;  import org.springframework.boot.autoconfigure.SpringBootApplication;  import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;    /**   * @author luxiaoyang   * @create 2020-03-30-20:36   */  @EnableEurekaServer  @SpringBootApplication  public class EurekaServer8800 {      public static void main(String[] args) {          SpringApplication.run(EurekaServer8800.class,args);      }  }    

4.寫配置文件

5.修改註冊中心eureka-server-8801的配置文件

註冊中心之間的基本邏輯是:互相註冊

此時我們就擁有了一個Eureka註冊中心的集群

6.修改所有客戶端的配置,客戶端需要向 註冊中心集群註冊 所以需要配置所有註冊中心的地址

演示註冊中心集群的效果

1.啟動所有的註冊中心和客戶端

2.查看Eureka註冊中心管理頁面

查看註冊中心 8800 的管理頁面,可以看到客戶端可以正常註冊

查看註冊中心 8801 的管理頁面,可以看到客戶端也可以正常註冊

3.關閉一個註冊中心8800,註冊中心8801不受任何影響,整個微服務的集群也不受任何影響,客戶端可以正常註冊

總結

以上就是Eureka註冊中心高可用和自我保護機制的相關內容。

源碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials

恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。

要掌握SpringCloud更多的用法,請持續關注本系列教程。