如何访问哨兵模式实例

本指南演示如何使用行业标准的客户端库建立到 Redis 哨兵模式实例的连接。示例涵盖 go-redisJedisLettuceRedisson 的配置细节。有关其他客户端选项,请参阅 Connect with Redis client API libraries

认证要求

Redis 哨兵模式实例支持以下认证选项:

  • 密码认证:配置了密码时,所有客户端连接都必须提供有效凭据
  • 无密码访问:如果在创建实例时禁用了 Set Password 选项,客户端可以在不进行认证的情况下连接
安全最佳实践

对于生产环境,强烈建议启用密码认证以保护您的数据。有关配置和维护安全凭据的详细说明,请参阅 User Management

连接端点参考

集群内访问

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

参数描述
Connection AddressRedis 哨兵模式的 Kubernetes 服务名称和端口组合。

集群外访问

对于从 Kubernetes 环境外部连接的应用,如果在实例创建期间已配置外部访问端点,则可在 Access Method 选项卡中 Access from outside the Cluster 部分找到这些端点。

参数描述
Sentinel Node Access AddressRedis 哨兵模式中 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 哨兵模式实例的最佳实践。

注意:在哨兵模式中注册的主从集群名称固定为 mymaster

go-redis
Jedis
Lettuce
Redisson
package main

import (
    "context"
    "fmt"
    "time"

    // It is recommended to periodically upgrade to the latest version of the client for the latest bug fixes.
    "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()
        },
        // Client name for identification and tracking
        ClientName: "go-demo",
        // Using Context for timeout control
        ContextTimeoutEnabled: true,
        // Maximum number of retries
        MaxRetries: 3,
        // Minimum backoff time for retries
        MinRetryBackoff: 20 * time.Millisecond,
        // Maximum backoff time for retries
        MaxRetryBackoff: 200 * time.Millisecond,
        // Connection timeout
        DialTimeout: 3 * time.Second,
        // Read timeout
        ReadTimeout: 5 * time.Second,
        // Write timeout
        WriteTimeout: 10 * time.Second,
        // Connection pool size for each node
        PoolSize: 100,
        // Maximum wait time for available connections in the pool
        PoolTimeout: time.Second,
        // Minimum idle connections for each node
        MinIdleConns: 5,
        // Maximum idle connections for each node
        MaxIdleConns: 10,
        // Maximum active connections for each node
        MaxActiveConns: 100,
        // Maximum idle time for connections
        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