1. Sentinel介紹
1.1 什么是Sentinel
Sentinel (分布式系統(tǒng)的流量防衛(wèi)兵) 是阿里開源的一套用于服務(wù)容錯的綜合性解決方案。它以流量
為切入點, 從流量控制、熔斷降級、系統(tǒng)負載保護等多個維度來保護服務(wù)的穩(wěn)定性。
1.2 Sentinel 特征
- 豐富的應(yīng)用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景, 例如秒殺(即突發(fā)流量控制在系統(tǒng)容量可以承受的范圍)、消息削峰填谷、集群流量控制、實時熔斷下游不可用應(yīng)用等。
- 完備的實時監(jiān)控:Sentinel 提供了實時的監(jiān)控功能。通過控制臺可以看到接入應(yīng)用的單臺機器秒級數(shù)據(jù), 至 500 臺以下規(guī)模的集群的匯總運行情況。
- 廣泛的開源生態(tài):Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊, 例如與 SpringCloud、Dubbo、gRPC 的整合。只需要引入相應(yīng)的依賴并進行簡單的配置即可快速地接入Sentinel。
- 完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現(xiàn)擴展接口來快速地定制邏輯。例如定制規(guī)則管理、適配動態(tài)數(shù)據(jù)源等。
1.3 Sentinel 2大主要組成部分
1 核心庫(Java 客戶端)
不依賴任何框架/庫,能夠運行于所有 Java 運行時環(huán)境,同時對 Dubbo /Spring Cloud 等框架也有較好的支持。
2 控制臺(Dashboard)
基于 Spring Boot 開發(fā),打包后可以直接運行,不需要額外的 Tomcat 等應(yīng)用容器。
2. Sentinel使用
Sentinel所有知識都可以官網(wǎng)查詢:官網(wǎng)地址
2.1 安裝Sentinel控制臺
- 下載jar包,解壓到文件夾: Sentinel下載地址
- 啟動控制臺
```
# 直接使用jar命令啟動項目(控制臺本身是一個SpringBoot項目)
java -Dserver.port=8850 -Dcsp.sentinel.dashboard.server=localhost:8850 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.7.2.jar
```
-
- 防火墻將端口放行,重載規(guī)則后瀏覽器訪問 ( 默認用戶名密碼是 sentinel/sentinel )
firewall-cmd --zone=public --add-port=8850/tcp --permanent firewall-cmd --reload
瀏覽器地址:http://192.168.2.89:8850

sentinel登陸界面

登陸后界面
-
- 設(shè)置Sentinel自啟動(jar包自啟動)
- 在jar包同目錄下新建啟動腳本
vim sentinel-start.sh # 加入如下內(nèi)容: #!/bin/sh export JAVA_HOME=/usr/local/jdk1.8.0_251 export PATH=$JAVA_HOME/bin:$PATH nohup java -Dserver.port=8850 -Dcsp.sentinel.dashboard.server=localhost:8850 -Dproject.name=sentinel-dashboard -jar /usr/local/sentinel/sentinel-dashboard-1.7.2.jar > /usr/local/sentinel/sentinel.log 2>&1 & echo $! > /var/run/sentinel.pid - 新建停止腳本sentinel-stop.sh
vim sentinel-stop.sh # 加入如下內(nèi)容: #!/bin/sh PID=$(cat /var/run/sentinel.pid) kill -9 $PID - 增加權(quán)限
chmod +x sentinel-start.sh chmod +x sentinel-stop.sh - 新建開機啟動腳本
vim /lib/systemd/system/sentinal.service # 加入如下內(nèi)容: #!/bin/sh [Unit] Description=nacos After=network.target [Service] Type=forking ExecStart=/usr/local/sentinel/sentinel-start.sh ExecStop=/usr/local/sentinel/sentinel-stop.sh PrivateTmp=true [Install] WantedBy=multi-user.target - 自啟命令
啟動命令時錯誤:systemctl daemon-reload #先進行文件生效配置 systemctl start sentinel # 啟動 systemctl stop sentinel # 停止 systemctl enable sentinel # 設(shè)置自啟 systemctl status sentinel-bash: ./sentinel-start.sh: /bin/sh^M: 壞的解釋器: 沒有那個文件或目錄
錯誤原因:這個文件在Windows下編輯過,在Windows下每一行結(jié)尾是\n\r,而Linux下則是\n,所以才會有 多出來的\r。
修改錯誤:使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令會把xxxxxxx.sh中的\r 替換成空白!
2.2 微服務(wù)集成Sentinel
-
- 在pom.xml中加入下面依賴,因容錯在上游,所以在消費者中引入
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> -
- 配置文件中配置Sentinel
spring: cloud: sentinel: transport: port: 13001 #跟控制臺交流的端口,隨意指定一個未使用的端口即可,防火墻放行 dashboard: 192.168.2.89:8850 # 指定控制臺服務(wù)的地址 ##非局域網(wǎng)內(nèi)的地址,有問題,還未解決 // TODO