Создание Redis-кластера
Redis-кластер — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста: хост-мастер принимает запросы на запись, асинхронно дублируя изменения в репликах.
Подробнее об устройстве кластера Managed Service for Redis см. в разделе Взаимосвязь ресурсов в Managed Service for Redis.
Примечание
- Количество хостов, которые можно создать вместе с Redis-кластером, зависит от выбранного типа хранилища, класса хостов и использования шардирования.
- Доступные типы хранилища зависят от выбранного класса хостов.
Как создать кластер Redis
Важно
С 1 июня 2022 года поддержка Redis версии 5.0 прекращается. Подробнее см. в разделе Поддерживаемые версии.
-
В консоли управления перейдите в каталог, в котором нужно создать кластер БД.
-
Выберите сервис Managed Service for Redis.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
-
(опционально) Добавьте описание кластера.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования, в том числе самого сервиса Managed Service for Redis. В Prestable-окружении раньше появляются новая функциональность, улучшения и исправления ошибок. При этом не все обновления обеспечивают обратную совместимость.
-
Выберите версию СУБД.
-
Если требуется, включите шардирование кластера.
Важно
Включить шардирование можно только при создании нового кластера. Шардировать уже созданный нешардированный кластер невозможно, как и отключить шардирование кластера, для которого оно включено.
-
Если требуется, включите поддержку шифрованных SSL-соединений с кластером (для версии Redis 6.0 или старше).
Важно
Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.
-
-
В блоке Класс хоста:
- Выберите Платформу.
- Укажите Тип виртуальной машины, на которой будут развернуты хосты.
- Выберите конфигурацию хостов — она определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. При изменении конфигурации меняются характеристики всех уже созданных хостов.
-
В блоке Размер хранилища:
-
Выберите тип хранилища:
- либо более гибкое хранилище — на сетевых SSD-дисках (
network-ssd
) или на нереплицируемых SSD-дисках (network-ssd-nonreplicated
); - либо более быстрое хранилище — на локальных SSD-дисках (
local-ssd
).
От выбранного типа хранилища зависит, с каким шагом можно будет изменить его размер:
- хранилище на сетевых SSD-дисках — с шагом 13 ГБ;
- хранилище на нереплицируемых SSD-дисках — с шагом 93 ГБ;
- хранилище на локальных SSD-дисках — с шагом 100 ГБ.
- либо более гибкое хранилище — на сетевых SSD-дисках (
-
Выберите размер хранилища. Доступный размер хранилища ограничен квотами и лимитами.
-
-
В блоке Настройки кластера в поле Пароль укажите пароль пользователя, от 8 до 128 символов.
-
В блоке Сетевые настройки выберите облачную сеть для размещения кластера и группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты нажмите на кнопку Добавить хост и выберите зону доступности и подсеть, к которой будет подключен хост. Создайте необходимое количество хостов. Для изменения зоны доступности и добавленного хоста нажмите на значок карандаша в строке хоста.
Если вы включили шардирование, укажите названия шардов.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — время по UTC, когда требуется начать резервное копирование кластера (в 24-часовом формате). Если время не задано, резервное копирование начнется в 22:00 UTC.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление версии СУБД, применение патчей и так далее.
-
Защита от удаления — управляет защитой кластера от непреднамеренного удаления пользователем.
Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
-
-
При необходимости задайте настройки СУБД.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet list
Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
yc managed-redis cluster create --help
-
При создании кластера с помощью CLI нельзя напрямую указать тип хоста и объем оперативной памяти. Вместо этого выберите подходящий класс хостов. Чтобы просмотреть доступные классы хостов, выполните команду:
yc managed-redis resource-preset list
-
Укажите параметры кластера в команде создания (в примере приведены не все флаги):
yc managed-redis cluster create \ --name <имя кластера> \ --environment <окружение, prestable или production> \ --network-name <имя сети> \ --host zone-id=<зона доступности>,subnet-id=<идентификатор подсети> \ --security-group-ids <список идентификаторов групп безопасности> \ --enable-tls \ --resource-preset <класс хоста> \ --disk-size <размер хранилища в гигабайтах> \ --password=<пароль пользователя> \ --backup-window-start <время начала резервного копирования в формате ЧЧ:ММ:СС> --deletion-protection=<защита от удаления кластера: true или false>
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). Terraform и его провайдеры распространяются под лицензией Mozilla Public License.
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.
При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
Если у вас еще нет Terraform, установите его и настройте провайдер.
Чтобы создать кластер:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер базы данных — описание кластера и его хостов. При необходимости здесь же можно задать настройки СУБД.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла для создания кластера с поддержкой SSL:
terraform { required_providers { yandex = { source = "yandex-cloud/yandex" } } } provider "yandex" { token = "<OAuth или статический ключ сервисного аккаунта>" cloud_id = "<идентификатор облака>" folder_id = "<идентификатор каталога>" zone = "<зона доступности>" } resource "yandex_mdb_redis_cluster" "<имя кластера>" { name = "<имя кластера>" environment = "<окружение: PRESTABLE или PRODUCTION>" network_id = "<идентификатор сети>" security_group_ids = [ "<идентификаторы групп безопасности>" ] tls_enabled = true sharded = <шардирование: true или false> deletion_protection = <защита от удаления кластера: true или false> config { password = "<пароль>" version = "<версия Redis>" } resources { resource_preset_id = "<класс хоста>" disk_type_id = "<тип хранилища>" disk_size = <размер хранилища в гигабайтах> } host { zone = "<зона доступности>" subnet_id = "<идентификатор подсети>" } } resource "yandex_vpc_network" "<имя сети>" { name = "<имя сети>" } resource "yandex_vpc_subnet" "<имя подсети>" { name = "<имя подсети>" zone = "<зона доступности>" network_id = "<идентификатор сети>" v4_cidr_blocks = ["<диапазон>"] }
Включенная защита от удаления кластера не помешает подключиться вручную и удалить содержимое базы данных.
-
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_redis_cluster" "<имя кластера>" { ... maintenance_window { type = <тип технического обслуживания: ANYTIME или WEEKLY> day = <день недели для типа WEEKLY> hour = <час дня для типа WEEKLY> } ... }
Где:
type
— тип технического обслуживания:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.
-
Воспользуйтесь методом API create и передайте в запросе:
- Идентификатор каталога, в котором должен быть размещен кластер, в параметре
folderId
. - Имя кластера в параметре
name
. - Идентификаторы групп безопасности в параметре
securityGroupIds
. - Флаг
tlsEnabled=true
для создания кластера с поддержкой шифрованных SSL-соединений (для версии Redis 6.0 или старше).
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host
.
Допустим, нужно создать Redis-кластер со следующими характеристиками:
- Имя
myredis
. - Версия
6.0
. - Окружение —
production
. - Сеть
default
. - Один хост класса
hm1.nano
в подсетиb0rcctk2rvtr8efcch64
, в зоне доступностиru-central1-c
и группе безопасности с идентификаторомenp6saqnq4ie244g67sb
. - С поддержкой SSL-соединений.
- Хранилище на сетевых SSD-дисках (
network-ssd
) объемом 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Запустите следующую команду:
yc managed-redis cluster create \
--name myredis \
--redis-version 6.0 \
--environment production \
--network-name default \
--resource-preset hm1.nano \
--host zone-id=ru-central1-c,subnet-id=b0rcctk2rvtr8efcch64 \
--security-group-ids enp6saqnq4ie244g67sb \
--enable-tls \
--disk-type-id network-ssd \
--disk-size 16 \
--password=user1user1 \
--deletion-protection=true
Допустим, нужно создать Redis-кластер и сеть для него со следующими характеристиками:
- Имя
myredis
. - Версия
6.0
. - Окружение —
PRODUCTION
. - Облако с идентификатором
b1gq90dgh25bebiu75o
. - Каталог с идентификатором
b1gia87mbaomkfvsleds
. - Новая сеть
mynet
. - Один хост класса
s2.micro
в новой подсетиmysubnet
, в зоне доступностиru-central1-c
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - Новая группа безопасности
redis-sg
, разрешающая подключения через порт6380
с любых адресов подсетиmysubnet
. - С поддержкой SSL-соединений.
- Хранилище на сетевых SSD-дисках (
network-ssd
) объемом 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "b1gia87mbaomkfvsleds"
zone = "ru-central1-c"
}
resource "yandex_mdb_redis_cluster" "myredis" {
name = "myredis"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.redis-sg.id ]
tls_enabled = true
deletion_protection = true
config {
password = "user1user1"
version = "6.0"
}
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
host {
zone = "ru-central1-c"
subnet_id = yandex_vpc_subnet.mysubnet.id
}
}
resource "yandex_vpc_network" "mynet" { name = "mynet" }
resource "yandex_vpc_security_group" "redis-sg" {
name = "redis-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Redis"
port = 6380
protocol = "TCP"
v4_cidr_blocks = ["10.5.0.0/24"]
}
egress {
description = "Redis"
port = 6380
protocol = "TCP"
v4_cidr_blocks = ["10.5.0.0/24"]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-c"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Создание шардированного кластера
Допустим, нужно создать шардированный Redis-кластер со следующими характеристиками:
- Имя
myredis
. - Окружение
PRODUCTION
. - Облако с идентификатором
b1gq90dgh25bebiu75o
. - Каталог с идентификатором
b1gia87mbaomkfvsleds
. - Новая сеть
mynet
. - Три подсети в сети
mynet
, по одной в каждой зоне доступности:subnet-a
с диапазоном10.1.0.0/24
;subnet-b
с диапазоном10.2.0.0/24
;subnet-c
с диапазоном10.3.0.0/24
.
- Три хоста класса
s2.micro
, по одному в каждой подсети. - Новая группа безопасности
redis-sg
, разрешающая подключения через порты6379
и26379
(Redis Sentinel) с любых адресов подсетей. - Хранилище на сетевых SSD-дисках (
network-ssd
) объемом 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
terraform {
required_providers {
yandex = {
source = "yandex-cloud/yandex"
}
}
}
provider "yandex" {
token = "<OAuth или статический ключ сервисного аккаунта>"
cloud_id = "b1gq90dgh25bebiu75o"
folder_id = "b1gia87mbaomkfvsleds"
zone = "ru-central1-c"
}
resource "yandex_mdb_redis_cluster" "myredis" {
name = "myredis"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [yandex_vpc_security_group.redis-sg.id]
sharded = true
deletion_protection = true
config {
password = "user1user1"
}
resources {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 16
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.subnet-a.id
shard_name = "shard1"
}
host {
zone = "ru-central1-b"
subnet_id = yandex_vpc_subnet.subnet-b.id
shard_name = "shard2"
}
host {
zone = "ru-central1-c"
subnet_id = yandex_vpc.subnet.subnet-c.id
shard_name = "shard3"
}
}
resource "yandex_vpc_network" "mynet" { name = "mynet" }
resource "yandex_vpc_subnet" "subnet-a" {
name = "subnet-a"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.1.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet-b" {
name = "subnet-b"
zone = "ru-central1-b"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.2.0.0/24"]
}
resource "yandex_vpc_subnet" "subnet-c" {
name = "subnet-c"
zone = "ru-central1-c"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.3.0.0/24"]
}
resource "yandex_vpc_security_group" "redis-sg" {
name = "redis-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Redis"
port = 6379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
egress {
description = "Redis"
port = 6379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
ingress {
description = "Redis Sentinel"
port = 26379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
egress {
description = "Redis Sentinel"
port = 26379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
}