Создание кластера Valkey™
Кластер Valkey™ — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста: хост-мастер принимает запросы на запись, асинхронно дублируя изменения в репликах.
Подробнее об устройстве кластера Yandex Managed Service for Valkey™ см. в разделе Взаимосвязь ресурсов сервиса.
Примечание
- Количество хостов, которые можно создать вместе с кластером Valkey™, зависит от выбранного типа диска, класса хостов и использования шардирования.
- Доступные типы диска зависят от выбранного класса хостов.
Создать кластер
Для создания кластера Yandex Managed Service for Valkey™ нужна роль vpc.user и роль managed-redis.editor или выше. О том, как назначить роль, см. документацию Identity and Access Management.
Примечание
Действуют следующие ограничения на способы создания шардированных кластеров:
- Кластер с одним шардом можно создать с помощью CLI, Terraform или API.
- Кластер с двумя шардами нельзя создать, но можно добавить шард в существующий кластер с одним шардом.
- Кластер с тремя и более шардами можно создать с помощью консоли управления, CLI, Terraform или API.
Для нешардированных кластеров ограничений нет.
Чтобы создать кластер Yandex Managed Service for Valkey™:
-
В консоли управления
перейдите в каталог, в котором нужно создать кластер БД. -
Выберите сервис Yandex Managed Service for Valkey™.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в рамках каталога.
-
(Опционально) Добавьте описание кластера.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION
— для стабильных версий ваших приложений.PRESTABLE
— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Выберите версию СУБД.
-
(Опционально) Добавьте метки.
-
Если требуется, включите шардирование кластера.
Важно
Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже включить в нем шардирование.
-
Если требуется, включите поддержку шифрованных TLS-соединений с кластером.
Важно
Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.
-
При необходимости включите использование FQDN вместо IP-адресов.
Примечание
Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
-
Выберите настройки персистентности данных.
-
-
В блоке Ресурсы:
-
В поле Платформа выберите платформу.
-
Укажите Тип виртуальной машины, на которой будут развернуты хосты.
-
Выберите Класс хоста.
-
Выберите тип диска:
- либо более гибкое хранилище — на сетевых SSD-дисках (
network-ssd
) или на нереплицируемых SSD-дисках (network-ssd-nonreplicated
); - либо более быстрое хранилище — на локальных SSD-дисках (
local-ssd
).
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформ Intel Broadwell и Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски — с шагом 93 ГБ.
Важно
Тип диска нельзя изменить после создания кластера.
- либо более гибкое хранилище — на сетевых SSD-дисках (
-
Выберите размер хранилища. Доступный размер хранилища ограничен квотами и лимитами.
-
-
В блоке Сетевые настройки выберите:
- Облачную сеть для размещения кластера.
- Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты задайте конфигурацию хостов:
-
Чтобы изменить настройки отдельного хоста, нажмите на значок
в строке с его именем.- Зона доступности — выберите зону доступности.
- Подсеть — укажите подсеть в выбранной зоне доступности.
- Публичный доступ — разрешает доступ к хосту из интернета, если кластер создается с включенной настройкой Поддержка TLS.
- Приоритет мастера — приоритет назначения хоста мастером при выходе из строя основного мастера.
- Имя шарда — позволяет изменить имя шарда для хоста. Поле доступно, только если кластер создается с включенной настройкой Шардирование кластера.
-
Чтобы добавить хосты в кластер, нажмите кнопку Добавить хост.
Если вы включили шардирование в кластере и выбрали тип диска local-ssd, добавьте не менее двух хостов на шард.
-
-
В блоке Настройки СУБД:
-
В поле Пароль укажите пароль пользователя.
Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению
[a-zA-Z0-9@=+?*.,!&#$^<>_-]*
. -
Если требуется, задайте настройки СУБД.
-
-
В блоке Сервисные настройки задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — время по UTC, когда требуется начать резервное копирование кластера (в 24-часовом формате). Если время не задано, резервное копирование начнется в 22:00 UTC.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Защита от удаления — управляет защитой кластера, его баз данных и пользователей от непреднамеренного удаления.
Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
-
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер Yandex Managed Service for Valkey™:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
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 <окружение> \ --network-name <имя_сети> \ --host zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<публичный_доступ>,` `replica-priority=<приоритет_хоста> \ --security-group-ids <список_идентификаторов_групп_безопасности> \ --enable-tls \ --resource-preset <класс_хоста> \ --disk-size <размер_хранилища_ГБ> \ --disk-type-id <network-ssd|network-ssd-nonreplicated|local-ssd> \ --password=<пароль_пользователя> \ --backup-window-start <время> \ --deletion-protection \ --announce-hostnames <использование_FQDN_вместо_IP-адресов>
Где:
-
--environment
— окружение:prestable
илиproduction
. -
--host
— параметры хоста:zone-id
— зона доступности.subnet-id
— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.assign-public-ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
.replica-priority
— приоритет назначения хоста мастером при выходе из строя основного мастера.
-
--disk-type-id
— тип диска.Важно
Тип диска нельзя изменить после создания кластера.
-
--websql-access
— разрешает выполнять SQL-запросы к базам данных кластера из консоли управления Yandex Cloud с помощью сервиса Yandex WebSQL. Значение по умолчанию —false
. -
--backup-window-start
— время начала резервного копирования в форматеЧЧ:ММ:СС
. -
--deletion-protection
— защита от удаления кластера. -
--announce-hostnames
— настройка, определяющая, использовать ли FQDN вместо IP-адресов:true
илиfalse
.Примечание
Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
Идентификатор подсети
subnet-id
необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению
[a-zA-Z0-9@=+?*.,!&#$^<>_-]*
.Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Если вы создаёте шардированный кластер с типом диска local-ssd, укажите в команде не менее двух хостов на шард.
Примечание
По умолчанию при создании кластера устанавливается режим технического обслуживания
anytime
— в любое время. Вы можете установить конкретное время обслуживания при изменении настроек кластера. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Yandex Managed Service for Valkey™:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер базы данных — описание кластера и его хостов. При необходимости здесь же можно задать настройки СУБД.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла для создания нешардированного кластера с поддержкой SSL:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = "<идентификатор_сети>" security_group_ids = [ "<список_идентификаторов_групп_безопасности>" ] tls_enabled = true deletion_protection = <защита_от_удаления> announce_hostnames = <использование_FQDN_вместо_IP-адресов> config { password = "<пароль>" version = "<версия_Valkey™>" } resources { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } host { zone = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" assign_public_ip = <публичный_доступ> replica_priority = <приоритет_хоста> } } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = "<идентификатор_сети>" v4_cidr_blocks = ["<диапазон>"] }
Где:
-
environment
— окружение:PRESTABLE
илиPRODUCTION
. -
deletion_protection
— защита от удаления кластера:true
илиfalse
. -
announce_hostnames
— настройка, определяющая, использовать ли FQDN вместо IP-адресов:true
илиfalse
.Примечание
Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
-
version
— версия Valkey™: 7.2. -
host
— параметры хоста:zone_id
— зона доступности.subnet_id
— идентификатор подсети в выбранной зоне доступности.assign_public_ip
— публичный доступ к хосту:true
илиfalse
.replica_priority
— приоритет назначения хоста мастером при выходе из строя основного мастера.
Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению
[a-zA-Z0-9@=+?*.,!&#$^<>_-]*
.Включенная защита от удаления не помешает подключиться вручную и удалить содержимое базы данных.
Если вы создаёте шардированный кластер с типом диска local-ssd, укажите в конфигурационном файле не менее двух хостов на шард.
Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_redis_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }
Где:
type
— тип технического обслуживания. Принимает значения:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся FQDN хостов кластера. Проверить появление ресурсов и их настройки можно в консоли управления
.Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
- создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts
, например:resource "yandex_mdb_redis_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа delete = "30m" # 30 минут } }
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Создайте файл
body.json
и добавьте в него следующее содержимое:{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "configSpec": { "version": "<версия_Valkey™>", "resources": { "resourcePresetId": "<класс_хостов>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" }, "access": { "webSql": <доступ_из_WebSQL> }, "redis": { "password": "<пароль_пользователя>" } }, "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "shardName": "<название_шарда>", "replicaPriority": "<приоритет_хоста>", "assignPublicIp": <публичный_доступ_к_хосту_кластера> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ], "networkId": "<идентификатор_сети>", "sharded": <шардирование_кластера>, "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "tlsEnabled": <поддержка_шифрованных_TLS-соединений>, "deletionProtection": <защита_от_удаления_кластера>, "announceHostnames": <использование_FQDN_вместо_IP-адресов> }
Где:
-
folderId
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение:PRESTABLE
илиPRODUCTION
. -
configSpec
— настройки кластера:-
version
— версия Valkey™. -
resources
— ресурсы кластера:resourcePresetId
— класс хостов;diskSize
— размер диска в байтах;diskTypeId
— тип диска.
-
access.webSql
— доступ к базам данных кластера из консоли управления Yandex Cloud с помощью сервиса Yandex WebSQL:true
илиfalse
. -
redis.password
— пароль пользователя.
-
-
hostSpecs
— параметры хоста:zoneId
— зона доступности.subnetId
— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shardName
— название шарда для хоста. Этот параметр используется, только если для параметраsharded
указано значениеtrue
.replicaPriority
— приоритет назначения хоста мастером при выходе из строя основного мастера.assignPublicIp
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
. Включить публичный доступ можно, только если для параметраtlsEnabled
указано значениеtrue
.
-
networkId
— идентификатор сети, в которой будет размещен кластер. -
sharded
— шардирование кластера:true
илиfalse
.Важно
Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже включить в нем шардирование.
Если вы создаете шардированный кластер с типом диска
local-ssd
, укажите не менее двух хостов на шард, добавив нужное количество блоковhostSpecs
. -
securityGroupIds
— идентификаторы групп безопасности. -
tlsEnabled
— поддержка шифрованных TLS-соединений с кластером:true
илиfalse
.Важно
Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.
-
deletionProtection
— защита от удаления кластера:true
илиfalse
.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
announceHostnames
— использование FQDN вместо IP-адресов:true
илиfalse
.Примечание
Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-redis/v1/clusters' \ --data "@body.json"
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Создайте файл
body.json
и добавьте в него следующее содержимое:{ "folder_id": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "config_spec": { "version": "<версия_Valkey™>", "resources": { "resource_preset_id": "<класс_хостов>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" }, "access": { "web_sql": <доступ_из_WebSQL> }, "redis": { "password": "<пароль_пользователя>" } }, "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "shard_name": "<название_шарда>", "replica_priority": "<приоритет_хоста>", "assign_public_ip": <публичный_доступ_к_хосту_кластера> }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ], "network_id": "<идентификатор_сети>", "sharded": <шардирование_кластера>, "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "tls_enabled": <поддержка_шифрованных_TLS-соединений>, "deletion_protection": <защита_от_удаления_кластера>, "announce_hostnames": <использование_FQDN_вместо_IP-адресов> }
Где:
-
folder_id
— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name
— имя кластера. -
environment
— окружение:PRESTABLE
илиPRODUCTION
. -
config_spec
— настройки кластера:-
version
— версия Valkey™. -
resources
— ресурсы кластера:resource_preset_id
— класс хостов;disk_size
— размер диска в байтах;disk_type_id
— тип диска.
-
access.web_sql
— доступ к базам данных кластера из консоли управления Yandex Cloud с помощью сервиса Yandex WebSQL:true
илиfalse
. -
redis.password
— пароль пользователя.
-
-
host_specs
— параметры хоста:zone_id
— зона доступности.subnet_id
— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shard_name
— название шарда для хоста. Этот параметр используется, только если для параметраsharded
указано значениеtrue
.replica_priority
— приоритет назначения хоста мастером при выходе из строя основного мастера.assign_public_ip
— доступность хоста из интернета по публичному IP-адресу:true
илиfalse
. Включить публичный доступ можно, только если для параметраtls_enabled
указано значениеtrue
.
-
network_id
— идентификатор сети, в которой будет размещен кластер. -
sharded
— шардирование кластера:true
илиfalse
.Важно
Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже включить в нем шардирование.
Если вы создаете шардированный кластер с типом диска
local-ssd
, укажите не менее двух хостов на шард, добавив нужное количество блоковhost_specs
. -
security_group_ids
— идентификаторы групп безопасности. -
tls_enabled
— поддержка шифрованных TLS-соединений с кластером:true
илиfalse
.Важно
Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.
-
deletion_protection
— защита от удаления кластера:true
илиfalse
.Включенная защита от удаления не помешает подключиться к кластеру вручную и удалить его.
-
announce_hostnames
— использование FQDN вместо IP-адресов:true
илиfalse
.Примечание
Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.Create \ < body.json
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Создать копию кластера
Вы можете создать кластер Valkey™, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера Valkey™ импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер Valkey™ обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера Valkey™:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tf
и содержимым:resource "yandex_mdb_redis_cluster" "old" { }
-
Запишите идентификатор первоначального кластера Valkey™ в переменную окружения:
export REDIS_CLUSTER_ID=<идентификатор_кластера>
Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера Valkey™ в конфигурацию Terraform:
terraform import yandex_mdb_redis_cluster.old ${REDIS_CLUSTER_ID}
-
Получите импортированную конфигурацию:
terraform show
-
Скопируйте ее из терминала и вставьте в файл с расширением
.tf
. -
Расположите файл в новой директории
imported-cluster
. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
- Укажите новое имя кластера в строке
resource
и параметреname
. - Удалите параметры
created_at
,health
,id
иstatus
. - В блоке
config
добавьте параметрpassword
. - Если в блоке
config
указано значение параметраnotify_keyspace_events = "\"\""
, удалите этот параметр. - Если указано значение параметра
sharded = false
, в блокахhost
удалите параметрыshard_name
. - Если в блоке
maintenance_window
указано значение параметраtype = "ANYTIME"
, удалите параметрhour
. - (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
- Укажите новое имя кластера в строке
-
В директории
imported-cluster
получите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-cluster
и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
- создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
- изменение — 60 минут;
- удаление — 15 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
delete = "30m" # 30 минут
}
}
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host
.
Создайте кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:
- Имя
myredis
. - Версия
7.2
. - Окружение —
production
. - Сеть
default
. - Один хост класса
hm2.nano
в подсетиb0rcctk2rvtr********
, в зоне доступностиru-central1-a
и группе безопасности с идентификаторомenp6saqnq4ie********
, с публичным доступом и приоритетом хоста50
. - С поддержкой SSL-соединений.
- Хранилище на сетевых SSD-дисках (
network-ssd
) размером 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Выполните следующую команду:
yc managed-redis cluster create \
--name myredis \
--redis-version 7.2 \
--environment production \
--network-name default \
--resource-preset hm2.nano \
--host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr********,assign-public-ip=true,replica-priority=50 \
--security-group-ids enp6saqnq4ie******** \
--enable-tls \
--disk-type-id network-ssd \
--disk-size 16 \
--password=user1user1 \
--deletion-protection
Создайте кластер Yandex Managed Service for Valkey™ и сеть для него с тестовыми характеристиками:
- Имя
myredis
. - Версия
7.2
. - Окружение —
PRODUCTION
. - Облако с идентификатором
b1gq90dgh25********
. - Каталог с идентификатором
b1gia87mbaom********
. - Новая сеть
mynet
. - Один хост класса
hm2.nano
в новой подсетиmysubnet
, в зоне доступностиru-central1-a
, с публичным доступом и приоритетом хоста50
. Подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - Новая группа безопасности
redis-sg
, разрешающая подключения через порт6380
с любых адресов подсетиmysubnet
. - С поддержкой SSL-соединений.
- Хранилище на сетевых SSD-дисках (
network-ssd
) размером 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
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 = "7.2"
}
resources {
resource_preset_id = "hm2.nano"
disk_type_id = "network-ssd"
disk_size = 16
}
host {
zone = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
assign_public_ip = true
replica_priority = 50
}
}
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 = "Valkey™"
port = 6380
protocol = "TCP"
v4_cidr_blocks = ["10.5.0.0/24"]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Создание шардированного кластера с одним шардом
Создайте шардированный кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:
- Имя
myredis
. - Версия
7.2
. - Окружение
production
. - С включенным шардированием.
- С поддержкой SSL-соединений.
- С защитой от случайного удаления кластера.
- Сеть
default
. - Группа безопасности с идентификатором
enp6saqnq4ie********
. - Класс хостов
hm2.nano
. - Один хост в шарде
shard1
, в подсетиb0rcctk2rvtr********
, в зоне доступностиru-central1-a
, с публичным доступом и приоритетом хоста50
. - Хранилище на сетевых SSD-дисках (
network-ssd
) размером 16 ГБ. - Пароль
user1user1
.
Выполните следующую команду:
yc managed-redis cluster create \
--name myredis \
--redis-version 7.2 \
--environment production \
--sharded \
--enable-tls \
--deletion-protection \
--network-name default \
--security-group-ids enp6saqnq4ie******** \
--resource-preset hm2.nano \
--host shard-name=shard1,subnet-id=b0rcctk2rvtr********,zone-id=ru-central1-a,assign-public-ip=true,replica-priority=50 \
--disk-type-id network-ssd \
--disk-size 16 \
--password user1user1
Создайте шардированный кластер Yandex Managed Service for Valkey™ и сеть для него с тестовыми характеристиками:
- Имя
myredis
. - Версия
7.2
. - Окружение
PRODUCTION
. - С включенным шардированием.
- С поддержкой SSL-соединений.
- С защитой от случайного удаления кластера.
- Новая сеть
mynet
, которая будет состоять из одной подсети. Эта новая подсетьmysubnet
будет иметь диапазон10.5.0.0/24
. - Новая группа безопасности
redis-sg
, разрешающая подключения через порт6380
с любых адресов подсетиmysubnet
. - Класс хостов
hm2.nano
. - Один хост в шарде
shard1
, в подсетиmysubnet
, в зоне доступностиru-central1-a
, с публичным доступом и приоритетом хоста50
. - Хранилище на сетевых SSD-дисках (
network-ssd
) размером 16 ГБ. - Пароль
user1user1
.
Конфигурационный файл для такого кластера выглядит так:
resource "yandex_mdb_redis_cluster" "myredis" {
name = "myredis"
environment = "PRODUCTION"
sharded = true
tls_enabled = true
deletion_protection = true
network_id = yandex_vpc_network.mynet.id
security_group_ids = [yandex_vpc_security_group.redis-sg.id]
config {
version = "7.2"
password = "user1user1"
}
resources {
resource_preset_id = "hm2.nano"
disk_type_id = "network-ssd"
disk_size = 16
}
host {
shard_name = "shard1"
subnet_id = yandex_vpc_subnet.mysubnet.id
zone = "ru-central1-a"
assign_public_ip = true
replica_priority = 50
}
}
resource "yandex_vpc_network" "mynet" { name = "mynet" }
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
resource "yandex_vpc_security_group" "redis-sg" {
name = "redis-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Valkey™"
port = 6380
protocol = "TCP"
v4_cidr_blocks = ["10.5.0.0/24"]
}
}
Создание шардированного кластера с тремя шардами
Создайте шардированный кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:
- Имя
myredis
. - Версия
7.2
. - Окружение
PRODUCTION
. - Облако с идентификатором
b1gq90dgh25********
. - Каталог с идентификатором
b1gia87mbaom********
. - Новая сеть
mynet
. - Три подсети в сети
mynet
, по одной в каждой зоне доступности:subnet-a
с диапазоном10.1.0.0/24
;subnet-b
с диапазоном10.2.0.0/24
;subnet-d
с диапазоном10.3.0.0/24
.
- Три хоста класса
hm2.nano
, по одному в каждой подсети. - Новая группа безопасности
redis-sg
, разрешающая подключения через порты6379
и26379
(Valkey™ Sentinel) с любых адресов подсетей. - Хранилище на сетевых SSD-дисках (
network-ssd
) размером 16 ГБ. - Пароль
user1user1
. - С защитой от случайного удаления кластера.
Конфигурационный файл для такого кластера выглядит так:
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"
version = "7.2"
}
resources {
resource_preset_id = "hm2.nano"
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-d"
subnet_id = yandex_vpc_subnet.subnet-d.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-d" {
name = "subnet-d"
zone = "ru-central1-d"
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 = "Valkey™"
port = 6379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
ingress {
description = "Valkey™ Sentinel"
port = 26379
protocol = "TCP"
v4_cidr_blocks = [
"10.1.0.0/24",
"10.2.0.0/24",
"10.3.0.0/24"
]
}
}