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用户名logscsp
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:logssentinel-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:logssentinel-dashboard
INFO: Sentinel log name use pid is: false
启动(是否注册Sentinel自己):
不注册Sentinel自己
java -Dserver.port=8070 -Dcsp.sentinel.log.dir=C:logssentinel-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:logssentinel-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
(时间宝贵,分享不易,捐赠回馈,^_^)
================================
©Copyright 蕃薯耀 2021-04-01
https://www.cnblogs.com/fanshuyao/