Sentinel的持久化

发布于 2022-04-22  1.71k 次阅读


 默认情况下一旦重启微服务,那么Sentinel配置的规则直接会丢失,重启后需要重新配置规则,假如在生产环境一个应用有很多个服务,假如应用重启那么所有服务都得重新配置,那么就非常麻烦

Sentinel提供了持久化配置,它可以使用Mysql,Redis,文件,Nacos做未持久化数据的源,一般使用Nacos作为Sentinel的持久化源

操作:将限流配置规则持久化进Nacos保存,只要刷新8401某个rest地址,sentinel控制台的流控规则就能看到,只要nacos里面的配置不删除,针对8401上的sentinel流控规则就持续有

一,Sentinel微服务端的配置

① maven

<!--实现服务的注册与发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!--sentinel服务限流降级框架-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

<!--sentinel持久化依赖包-->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
② application配置
server:
  port: 9106
spring:
  application:
    name: cloudalibaba-sentinelmain-service
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.68.134:8084 #nacos服务端地址,Nginx做了代理
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
      datasource:
        ds1:
          nacos:
            server-addr: 192.168.68.134:8084 #nacos的服务地址
            data-id: cloudalibaba-sentinelmain-service #远程nacos配置文件的名称(唯一)
            group-id: DEFAULT_GROUP #分组
            data-type: json #数据类型为json
            rule-type: flow

二,Nacos保存Sentinel规则

配置格式:选择 json 选项

配置内容:

  • resource: 资源名称
  • limitApp: 来源应用
  • grade: 阈值类型,0表示线程,1表示QPS
  • count: 单机阈值
  • strategy: 流控模式,0表示直接,1表示关联,2表示链路
  • controlBehavior: 流控效果,0表示快速失败,1表示Warm Up,2表示排队等待
  • clusterMode: 是否集群
① 添加sentinel的规则配置到nacos
例:添加下列配置
[
    {
        "resource":"/testA",
        "limitApp":"default",
        "grade":1,
        "count":1,
        "strategy":0,
        "controlBehavior":0,
        "clusterMode":false
    }
]
② 重启cloudalibaba-sentinelmain-service服务,看sentinel是否持久化了该配置