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

    В этом руководстве показано, как устанавливать соединения с экземплярами 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

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

    Для административных операций и устранения неполадок 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"
        // Рекомендуется периодически обновлять клиент до последней версии для получения последних исправлений ошибок.
        "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