Подключение к кластеру Redis

Подключиться к кластеру Redis можно через CLI, из Docker или вашего приложения.

На время бета-тестирования подключиться можно только с использованием SSL-сертификата через порт 6380.

Получить корневой SSL-сертификат

mkdir -p ~/.redis/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.redis/SelectelDBaaSRootCA.pem
chmod 600 ~/.redis/SelectelDBaaSRootCA.pem

Посмотреть параметры подключения

Для подключения нужно указать хост (DNS-адрес ноды кластера) и пароль пользователя.

  1. В панели управления перейдите в раздел Облачная платформа ⟶ Базы данных.
  2. Откройте страницу кластера вкладка Настройки.
  3. Посмотрите DNS-адрес ноды кластера в блоке Адреса ноды ⟶ поле DNS-адрес.
  4. Посмотреть пароль нельзя — он задается при создании кластера. Если вы забыли пароль, измените его.

Подключиться из консоли

Подключиться можно только из клиента Redis версии выше 6 — эти версии поддерживают SSL.

  1. Скачайте архив с исходным кодом утилиты.
  2. Запустите сборку:

    make BUILD_TLS=yes
  3. Подключитесь к Redis:

    redis-cli -h <DNS> \
    --pass '<password>' \
    -p 6380 \
    --tls \
    --cacert ~/.redis/SelectelDBaaSRootCA.pem

    Укажите:

    • <DNS> — DNS-адрес ноды;
    • <password> — пароль пользователя.

Подключиться из Docker

docker run --rm -ti \
  -v $(pwd)/SelectelDBaaSRootCA.pem:/SelectelDBaaSRootCA.pem \
  redis \
  redis-cli \
  -h <cluster_DNS> \
  --pass '<password>' \
  -p 6380 --tls  --cacert /SelectelDBaaSRootCA.pem ping

Укажите:

  • <DNS> — DNS-адрес ноды;
  • <password> — пароль пользователя.

Подключиться из приложений

Python

Установите библиотеку redis-py:

pip3 install redis

Код для подключения:

import redis

if __name__ == "__main__":
    r = redis.Redis(
        host="<DNS>",
        port=6380,
        password=r"<password>",
        db=0,
        ssl=True,
        ssl_ca_certs="<path_to_certificate>",
    )

    print(r.set("foo", "bar"))
    print(r.get("foo"))

Укажите:

  • <DNS> — DNS-адрес ноды;
  • <password> — пароль пользователя;
  • <path_to_certificate> — путь к корневому сертификату.

PHP

Установите через Composer библиотеку predis.

Код для подключения:

<?php
  require __DIR__ . '/vendor/autoload.php';
  Predis\Autoloader::register();
 
  $host = ['<DNS>:6380'];
  $options = [
    'parameters' => [
      'scheme' => 'tls',
      'ssl'    => ['cafile' => '<path_to_certificate>', 'verify_peer' => true],
      'password' => '<password>'
    ]
  ];
 
  $conn = new Predis\Client($host, $options);
 
  $conn->set('foo', 'bar');
  var_dump($conn->get('foo'));
 
  $conn->disconnect();
?>

Укажите:

  • <DNS> — DNS-адрес ноды;
  • <password> — пароль пользователя;
  • <path_to_certificate> — путь к корневому сертификату.

Go

Установите библиотеку go-redis:

go mod init github.com/go-redis/redis
go get github.com/go-redis/redis/v8

Код для подключения:

package main

import (
	"context"
	"crypto/tls"
	"crypto/x509"
	"fmt"
	"io/ioutil"

	"github.com/go-redis/redis/v8"
)

var ctx = context.Background()
var certPath = "<path_to_certificate>"

func main() {
	caCert, err := ioutil.ReadFile(certPath)
	if err != nil {
		panic(err)
	}
	caCertPool := x509.NewCertPool()
	caCertPool.AppendCertsFromPEM(caCert)
	rdb := redis.NewClient(&redis.Options{
		Addr:     "<DNS>:6380",
		Password: `<password>`,
		DB:       0,
		TLSConfig: &tls.Config{
			RootCAs:            caCertPool,
			InsecureSkipVerify: true,
		},
	})

	err = rdb.Set(ctx, "key", "value", 0).Err()
	if err != nil {
		panic(err)
	}

	val, err := rdb.Get(ctx, "key").Result()
	if err != nil {
		panic(err)
	}
	fmt.Println("key", val)

	val2, err := rdb.Get(ctx, "key2").Result()
	if err == redis.Nil {
		fmt.Println("key2 does not exist")
	} else if err != nil {
		panic(err)
	} else {
		fmt.Println("key2", val2)
	}
}

Укажите:

  • <DNS> — DNS-адрес ноды;
  • <password> — пароль пользователя;
  • <path_to_certificate> — путь к корневому сертификату.