如何访问 Sentinel 实例

本指南演示如何使用行业标准客户端库连接 Redis Sentinel 实例。示例涵盖了 go-redisJedisLettuceRedisson 的配置细节。更多客户端选项,请参见 Connect with Redis client API libraries

认证要求

Redis Sentinel 实例支持以下认证选项:

  • 密码认证:配置密码后,所有客户端连接必须提供有效凭据
  • 无密码访问:如果实例创建时禁用 Set Password 选项,客户端可无认证连接
安全最佳实践

生产环境强烈建议启用密码认证以保护您的数据。详细配置和维护安全凭据,请参考 用户管理

连接端点参考

集群内部访问

对于部署在同一 Kubernetes 集群内的应用,可通过 Access Method 标签页中 Access within the Cluster 部分获取内部访问端点。

参数说明
连接地址Redis Sentinel 的 Kubernetes 服务名称和端口组合。

集群外部访问

对于从 Kubernetes 环境外连接的应用,若实例创建时配置了外部访问,则可在 Access Method 标签页中 Access from outside the Cluster 部分找到外部访问端点。

参数说明
Sentinel 节点访问地址Redis Sentinel 中 sentinel pod 的外部 IP 地址和端口,支持从 Kubernetes 网络外部连接。

交互式调试

在实例详情页,点击右上角的 Terminal Console,使用 redis-cli 命令连接到每个 Redis 节点。

redis-cli -h <internal-routing-ip> -p 6379

以下是调试示例,演示 set/get 操作:

192.168.0.10:6379> set a 1
OK
192.168.0.10:6379> get a
"1"
192.168.0.10:6379>

客户端集成示例

以下示例展示了使用不同客户端库连接 Redis Sentinel 实例的最佳实践。

注意:Sentinel 模式下注册的主从集群名称固定为 mymaster

go-redis
Jedis
Lettuce
Redisson
package main

import (
    "context"
    "fmt"
    "time"

    // 建议定期升级客户端至最新版本以获得最新的 bug 修复。
    "github.com/redis/go-redis/v9"
)

func main() {
    client := redis.NewFailoverClient(&redis.FailoverOptions{
        SentinelAddrs: []string{"<address>"},
        MasterName:    "mymaster",
        Password:      "<password>",
        OnConnect: func(ctx context.Context, conn *redis.Conn) error {
            ctx, cancel := context.WithTimeout(ctx, 500*time.Millisecond)
            defer cancel()
            return conn.Ping(ctx).Err()
        },
        // 客户端名称,用于识别和追踪
        ClientName: "go-demo",
        // 使用 Context 控制超时
        ContextTimeoutEnabled: true,
        // 最大重试次数
        MaxRetries: 3,
        // 重试的最小退避时间
        MinRetryBackoff: 20 * time.Millisecond,
        // 重试的最大退避时间
        MaxRetryBackoff: 200 * time.Millisecond,
        // 连接超时
        DialTimeout: 3 * time.Second,
        // 读取超时
        ReadTimeout: 5 * time.Second,
        // 写入超时
        WriteTimeout: 10 * time.Second,
        // 每个节点的连接池大小
        PoolSize: 100,
        // 连接池中可用连接的最大等待时间
        PoolTimeout: time.Second,
        // 每个节点的最小空闲连接数
        MinIdleConns: 5,
        // 每个节点的最大空闲连接数
        MaxIdleConns: 10,
        // 每个节点的最大活跃连接数
        MaxActiveConns: 100,
        // 连接最大空闲时间
        ConnMaxIdleTime: time.Minute * 5,
    })
    defer client.Close()

    if val, err := client.Get(context.TODO(), "test").Result(); err != nil {
        panic(err)
    } else {
        fmt.Println(val)
    }
}

更多详细配置,请参考 community documentation