源碼地址: https://gitee.com/bingqilinpe...
上篇文章中,經過代碼搭建了Eureka註冊中心和客戶端,是Eureka的簡單應用,在本文中將會講解更多關於Eureka服務端的應用以及原理。git
在使用Eureka的過程當中,有時候會在Eureka服務端的頁面上看到以下的內容:面試
在監控頁面上會看到一行紅字兒,這些紅字兒什麼意思呢?表明着Eureka註冊中心進入了自我保護機制。spring
默認狀況下,若是Eureka Server在必定時間內沒有接受到服務實例的心跳,Eureka將會註銷該實例(默認90秒).可是當網絡分區發生故障時,微服務客戶端和Eureka Server 沒法正常通訊。以上行爲可能變得特別危險了,由於微服務自己是健康的,此時不能註銷該服務實例。segmentfault
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實例會彼此同步信息。測試
Tips:代碼在前上篇教程的基礎上開發,源碼地址:https://gitee.com/bingqilinpe...
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/bingqilinpe...
恭喜你完成了本章的學習,爲你鼓掌!若是本文對你有幫助,請幫忙點贊,評論,轉發,這對做者很重要,謝謝。
要掌握SpringCloud更多的用法,請持續關注本系列教程。
歡迎關注本人公衆號:鹿老師的Java筆記,將在長期更新Java技術圖文教程和視頻教程,Java學習經驗,Java面試經驗以及Java實戰開發經驗。