1. 程式人生 > 其它 >Sentinel安裝使用和配置,sentinel-dashboard安裝使用和配置

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