源碼位址: 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:代碼在前上篇教程的基礎上開發,源碼位址:
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注冊中心高可用和自我保護機制的相關内容。
恭喜你完成了本章的學習,為你鼓掌!如果本文對你有幫助,請幫忙點贊,評論,轉發,這對作者很重要,謝謝。
要掌握SpringCloud更多的用法,請持續關注本系列教程。