You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redis Sentinel基于Stunnel启用TLS后节点间及与主节点通信失败问题

解决Redis Sentinel + Stunnel TLS通信问题的排查方案

我之前也碰到过类似的Redis Sentinel搭配Stunnel实现TLS通信的坑,给你梳理几个关键的排查点和修复建议:

一、先检查Stunnel配置是否覆盖了所有需要转发的端口

你提到主从复制已经正常,但Sentinel之间/与主节点通信失败,大概率是Stunnel没正确处理Sentinel的端口转发。确保你的stunnel.conf里有针对Redis主从和Sentinel节点的独立转发规则:

示例Stunnel配置(针对主节点和Sentinel)

; 转发Redis主节点的TLS连接
[redis-master]
client = yes
accept = 127.0.0.1:63790  # 本地监听端口,供Sentinel连接
connect = <master-public-ip>:6379
cert = /path/to/your/cert.pem
key = /path/to/your/key.pem
CAfile = /path/to/your/ca.pem
verify = 2  # 开启证书验证,确保通信安全

; 转发远程Sentinel的TLS连接
[sentinel-node1]
client = yes
accept = 127.0.0.1:26280  # 本地监听的Sentinel端口,对应你执行命令的端口
connect = <sentinel1-public-ip>:26379
cert = /path/to/your/cert.pem
key = /path/to/your/key.pem
CAfile = /path/to/your/ca.pem
verify = 2

注意:每个远程Sentinel节点都需要单独的转发块,独立配置更清晰。

二、修正Sentinel的核心配置

Sentinel的配置必须指向本地Stunnel的监听端口,而不是直接指向远程节点的真实端口:

关键Sentinel配置项

; 监控主节点:这里的IP和端口是本地Stunnel转发主节点的地址
sentinel monitor redisftdev 127.0.0.1 63790 2
sentinel down-after-milliseconds redisftdev 30000
sentinel failover-timeout redisftdev 180000

; 重要:配置Sentinel对外宣告的地址(如果是云环境/跨主机部署)
; 让其他Sentinel能通过Stunnel访问到当前节点
sentinel announce-ip <your-sentinel-public-ip>
sentinel announce-port <stunnel-forwarded-sentinel-port>

如果没设置announce-ip和announce-port,Sentinel会把本地私有IP告诉其他节点,导致跨主机的Sentinel无法建立连接,这是很多人踩的坑!

三、日志排查是关键

不管是Stunnel还是Sentinel,开启详细日志能快速定位问题:

  1. Stunnel日志:在stunnel.conf里加debug = 7,启动后看日志里有没有连接失败、证书验证错误的信息。
  2. Sentinel日志:查看Sentinel的日志文件,搜索关键词Can't connect、sentinel、redisftdev,会看到它尝试连接主节点或其他Sentinel的失败记录,比如端口不通、证书问题等。

四、可选方案:直接用Redis原生TLS替代Stunnel

如果你的Redis版本是6.0+,其实Sentinel本身已经原生支持TLS了,不需要再用Stunnel中转,配置更简单:

主从节点TLS配置示例

port 0
tls-port 6379
tls-cert-file /path/to/cert.pem
tls-key-file /path/to/key.pem
tls-ca-cert-file /path/to/ca.pem
tls-auth-clients yes

Sentinel节点TLS配置示例

port 0
tls-port 26379
tls-cert-file /path/to/cert.pem
tls-key-file /path/to/key.pem
tls-ca-cert-file /path/to/ca.pem
tls-auth-clients yes

; 直接用TLS端口监控主节点
sentinel monitor redisftdev <master-ip> 6379 2
sentinel sentinel-tls-yesredisftdev yes  # 开启Sentinel与主节点的TLS通信

这个方案能避免Stunnel的端口转发配置错误,推荐优先尝试。

测试步骤

  1. 先在本地执行redis-cli -p 26280,输入sentinel masters,看是否能返回主节点信息;如果不能,说明Sentinel到主节点的Stunnel转发有问题。
  2. 手动测试Stunnel连接:用telnet 127.0.0.1 26280,看是否能建立连接,排除端口占用或Stunnel未启动的问题。

内容的提问来源于stack exchange,提问作者Mangaku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:30:21