• Русский
  • Как получить доступ к экземпляру кластера

    В этом руководстве показано, как устанавливать соединения с экземплярами Redis Cluster с использованием стандартных клиентских библиотек. Примеры охватывают сведения о конфигурации для go-redis, Jedis, Lettuce и Redisson. Дополнительные варианты клиентов см. в разделе Подключение с помощью клиентских API-библиотек Redis.

    Требования к аутентификации

    Экземпляры Redis Cluster поддерживают следующие варианты аутентификации:

    • Аутентификация по паролю: если задан пароль, все подключения клиентов должны предоставлять действительные учетные данные
    • Доступ без пароля: если параметр Set Password отключен при создании экземпляра, клиенты могут подключаться без аутентификации
    Лучшая практика безопасности

    Для рабочих сред настоятельно рекомендуется использовать аутентификацию по паролю для защиты данных. Подробные инструкции по настройке и поддержанию безопасных учетных данных см. в разделе Управление пользователями.

    Справка по конечным точкам подключения

    Внутренний доступ к кластеру

    Для приложений, развернутых в том же Kubernetes-кластере, внутренние конечные точки доступа доступны на вкладке Access Method в разделе Access within the Cluster.

    ПараметрОписание
    Connection AddressКомбинации имени службы Kubernetes и порта для каждого шарда в Redis Cluster

    Внешний доступ к кластеру

    Для приложений, подключающихся извне среды Kubernetes, внешние конечные точки доступа становятся доступны, если они были настроены при создании экземпляра. Эти конечные точки можно найти на вкладке Access Method в разделе Access from outside the Cluster.

    Тип конечной точкиОписание
    Shard AddressВнешние IP-адреса и порты для pod'ов шарда в Redis Cluster, обеспечивающие подключение из-за пределов сети Kubernetes

    Интерактивная отладка

    Для административных операций и устранения неполадок Redis CLI предоставляет прямой доступ к узлам кластера:

    1. Откройте Terminal Console на странице сведений об экземпляре

    2. Подключитесь к любому узлу, используя режим клиента с поддержкой кластера:

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

    Пример сеанса отладки, демонстрирующий перенаправление на основе слотов:

    192.168.0.10:6379> set a 1
    -> Redirected to slot [15495] located at 192.168.0.10:6379
    OK
    192.168.0.10:6379> get a
    "1"
    192.168.0.10:6379>

    Флаг -c включает автоматическое следование перенаправлениям MOVED и ASK, что является обязательным при работе с Redis Cluster.

    Примеры интеграции клиентов

    Следующие примеры демонстрируют лучшие практики подключения к экземплярам Redis Cluster с использованием различных клиентских библиотек.

    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.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()
            },
            // Client name for tracking purposes
            ClientName: "go-demo",
            // Use Context for timeout control
            ContextTimeoutEnabled: true,
            // Maximum number of redirects in case of MOVED or ASK
            MaxRedirects: 3,
            // Maximum number of retries
            MaxRetries: 3,
            // Minimum retry backoff
            MinRetryBackoff: 20 * time.Millisecond,
            // Maximum retry backoff
            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 number of idle connections for each node
            MinIdleConns: 5,
            // Maximum number of idle connections for each node
            MaxIdleConns: 10,
            // Maximum number of 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)
        }
    }

    Дополнительные сведения о конфигурации см. в документации сообщества