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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    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"
        // Рекомендуется периодически обновлять клиент до последней версии для получения последних исправлений ошибок.
        "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",
            // Использование Context для контроля таймаута
            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)
        }
    }

    Для более подробной настройки обратитесь к Community Documentation