如何访问集群实例

本指南演示了如何使用行业标准的客户端库连接到 Redis 集群实例。示例涵盖了 go-redisJedisLettuceRedisson 的配置细节。有关其他客户端选项,请参阅 使用 Redis 客户端 API 库连接

目录

认证要求

Redis 集群实例实现以下认证选项:

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

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

连接终端参考

内部集群访问

对于部署在同一 Kubernetes 集群内的应用程序,可以通过 集群内访问 部分下的 访问方法 标签获得内部访问终端。

参数描述
连接地址Redis 集群中每个分片的 Kubernetes 服务名称和端口组合

外部集群访问

对于从 Kubernetes 环境外部连接的应用程序,可以在实例创建时配置外部访问终端。这些终端可以在 集群外部访问 部分下的 访问方法 标签中找到。

终端类型描述
分片地址Redis 集群中分片的外部 IP 地址和端口,使其能够从 Kubernetes 网络外部进行连接

交互式调试

对于管理操作和故障排除,Redis CLI 提供对集群节点的直接访问:

  1. 从实例详情页面访问 终端控制台
  2. 使用集群感知客户端模式连接到任何节点:
redis-cli -c -h <internal-routing-ip> -p 6379

示例调试会话演示基于槽的重定向:

192.168.0.10:6379> set a 1
-> 重定向到槽 [15495] 位于 192.168.0.10:6379
OK
192.168.0.10:6379> get a
"1"
192.168.0.10:6379>

-c 标志启用 MOVEDASK 重定向的自动跟随,这在使用 Redis 集群时是必不可少的。

客户端集成示例

以下示例演示了使用各种客户端库连接到 Redis 集群实例的最佳实践。

go-redis
Jedis
Lettuce
Redisson
package main

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

func main() {
    client := redis.NewClusterClient(&redis.ClusterOptions{
        Addrs:    []string{"<address>"},
        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",
        // 使用上下文进行时间控制
        ContextTimeoutEnabled: true,
        // 在 MOVED 或 ASK 的情况下最大重定向次数
        MaxRedirects: 3,
        // 最大重试次数
        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)
    }
}

有关更详细的配置,请参阅 社区文档