1. 程式人生 > >F版本SpringCloud 5—Eureka叢集和自我保護機制

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

![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151512149-1728990050.png) > 原始碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials ## 前言 上篇文章中,通過程式碼搭建了Eureka註冊中心和客戶端,是Eureka的簡單應用,在本文中將會講解更多關於Eureka服務端的應用以及原理。 ## Eureka 自我保護機制 ### 進入自我保護機制的標誌【重點】 在使用Eureka的過程中,有時候會在Eureka服務端的頁面上看到如下的內容: ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151512897-152435384.png) 在監控頁面上會看到一行紅字兒,這些紅字兒什麼意思呢?代表著Eureka註冊中心進入了自我保護機制。 ### 什麼是自我保護機制【重點】 預設情況下,如果Eureka Server在一定時間內沒有接受到服務例項的心跳,Eureka將會登出該例項(預設90秒).但是當網路分割槽發生故障時,微服務客戶端和Eureka Server 無法正常通訊。以上行為可能變得特別危險了,因為微服務本身是健康的,此時不能登出該服務例項。 Eureka通過自我保護機制來解決這個問題,當Eureka Server在短時間丟失過多的服務例項(可能發生了網路分割槽的故障),那麼Eureka Server進入自我保護模式,一旦進入此模式,Eureka Server將會保護服務登錄檔中的資訊,不再刪除服務登錄檔中的資料(也就是不再登出任何的服務例項),當網路故障恢復後,Eureka Server會自動退出自我保護模式。 綜上,**自我保護模式是一種應對網路故障的安全保護措施**,它的架構哲學是寧可同時保留所有的微服務,也不盲目登出任何健康的微服務,**使用自我保護模式可以讓Eureka,更加健壯,穩定。** > 一句話:大面積出現客戶端失聯的時候,Eureka 註冊中心進入自我保護模式,不登出任何例項 ### 自我保護機制的配置 在Eureka Server中配置關閉自我保護機制 ```properties #關閉自我保護機制 預設開啟 eureka.server.enable-self-preservation=false ``` 如果想及時剔除失效的eureka服務除了關閉自我保護機制外,可以調低eureka的心跳值 ```properties eureka-server服務端 配置檔案中我們新增如下配置 #關閉保護機制,以確保註冊中心將不可用的例項正確剔除 eureka.server.enable-self-preservation=false #(代表是5秒,單位是毫秒,清理失效服務的間隔 ) eureka.server.eviction-interval-timer-in-ms=5000 ``` ```properties 客戶端 配置檔案中我們新增如下配置 # 心跳檢測檢測與續約時間 # 測試時將值設定設定小些,保證服務關閉後註冊中心能及時踢出服務 # 配置說明 #  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** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151514406-917092014.png) **2.修改pom檔案** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151517447-2052768663.png) **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.寫配置檔案** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151521557-149520008.png) **5.修改註冊中心eureka-server-8801的配置檔案** > 註冊中心之間的基本邏輯是:互相註冊 > ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151529273-784197760.png) 此時我們就擁有了一個Eureka註冊中心的叢集 **6.修改所有客戶端的配置,客戶端需要向 註冊中心叢集註冊 所以需要配置所有註冊中心的地址** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151535107-1222454971.png) ### 演示註冊中心叢集的效果 **1.啟動所有的註冊中心和客戶端** **2.檢視Eureka註冊中心管理頁面** 檢視註冊中心 8800 的管理頁面,可以看到客戶端可以正常註冊 ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151537966-1070719053.png) 檢視註冊中心 8801 的管理頁面,可以看到客戶端也可以正常註冊 ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151540949-1252199061.png) **3.關閉一個註冊中心8800,註冊中心8801不受任何影響,整個微服務的叢集也不受任何影響,客戶端可以正常註冊** ## 總結 以上就是Eureka註冊中心高可用和自我保護機制的相關內容。 > 原始碼地址:https://gitee.com/bingqilinpeishenme/Java-Tutorials **恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。** ![](https://img2020.cnblogs.com/other/1003051/202003/1003051-20200331151541730-472720964.png) 要掌握SpringCloud更多的用法,請持續關注本系列教程。 ## 求關注,求點贊,求轉發 > 歡迎關注本人公眾號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視訊教程,Java學習經驗,Java面試經驗以及Java實戰開發