Sentinel源码配置更改支持高可用部署
现象
使用Sentinel带密码登录,如果前面使用Nginx进行代理,两个Sentinel无法部署为高可用,登录过后点击进入其他功能,又回到登录页面,达不到高可用部署的效果。
分析
我下了Sentinel dashborad源码进行了分析,发现他是使用正常的Session进行会话保持状态的,这显然是不行的;我设想把Session保存到Redis中,这样无论怎么部署,Session都只有一个,达到了Session一致的目的,应该能达到我要的效果。
开始
目的
主要记录Sentinel 控制台高可用部署,用于生产环境
版本信息
name | version | port |
---|---|---|
sentinel | 1.8.4 | 192.168.28.1:8800 |
sentinel | 1.8.4 | 192.168.28.132:8801 |
Sentinel源码配置修改支持高可用部署
- pom.xml加入spring session和redis支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version> 2.5.7</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version> 2.5.6</version>
</dependency>
- redis 配置
spring.redis.host=192.168.252.1
spring.redis.port=6379
#spring session使用存储类型,默认就是redis所以可以省略
spring.session.store-type=redis
- nacos配置(根据自己的情况定义,也可以在启动jar时候设置)
nacos.address=192.168.252.1:8840
nacos.namespace=middle-dev
nacos.group=dev
- 我部署在两台机器上,其中192.168.28.132是虚拟机,启动命令分别为:
java -Dserver.port=8800 -Dnacos.namespace=middle-dev -Dnacos.address=192.168.252.1:8840 -Dcsp.sentinel.dashboard.server=localhost:8800 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
java -Dserver.port=8801 -Dnacos.namespace=middle-dev -Dnacos.address=192.168.252.1:8840 -Dcsp.sentinel.dashboard.server=localhost:8801 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
nginx配置 nginx.conf加上这一段
upstream sentinel-cluster {
server 127.0.0.1:8800;
server 192.168.28.132:8801;
}
server {
listen 8810;
server_name localhost;
location / {
proxy_pass http://sentinel-cluster;
}
}
其他服务配置sentinel-dashboard地址
spring:
cloud:
sentinel: # sentinel 整合
transport:
dashboard: ${SENTINEL_DASHBOARD_ADDR:localhost}:8810 #sentinel控制台访问路径
port: 8719 # 本地起一个httpserver,和sentinel打交道,缺省端口8719
# 如果同一个实例在一台机器上,需要改不同的端口
filter:
enabled: false # 不支持url,也就是在网关流控控制台看不到url资源,只支持gateway
datasource:
gw_flow: # 整合nacos,把流控规则保存到nacos 192.168.252.1
nacos:
server-addr: ${NACOS_SERVER_ADDR:192.168.252.1}:8840
dataId: ${spring.application.name}-sentinel-flow
namespace: middle-${SPRING_PROFILES_ACTIVE:dev}
groupId: ${SPRING_PROFILES_ACTIVE:dev}
data-type: json
rule-type: gw_flow # 流控配置
结果
都启动之后,在sentinel-dashboard控制台增加和修改都显示正确。