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