【问题标题】:Redis 6 TLS Support and Redis SentinelRedis 6 TLS 支持和 Redis Sentinel
【发布时间】:2026-01-04 20:40:01
【问题描述】:

我想使用 Redis 6 的新 TLS 功能设置一个基本的 3 节点 Redis Sentinel 设置。不幸的是,Redis 6 Sentinel 似乎不够聪明,无法向客户端发送 TLS。

有没有人知道这样做的方法,或者如果不可能,是否有任何关于将来添加对此支持的在线提及?拥有这些不错的 TLS 功能却无法将它们与 Redis 自己的工具一起使用,这似乎是一种耻辱。
我知道过去人们使用 Stunnel 来执行此操作。将 TLS 支持添加到 Redis 后,我只有在无需第三方添加即可完成此操作时才感兴趣。

我的设置:
3 个 Redis 服务器(6.0-rc,上周最后一次提取),运行 TLS,测试证书 as specified in the Redis docs - 一个主服务器和 2 个副本
3 个 Sentinel(6.0-rc,也是上周最后一次撤消),没有在他们的端口上运行 TLS(我愿意,但这是次要问题)

我的尝试:

  1. 将 Sentinel 指向 Redis TLS 端口 - 这会导致 Redis 日志中出现大量关于接收到的不正确 TLS 版本的 TLS 错误,因为 Sentinel 没有与 Redis 使用 TLS。由于失败,Sentinel 认为 master 宕机了。

  2. 在 Sentinel 配置中的主 IP 前添加“https://” - 这会导致 Sentinel 拒绝运行,说它找不到主主机名。

  3. 将 TLS 选项添加到 Sentinel - 这会导致 Sentinel 尝试在其端口上与 TLS 通信,而不是与客户端通信,这无济于事。我找不到任何关于让 Sentinel 向客户说 TLS 的选项。

  4. 将 Sentinel 指向 Redis 非 TLS 端口(不理想,我宁愿只打开 TLS 端口) - 这会导致 Sentinel 向简单 Python 报告主服务器的错误(非 TLS)端口我正在测试的客户端(它实际上只是试图从 Sentinel 获取主信息)-出于显而易见的原因,我希望客户端通过 TLS 与 Redis 对话

  5. 将“replica-announce-port”指令添加到 Redis 时,Sentinel 仍指向非 TLS 端口 - 这有两种方式失败:主端口仍被错误地报告为非 TLS 端口(似乎是因为主服务器不是副本,因此该指令不适用),并且 Sentinel 现在认为副本都已关闭(因为报告了 TLS 端口,副本是自动发现的,并且它无法与上的副本通话TLS 端口)。

我知道this * question (Redis Sentinel and TLS) - 它很旧并且询问 Redis 4,所以它不一样。

【问题讨论】:

    标签: ssl redis tls1.2 redis-sentinel redis-server


    【解决方案1】:

    我确实弄清楚了这一点,但忘记了之前发布的答案:我缺少的是我需要在 Redis 和 Sentinel 服务器上设置tls-replication yes 选项。

    以前,我只在 Redis 服务器上设置它,因为它们是唯一需要通过 TLS 进行复制的服务器。但出于某种原因,该特定选项是实际使 Sentinel 向 Redis 使用 TLS 所需要的。

    所以总的来说,对于 TLS 选项,等式的两边都需要:

    tls-port <port>
    port 0
    tls-auth-clients yes
    tls-ca-cert-file <file>
    tls-key-file <file>
    tls-cert-file <file>
    tls-replication yes
    

    【讨论】:

      【解决方案2】:

      尝试将 tls-port 选项添加到 sentinel.conf,因为它似乎通常启用 TLS 支持,文档中也有相同的说明。对我来说,在 TLS 配置的其余部分之上添加到 sentinel.conf 的以下两个语句实际上是成功的。

      tls 端口 26379

      端口 0

      【讨论】: