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

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

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

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

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

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

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

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

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

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

    Для внешнего доступа к кластеру

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

    ПараметрОписание
    Sentinel Node Access AddressВнешние IP-адреса и порты подов sentinel в Redis Sentinel, обеспечивающие подключение из внешней сети 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 Sentinel с использованием различных клиентских библиотек.

    Примечание: имя мастер-слейв кластера, зарегистрированное в режиме Sentinel, фиксировано как mymaster.

    go-redis
    Jedis
    Lettuce
    Redisson
    package main
    
    import (
        "context"
        "fmt"
        "time"
    
        // Рекомендуется периодически обновлять клиент до последней версии для получения последних исправлений ошибок.
        "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()
            },
            // Имя клиента для идентификации и отслеживания
            ClientName: "go-demo",
            // Использование Context для контроля таймаута
            ContextTimeoutEnabled: true,
            // Максимальное количество повторных попыток
            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.