fix: Redis集群查询+metrics修复 — 单节点连接替代ClusterClient
- crypto.go: decryptPassword 自动处理 enc: 前缀,避免调用方遗漏 - redis.go: getRedisClient 统一使用 redis.NewClient 单节点连接 ClusterClient 拓扑发现(CLUSTER SLOTS)在Docker内网IP不可达时超时 redisClientWrapper 全部方法改为使用 Client (不再走 ClusterClient) ScanAllKeys 简化为单节点 SCAN - connection_tester.go: getRedisMetrics 统一单节点连接采集metrics 删除 isCluster 分支的 ClusterClient 代码,避免5秒超时
This commit is contained in:
1 parent
e9a700b9d9
commit
9c5cb04cfa
3 files changed
+55
-173
No files matched your search
@@ -200,48 +200,29 @@ func getRedisMetrics(instance *model.Instance) map[string]interface{} {
|
||||
}
|
||||
|
||||
var info string
|
||||
if isCluster {
|
||||
rdb := redis.NewClusterClient(&redis.ClusterOptions{
|
||||
Addrs: []string{addr},
|
||||
Password: password,
|
||||
DialTimeout: 5 * time.Second,
|
||||
ReadTimeout: 5 * time.Second,
|
||||
})
|
||||
defer rdb.Close()
|
||||
// For metrics collection, always use single-node connection even for clusters.
|
||||
// ClusterClient does topology discovery which can timeout if some nodes are unreachable.
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: addr,
|
||||
Password: password,
|
||||
DB: 0,
|
||||
DialTimeout: 5 * time.Second,
|
||||
ReadTimeout: 5 * time.Second,
|
||||
WriteTimeout: 3 * time.Second,
|
||||
})
|
||||
defer rdb.Close()
|
||||
|
||||
_, err := rdb.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
metrics["status"] = "offline"
|
||||
return metrics
|
||||
}
|
||||
metrics["status"] = "online"
|
||||
info, _ = rdb.Info(ctx, "server", "clients", "stats").Result()
|
||||
// Latency from PING
|
||||
start := time.Now()
|
||||
rdb.Ping(ctx)
|
||||
metrics["latency"] = time.Since(start).Milliseconds()
|
||||
} else {
|
||||
rdb := redis.NewClient(&redis.Options{
|
||||
Addr: addr,
|
||||
Password: password,
|
||||
DB: 0,
|
||||
DialTimeout: 5 * time.Second,
|
||||
ReadTimeout: 5 * time.Second,
|
||||
})
|
||||
defer rdb.Close()
|
||||
|
||||
_, err := rdb.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
metrics["status"] = "offline"
|
||||
return metrics
|
||||
}
|
||||
metrics["status"] = "online"
|
||||
info, _ = rdb.Info(ctx, "server", "clients", "stats").Result()
|
||||
// Latency from PING
|
||||
start := time.Now()
|
||||
rdb.Ping(ctx)
|
||||
metrics["latency"] = time.Since(start).Milliseconds()
|
||||
_, err := rdb.Ping(ctx).Result()
|
||||
if err != nil {
|
||||
metrics["status"] = "offline"
|
||||
return metrics
|
||||
}
|
||||
metrics["status"] = "online"
|
||||
info, _ = rdb.Info(ctx, "server", "clients", "stats").Result()
|
||||
// Latency from PING
|
||||
start := time.Now()
|
||||
rdb.Ping(ctx)
|
||||
metrics["latency"] = time.Since(start).Milliseconds()
|
||||
|
||||
if info == "" {
|
||||
return metrics
|
||||
|
||||
Reference in new issue
Block a user