Sentinel安裝使用和配置,sentinel-dashboard安裝使用和配置
Sentinel安裝使用和配置,sentinel-dashboard安裝使用和配置
================================
©Copyright 蕃薯耀 2021-04-01
https://www.cnblogs.com/fanshuyao/
一、Sentinel概述
隨著微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量為切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。
Sentinel 具有以下特徵:
豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的範圍)、訊息削峰填谷、叢集流量控制、實時熔斷下游不可用應用等。
完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制檯中看到接入應用的單臺機器秒級資料,甚至 500 臺以下規模的叢集的彙總執行情況。
廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模組,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。
完善的 SPI 擴充套件點:Sentinel 提供簡單易用、完善的 SPI 擴充套件介面。您可以通過實現擴充套件介面來快速地定製邏輯。例如定製規則管理、適配動態資料來源等。
Sentinel 分為兩個部分:
核心庫(Java 客戶端)不依賴任何框架/庫,能夠運行於所有 Java 執行時環境,同時對 Dubbo / Spring Cloud 等框架也有較好的支援。
控制檯(Dashboard)基於 Spring Boot 開發,打包後可以直接執行,不需要額外的 Tomcat 等應用容器。
在限制的手段上,Sentinel 和 Hystrix 採取了完全不一樣的方法。
Hystrix 通過 執行緒池隔離 的方式,來對依賴(在 Sentinel 的概念中對應 資源)進行了隔離。這樣做的好處是資源和資源之間做到了最徹底的隔離。缺點是除了增加了執行緒切換的成本(過多的執行緒池導致執行緒數目過多),還需要預先給各個資源做執行緒池大小的分配。
Sentinel 對這個問題採取了兩種手段:
通過併發執行緒數進行限制
和資源池隔離的方法不同,Sentinel 通過限制資源併發執行緒的數量,來減少不穩定資源對其它資源的影響。這樣不但沒有執行緒切換的損耗,也不需要您預先分配執行緒池的大小。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成執行緒數的逐步堆積。當執行緒數在特定資源上堆積到一定的數量之後,對該資源的新請求就會被拒絕。堆積的執行緒完成任務後才開始繼續接收請求。
通過響應時間對資源進行降級
除了對併發執行緒數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長後,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間視窗之後才重新恢復。
二、Sentinel dashboard控制檯安裝啟動
1、Sentinel官網下載地址:
https://github.com/alibaba/Sentinel/releases
當前最新版本是:sentinel-dashboard-1.8.1.jar
版本一致性:
Spring Cloud Alibaba Version:2.2.5.RELEASE or 2.1.4.RELEASE or 2.0.4.RELEASE
Sentinel Version:1.8.0
Nacos Version:1.4.1
RocketMQ Version:4.4.0
Dubbo Version:2.7.8
Seata Version:1.3.0
Spring Cloud Alibaba Version:2.2.1.RELEASE or 2.1.2.RELEASE or 2.0.2.RELEASE
Sentinel Version:1.7.1
Nacos Version:1.2.1
RocketMQ Version:4.4.0
Dubbo Version:2.7.6
Seata Version:1.2.0
官方版本說明:
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
Spring Cloud Alibaba Sentinel官網文件:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
Sentinel 控制檯官網文件:
https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0
2、Sentinel dashboard控制檯執行啟動
注意:啟動 Sentinel 控制檯需要 JDK 版本為 1.8 及以上版本。
Sentinel預設啟動埠是8080,和Tomcat預設的埠衝突,如果需要修改Sentinel預設啟動埠,使用引數:-Dserver.port=8070
Sentinel 啟動命令格式:
java -jar sentinel-dashboard.jar
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
示例:
java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
啟動後:
INFO: Sentinel log output type is: file
INFO: Sentinel log charset is: utf-8
INFO: Sentinel log base directory is: C:\Users\使用者名稱\logs\csp\
INFO: Sentinel log name use pid is: false
Tomcat started on port(s): 8700 (http) with context path ''
Sentinel Linux後臺啟動:
nohup java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -jar /java/sentinel-dashboard-1.8.1.jar &
Sentinel 指定日誌目錄啟動:
java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
啟動後:
INFO: Sentinel log output type is: file
INFO: Sentinel log charset is: utf-8
INFO: Sentinel log base directory is: C:\logs\sentinel-dashboard\
INFO: Sentinel log name use pid is: false
啟動(是否註冊Sentinel自己):
不註冊Sentinel自己
java -Dserver.port=8070 -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
註冊Sentinel自己
java -Dserver.port=8070 -Dcsp.sentinel.dashboard.server=localhost:8070 -Dproject.name=sentinel-dashboard -Dcsp.sentinel.log.dir=C:\logs\sentinel-dashboard -jar sentinel-dashboard-1.8.1.jar
訪問地址:
http://localhost:8070/
使用者名稱:sentinel
密碼:sentinel
從 Sentinel 1.6.0 起,Sentinel 控制檯引入基本的登入功能,預設使用者名稱和密碼都是:sentinel
3、Sentinel dashboard控制檯啟動配置項
-Dserver.port=8080:用於指定 Sentinel 控制檯埠為 8080,如若8080埠衝突,可使用 -Dserver.port=新埠 進行設定。。 -Dcsp.sentinel.dashboard.server=localhost:8080:指定控制檯地址和埠,會自動向該地址傳送心跳包。地址格式為:hostIp:port,l配置成ocalhost:8080即監控自己 -Dproject.name=sentinel-dashboard:指定Sentinel控制檯程式顯示的名稱 -Dcsp.sentinel.log.dir:指定Sentinel 日誌檔案目錄,預設是:${user.home}/logs/csp/ -Dcsp.sentinel.api.port=xxxx:本地的 Sentinel 客戶端埠(可選,預設是 8719,有衝突會嘗試向後探測)。若啟動多個應用,則需要通過 -Dcsp.sentinel.api.port=xxxx 指定客戶端監控 API 的埠(預設是 8719)。 -Dcsp.sentinel.app.type=1:從 1.6.3 版本開始,控制檯支援閘道器流控規則管理。啟動引數以將您的服務標記為 API Gateway,在接入控制檯時您的服務會自動註冊為閘道器型別,然後您即可在控制檯配置閘道器規則和 API 分組。 使用者可以通過如下引數進行鑑權配置: -Dsentinel.dashboard.auth.username=sentinel 用於指定控制檯的登入使用者名稱為 sentinel; -Dsentinel.dashboard.auth.password=123456 用於指定控制檯的登入密碼為 123456;如果省略這兩個引數,預設使用者和密碼均為 sentinel; -Dserver.servlet.session.timeout=7200 用於指定 Spring Boot 服務端 session 的過期時間,如 7200 表示 7200 秒;60m 表示 60 分鐘,預設為 30 分鐘;
同樣也可以直接在 Spring properties 檔案中進行配置。
注意:部署多臺控制檯時,session 預設不會在各例項之間共享,這一塊需要自行改造。
配置方式
Sentinel 提供如下的配置方式:
JVM -D 引數方式
properties 檔案方式(1.7.0 版本開始支援)
其中,project.name 引數只能通過 JVM -D 引數方式配置(since 1.8.0 取消該限制),其它引數支援所有的配置方式。
優先順序順序:JVM -D 引數的優先順序最高。若 properties 和 JVM 引數中有相同項的配置,以 JVM 引數配置的為準。
使用者可以通過 -Dcsp.sentinel.config.file 引數配置 properties 檔案的路徑,支援 classpath 路徑配置(如 classpath:sentinel.properties)。
預設 Sentinel 會嘗試從 classpath:sentinel.properties 檔案讀取配置,讀取編碼預設為 UTF-8。
配置項 型別 預設值 最小值 描述 auth.enabled boolean true - 是否開啟登入鑑權,僅用於日常測試,生產上不建議關閉 sentinel.dashboard.auth.username String sentinel - 登入控制檯的使用者名稱,預設為 sentinel sentinel.dashboard.auth.password String sentinel - 登入控制檯的密碼,預設為 sentinel sentinel.dashboard.app.hideAppNoMachineMillis Integer 0 60000 是否隱藏無健康節點的應用,距離最近一次主機心跳時間的毫秒數,預設關閉 sentinel.dashboard.removeAppNoMachineMillis Integer 0 120000 是否自動刪除無健康節點的應用,距離最近一次其下節點的心跳時間毫秒數,預設關閉 sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主機失聯判定,不可關閉 sentinel.dashboard.autoRemoveMachineMillis Integer 0 300000 距離最近心跳時間超過指定時間是否自動刪除失聯節點,預設關閉 sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主機失聯判定,不可關閉 server.servlet.session.cookie.name String sentinel_dashboard_cookie - 控制檯應用的 cookie 名稱,可單獨設定避免同一域名下 cookie 名衝突
更多配置項見:
https://github.com/alibaba/Sentinel/wiki/%E5%90%AF%E5%8A%A8%E9%85%8D%E7%BD%AE%E9%A1%B9
注:若通過控制檯推送規則時出現 invalid type 或 empty type 的錯誤,請確保 transport 模組版本與 core 模組版本保持一致;若控制檯版本 >= 1.7.1,請將接入端的相關依賴也升級至 1.7.1 及以上版本。
三、Sentinel規則管理及推送
一般來說,規則的推送有下面三種模式:
推送模式 說明 優點 缺點
1、原始模式
API 將規則推送至客戶端並直接更新到記憶體中,擴充套件寫資料來源(WritableDataSource)
優點
簡單,無任何依賴
缺點
不保證一致性;規則儲存在記憶體中,重啟即消失。嚴重不建議用於生產環境
2、Pull 模式
擴充套件寫資料來源(WritableDataSource), 客戶端主動向某個規則管理中心定期輪詢拉取規則,這個規則中心可以是 RDBMS、檔案 等
優點
簡單,無任何依賴;規則持久化 不保證一致性;
缺點
實時性不保證,拉取過於頻繁也可能會有效能問題。
3、Push 模式
擴充套件讀資料來源(ReadableDataSource),規則中心統一推送,客戶端通過註冊監聽器的方式時刻監聽變化,比如使用 Nacos、Zookeeper 等配置中心。這種方式有更好的實時性和一致性保證。生產環境下一般採用 push 模式的資料來源。
優點
規則持久化;一致性;快速
缺點
引入第三方依賴
四、、專案配置Sentinel,在Sentinel dashboard實現監控
1、pom.xml檔案引入依賴
引入 Sentinel,使用 group ID 為 com.alibaba.cloud 和 artifact ID 為 spring-cloud-starter-alibaba-sentinel 的 starter。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>
2、application.properties檔案配置
#spring.cloud.sentinel.transport.port 埠配置會在應用對應的機器上啟動一個 Http Server,該 Server 會與 Sentinel 控制檯做互動。 spring.cloud.sentinel.transport.port=8719 #預設是:localhost:8080,自定義後:localhost:8070 spring.cloud.sentinel.transport.dashboard=localhost:8070
3、使用瀏覽器開啟:
http://127.0.0.1:8901/sentinel
剛開啟時,沒有發現我們的專案,那是因為Sentinel使用了懶載入,要請求一下接口才會顯示出來:
http://127.0.0.1:8901/sentinel
4、Sentinel 詳細專案使用
見:
https://www.cnblogs.com/fanshuyao/p/14607028.html