1、为什么需要持久化
Sentinel默认是将规则推送至客户端并直接更新到内存中,所以客户端一重启,Sentinel规则即消失。
2、Sentinel + Nacos持久化配置
官方推荐用Push的方式进行规则的推送,其中Nacos是方式之一
参考:https://github.com/alibaba/Sentinel/wiki/在生产环境中使用-Sentinel#Push模式
2.1、pom.xml
添加需要Sentinel和Nacos整合的包
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.2、bootstrap.yml
添加ds1 ~ ds5,五种管控规则
spring:
profiles:
active: dev
application:
name: xman-service-a
cloud:
nacos:
config:
server-addr: 192.168.12.11:8848 # 配置中心地址
file-extension: yaml # 指定yaml格式的配置
extension-configs[0]:
data-id: file01.yaml # 多个配置文件(共享配置)
group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
extension-configs[1]:
data-id: file02.yaml # 多个配置文件(共享配置)
group: DEFAULT_GROUP # 默认为DEFAULT_GROUP
refresh: true # 是否动态刷新,默认为false
discovery:
server-addr: 192.168.12.11:8848 #服务注册中心地址
sentinel:
eager: true # 取消控制台懒加载
transport:
# Sentinel监控中心地址
dashboard: 192.168.12.11:8080
# 指定控制台和服务端心跳发送周期
heartbeat-interval-ms: 500
# nacos管控规则配置持久化,以下配置了5种管控规则
datasource:
ds1:
nacos:
server-addr: 192.168.12.11:8848 # 配置中心地址
dataId: ${spring.application.name}-flow-sentinel.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow # 流控规则
ds2:
nacos:
server-addr: 192.168.12.11:8848 # 配置中心地址
dataId: ${spring.application.name}-degrade-sentinel.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: degrade # 降级规则
ds3:
nacos:
server-addr: 192.168.12.11:8848 # 配置中心地址
dataId: ${spring.application.name}-param-flow-sentinel.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: param-flow # 热点规则
ds4:
nacos:
server-addr: 192.168.12.11:8848 # 配置中心地址
dataId: ${spring.application.name}-system-sentinel.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: system # 系统规则
ds5:
nacos:
server-addr: 192.168.12.11:8848 #配置中心地址
dataId: ${spring.application.name}-authority-sentinel.json
groupId: DEFAULT_GROUP
data-type: json
rule-type: authority # 授权规则
management: #暴露监控
endpoints:
web:
exposure:
include: '*'
feign:
# 开启feign 和sentinel 结合
sentinel:
enabled: true
2.3、Naocs控制台添加配置
2.3.1、流控规则xman-service-a-flow-sentinel.json
[
{
"resource": "获取用户名称",
"limitApp": "default",
"grade": "1",
"count": "5",
"strategy": "0",
"controlBehavior": "0",
"clusterMode": false
},
{
"resource": "获取用户密码",
"limitApp": "default",
"grade": "1",
"count": "1",
"strategy": "0",
"controlBehavior": "0",
"clusterMode": false
},
{
"resource": "内存溢出测试服务",
"limitApp": "default",
"grade": "1",
"count": "10",
"strategy": "0",
"controlBehavior": "0",
"clusterMode": false
}
]
2.3.1、降级规则xman-service-a-degrade-sentinel.json
[
{
"count": 10.0,
"grade": 0,
"limitApp": "default",
"minRequestAmount": 5,
"resource": "获取用户名称",
"rtSlowRequestAmount": 1,
"timeWindow": 60
},
{
"count": 5.0,
"grade": 0,
"limitApp": "default",
"minRequestAmount": 1,
"resource": "获取用户密码",
"rtSlowRequestAmount": 1,
"timeWindow": 120
},
{
"count": 6.0,
"grade": 0,
"limitApp": "default",
"minRequestAmount": 1,
"resource": "内存溢出测试服务",
"rtSlowRequestAmount": 1,
"timeWindow": 180
}
]
2.3.1、热点规则xman-service-a-param-flow-sentinel.json
[
{
"burstCount": 0,
"clusterMode": false,
"controlBehavior": 0,
"count": 5.0,
"durationInSec": 10,
"grade": 1,
"limitApp": "default",
"maxQueueingTimeMs": 0,
"paramFlowItemList": [],
"paramIdx": 0,
"resource": "获取用户名称"
},
{
"burstCount": 0,
"clusterMode": false,
"controlBehavior": 0,
"count": 2.0,
"durationInSec": 10,
"grade": 1,
"limitApp": "default",
"maxQueueingTimeMs": 0,
"paramFlowItemList": [],
"paramIdx": 0,
"resource": "获取用户密码"
},
{
"burstCount": 0,
"clusterMode": false,
"controlBehavior": 0,
"count": 10.0,
"durationInSec": 10,
"grade": 1,
"limitApp": "default",
"maxQueueingTimeMs": 0,
"paramFlowItemList": [],
"paramIdx": 0,
"resource": "内存溢出测试服务"
}
]
2.3.1、系统规则xman-service-a-system-sentinel.json
[
{
"avgRt": 10,
"highestCpuUsage": 0.8,
"highestSystemLoad": 40.0,
"maxThread": 80,
"qps": 50.0
}
]
2.3.1、授权规则xman-service-a-authority-sentinel.json
[
{
"limitApp": "appA,appB",
"resource": "获取用户名称",
"strategy": 0
},
{
"limitApp": "default",
"resource": "获取用户密码",
"strategy": 0
},
{
"limitApp": "appA",
"resource": "内存溢出测试服务",
"strategy": 1
}
]
2.4、查看Sentinel控制台
在Nacos上修改配置,可以实时同步到Sentinel中生效;如果Sentinel中调整了规则,则不能同步到Nacos中。
针对这样的情况,网上有些解决方案,大家可以自己找一下