[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for Valkey™](../index.md) > [Пошаговые инструкции](index.md) > Кластеры > Создание кластера

# Создание кластера Valkey™


{% note info %}

В [регионе Казахстан](../../overview/concepts/region.md) доступны только [платформы](../../compute/concepts/vm-platforms.md#standard-platforms) `standard-v3` (Intel Ice Lake) и `standard-v3-t4i` (Intel Ice Lake with T4i). Другие типы платформ, кластеры GPU и выделенные хосты недоступны.

{% endnote %}



[Кластер](../../glossary/cluster.md) Valkey™ — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста: хост-мастер принимает запросы на запись, асинхронно дублируя изменения в репликах.

Информация об устройстве кластера Yandex Managed Service for Valkey™ приведена в разделе [Взаимосвязь ресурсов сервиса](../concepts/index.md).

{% note info %}

* Количество хостов, которые можно создать вместе с кластером Valkey™, зависит от выбранного [типа диска](../concepts/storage.md#storage-type-selection), [класса хостов](../concepts/instance-types.md#available-flavors) и использования [шардирования](../concepts/sharding.md).
* Доступные типы диска [зависят](../concepts/storage.md) от выбранного [класса хостов](../concepts/instance-types.md).

{% endnote %}





## Роли для создания кластера {#roles}

Для создания кластера Yandex Managed Service for Valkey™ и работы с ним вашему аккаунту в Yandex Cloud нужны роли:

* [managed-redis.editor](../security/index.md#managed-redis-editor) или выше — чтобы создать кластер;
* [vpc.user](../../vpc/security/index.md#vpc-user) — чтобы работать с [сетью](../../vpc/concepts/network.md#network) кластера;
* [mdb.viewer](../../iam/roles-reference.md#mdb-viewer) — чтобы просматривать кластеры управляемых баз данных (MDB) на дашборде в [консоли управления](https://kz.console.yandex.cloud).

О назначении ролей читайте в [документации Yandex Identity and Access Management](../../iam/operations/roles/grant.md).


## Создать кластер {#create-cluster}

{% note info %}

Действуют следующие ограничения на способы создания шардированных кластеров:

* Кластер с одним шардом можно создать с помощью CLI, Terraform или API.
* Кластер с двумя шардами нельзя создать, но можно [добавить шард](shards.md#add) в существующий кластер с одним шардом.
* Кластер с тремя и более шардами можно создать с помощью консоли управления, CLI, Terraform или API.

Для нешардированных кластеров ограничений нет.

{% endnote %}

{% list tabs group=instructions %}

- Консоль управления {#console}

  
  <iframe width="640" height="360" src="https://runtime.strm.yandex.ru/player/video/vplv3sjb2viq3egbqxf5?autoplay=0&mute=0" allow="autoplay; fullscreen; picture-in-picture; encrypted-media" frameborder="0" scrolling="no"></iframe>


  Чтобы создать кластер Yandex Managed Service for Valkey™:

  1. В [консоли управления](https://kz.console.yandex.cloud) перейдите в каталог, в котором нужно создать кластер БД.
  1. Перейдите в сервис **Yandex Managed Service for&nbsp;Valkey™**.
  1. Нажмите кнопку **Создать кластер**.
  1. В блоке **Базовые параметры**:

     * Введите имя кластера в поле **Имя кластера**. Имя кластера должно быть уникальным в рамках каталога.
     * (Опционально) Добавьте описание кластера.
     * Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
       * `PRODUCTION` — для стабильных версий ваших приложений.
       * `PRESTABLE` — для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
     * Выберите версию СУБД.
     * (Опционально) Добавьте метки.
     * Если требуется, включите [шардирование кластера](../concepts/sharding.md).

          {% note warning %}

          Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже [включить в нем шардирование](update.md#enable-sharding).

          {% endnote %}

     * Если требуется, включите поддержку шифрованных TLS-соединений с кластером.

          {% note warning %}

          Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.

          {% endnote %}

     * При необходимости включите [использование FQDN вместо IP-адресов](../concepts/network.md#fqdn-ip-setting).

        {% note info %}
        
        Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
        
        {% endnote %}

     * Выберите режим [персистентности данных](../concepts/replication.md#persistence).

  1. В блоке **Ресурсы**:

     * В поле **Платформа** выберите платформу.
     * Укажите **Тип** виртуальной машины, на которой будут развернуты хосты.
     * Выберите **Класс хоста**.

     
     * Выберите [тип диска](../concepts/storage.md):
       * либо более гибкое хранилище — на сетевых SSD-дисках (`network-ssd`) или на нереплицируемых SSD-дисках (`network-ssd-nonreplicated`);
       * либо более быстрое хранилище — на локальных SSD-дисках (`local-ssd`).

       От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
       
       * Сетевые SSD-диски — с шагом 1 ГБ.
       * Локальные SSD-диски:
           * для платформ **Intel Broadwell** и **Intel Cascade Lake** — с шагом 100 ГБ;
           * для платформ **Intel Ice Lake** и **AMD Zen 4** — с шагом 368 ГБ.
       * Нереплицируемые SSD-диски — с шагом 93 ГБ.


     * Выберите размер хранилища. Доступный размер хранилища ограничен [квотами и лимитами](../concepts/limits.md#mrd-limits).

     * В поле **Увеличивать размер** задайте соответствующие условия, чтобы:
     
         * Размер хранилища увеличился в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window), когда хранилище окажется заполнено более чем на указанную долю (%). Если вы задали этот параметр, настройте расписание технического обслуживания.
     
         * Размер хранилища увеличился незамедлительно, когда хранилище окажется заполнено более чем на указанную долю (%).
     
             {% note warning %}
     
             Если заданы оба условия, порог для незамедлительного увеличения должен быть выше, чем для планового.
     
             {% endnote %}
     
     * В поле **Максимальный размер хранилища** укажите максимальный размер хранилища, который может быть установлен при автоматическом увеличении размера хранилища.
     
     
     {% note warning %}
     
     * Размер хранилища не может быть уменьшен после автоматического увеличения.
     * Во время изменения размера хранилища хосты кластера будут по очереди остановлены и обновлены.
     
     {% endnote %}

     
     * (Опционально) Выберите опцию **Зашифрованный диск**, чтобы зашифровать диск [пользовательским ключом KMS](../../kms/concepts/key.md).

       * Чтобы [создать](../../kms/operations/key.md#create) новый ключ, нажмите кнопку **Создать**.

       * Чтобы использовать созданный ранее ключ, выберите его в поле **Ключ KMS**.

       Подробнее о шифровании дисков читайте в разделе [Хранилище](../concepts/storage.md#disk-encryption).


  
    1. В блоке **Сетевые настройки** выберите:
       * [Облачную сеть](../../vpc/concepts/network.md#network) для размещения кластера.
       * Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная [настройка групп безопасности](connect/index.md#configuring-security-groups) для того, чтобы можно было подключаться к кластеру.


  1. В блоке **Хосты** задайте конфигурацию хостов:

      * Чтобы изменить настройки отдельного хоста, нажмите на значок ![pencil](../../_assets/console-icons/pencil.svg) в строке с его именем.

          * **Зона доступности** — выберите [зону доступности](../../overview/concepts/geo-scope.md).

          
          * **Подсеть** — укажите [подсеть](../../vpc/concepts/network.md#subnet) в выбранной зоне доступности.
          * **Публичный доступ** — разрешает доступ к хосту из интернета, если кластер создается с включенной настройкой **Поддержка TLS**.


          * **Приоритет мастера** — приоритет назначения хоста мастером при [выходе из строя основного мастера](../concepts/replication.md#master-failover).
          * **Имя шарда** — позволяет изменить имя шарда для хоста. Поле доступно, только если кластер создается с включенной настройкой **Шардирование кластера**.

      * Чтобы добавить хосты в кластер, нажмите кнопку **Добавить хост**.

      Если вы включили шардирование в кластере и выбрали тип диска **local-ssd**, добавьте не менее двух хостов на шард.

  1. В блоке **Настройки СУБД**:

      * В поле **Пароль** укажите пароль пользователя.

         Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению `[a-zA-Z0-9@=+?*.,!&#$^<>_-]*`.

      * Если требуется, задайте [настройки СУБД](../concepts/settings-list.md).

  1. В блоке **Сервисные настройки** задайте дополнительные настройки кластера:

      - **Начало резервного копирования (UTC)** — время по UTC, когда требуется начать [резервное копирование](cluster-backups.md) кластера (в 24-часовом формате). Если время не задано, резервное копирование начнется в 22:00 UTC.
      
      - **Обслуживание** — настройки времени [технического обслуживания](../concepts/maintenance.md):
      
          * Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт **В любое время** (по умолчанию).
          * Чтобы указать предпочтительное время начала обслуживания, выберите пункт **По расписанию** и укажите день недели и интервал времени по UTC. Например, можно выбрать время, когда кластер наименее загружен.
          
          Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и т. д.
      
      - **Защита от удаления** — управляет защитой кластера от непреднамеренного удаления.
      
          Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

  1. В блоке **Модули** подключите необходимые [модули Valkey™](../concepts/modules.md).

      Для модуля **Search** настройте параметры **Количество потоков чтения** и **Количество потоков записи**.

      {% note warning %}
      
      После подключения модули невозможно отключить.
      
      {% endnote %}

  1. Нажмите кнопку **Создать кластер**.

- CLI {#cli}

  Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../cli/quickstart.md#install).

  По умолчанию используется каталог, указанный при [создании](../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

  Чтобы создать кластер Yandex Managed Service for Valkey™:

  
  1. Проверьте, есть ли в каталоге подсети для хостов кластера:

     ```bash
     yc vpc subnet list
     ```

     Если ни одной подсети в каталоге нет, [создайте нужные подсети](../../vpc/operations/subnet-create.md) в сервисе VPC.


  1. Посмотрите описание команды CLI для создания кластера:

      ```bash
      yc managed-redis cluster create --help
      ```

  1. При создании кластера с помощью CLI нельзя напрямую указать тип хоста и объем оперативной памяти. Вместо этого выберите подходящий [класс хостов](../concepts/instance-types.md). Чтобы просмотреть доступные классы хостов, выполните команду:

     ```bash
     yc managed-redis resource-preset list
     ```

  1. Укажите параметры кластера в команде создания (в примере приведены не все флаги):

      
      ```bash
      yc managed-redis cluster create \
        --name <имя_кластера> \
        --environment <окружение> \
        --redis-version <версия_Valkey™> \
        --network-name <имя_сети> \
        --host zone-id=<зона_доступности>,`
              `subnet-id=<идентификатор_подсети>,`
              `assign-public-ip=<публичный_доступ>,`
              `replica-priority=<приоритет_хоста> \
        --security-group-ids <список_идентификаторов_групп_безопасности> \
        --enable-tls \
        --persistence-mode <режим_персистентности> \
        --resource-preset <класс_хоста> \
        --disk-size <размер_хранилища_ГБ> \
        --disk-size-autoscaling disk-size-limit=<максимальный_размер_хранилища_в_гигабайтах>,`
                                `planned-usage-threshold=<процент_для_планового_увеличения>,`
                                `emergency-usage-threshold=<процент_для_незамедлительного_увеличения> \
        --disk-type-id <network-ssd|network-ssd-nonreplicated|local-ssd> \
        --password=<пароль_пользователя> \
        --backup-window-start <время> \
        --disk-encryption-key-id <идентификатор_ключа_KMS> \
        --deletion-protection \
        --announce-hostnames <использование_FQDN_вместо_IP-адресов> \
        --valkey-modules enable-valkey-search=<включить_модуль_Valkey-Search>,`
                         `valkey-search-reader-threads=<количество_потоков_обработки_запросов>,`
                         `valkey-search-writer-threads=<количество_потоков_индексации>,`
                         `enable-valkey-json=<включить_модуль_Valkey-JSON>,`
                         `enable-valkey-bloom=<включить_модуль_Valkey-Bloom>
      ```


      Где:
      * `--environment` — окружение: `prestable` или `production`.
      * `--redis-version` — версия Valkey™: `7.2-valkey`, `8.0-valkey`, `8.1-valkey` или `9.0-valkey`.
      * `--host` — параметры хоста:
         * `zone-id` — [зона доступности](../../overview/concepts/geo-scope.md).

         
         * `subnet-id` — [идентификатор подсети](../../vpc/concepts/network.md#subnet). Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.
         * `assign-public-ip` — доступность хоста из интернета по публичному IP-адресу: `true` или `false`.


         * `replica-priority` — приоритет назначения хоста мастером при [выходе из строя основного мастера](../concepts/replication.md#master-failover).
      * `--disk-type-id` — тип диска.


      * `--disk-size-autoscaling` — настройки автоматического увеличения размера хранилища:

        * `planned-usage-threshold` — процент заполнения хранилища, при котором хранилище будет увеличено в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window).
        
          Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
        
          Если вы задали этот параметр, [настройте](update.md#change-additional-settings) расписание технического обслуживания.
        
        * `emergency-usage-threshold` — процент заполнения хранилища, при котором хранилище будет увеличено немедленно.
        
          Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
        
          {% note warning %}
        
          Если заданы оба порога, значение `emergency-usage-threshold` должно быть не меньше `planned-usage-threshold`.
        
          {% endnote %}
        
        * `disk-size-limit` — максимальный размер хранилища в гигабайтах после увеличения.
        
        
        {% note warning %}
        
        * Размер хранилища не может быть уменьшен после автоматического увеличения.
        * Во время изменения размера хранилища хосты кластера будут по очереди остановлены и обновлены.
        
        {% endnote %}

      * `--persistence-mode` — режим [персистентности данных](../concepts/replication.md#persistence).

        Возможные значения:
        
        * `ON` — включить персистентность.
        * `OFF` — выключить персистентность.
        * `ON_REPLICAS` — включить персистентность только на репликах.

      * `--backup-window-start` — время начала резервного копирования в формате `ЧЧ:ММ:СС`.
      * `--deletion-protection` — защита кластера от непреднамеренного удаления: `true` или `false`.

        Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

      
      * `--disk-encryption-key-id` — шифрование диска [пользовательским ключом KMS](../../kms/concepts/key.md).

        Подробнее о шифровании дисков читайте в разделе [Хранилище](../concepts/storage.md#disk-encryption).


      * `--announce-hostnames` — настройка, определяющая, [использовать ли FQDN вместо IP-адресов](../concepts/network.md#fqdn-ip-setting): `true` или `false`.

        {% note info %}
        
        Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
        
        {% endnote %}

      * `--valkey-modules` — параметры [модулей Valkey™](../concepts/modules.md):
         * `enable-valkey-search` — подключить модуль `Valkey-Search`: `true` или `false`.
         * `valkey-search-reader-threads` — количество потоков обработки запросов в модуле `Valkey-Search`.
         * `valkey-search-writer-threads` — количество потоков индексации в модуле `Valkey-Search`.
         * `enable-valkey-json` — подключить модуль `Valkey-JSON`: `true` или `false`.
         * `enable-valkey-bloom` — подключить модуль `Valkey-Bloom`: `true` или `false`.

         {% note warning %}
         
         После подключения модули невозможно отключить.
         
         {% endnote %}

      Чтобы настроить время [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров), передайте параметр `--maintenance-window type=<тип_технического_обслуживания>`, где `type` принимает следующие значения:

      * `anytime` (по умолчанию) — в любое время.
      * `weekly` — по расписанию. Для этого значения дополнительно укажите:
          * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
          * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.
      
            > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

      
      Идентификатор подсети `subnet-id` необходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.


      Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению `[a-zA-Z0-9@=+?*.,!&#$^<>_-]*`.

      Если вы создаёте шардированный кластер с типом диска **local-ssd**, укажите в команде не менее двух хостов на шард.


- Terraform {#tf}

  [Terraform](https://www.terraform.io/) позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.
  
  Terraform распространяется под лицензией [Business Source License](https://github.com/hashicorp/terraform/blob/main/LICENSE), а [провайдер Yandex Cloud для Terraform](https://github.com/yandex-cloud/terraform-provider-yandex) — под лицензией [MPL-2.0](https://www.mozilla.org/en-US/MPL/2.0/).
  
  Подробная информация о ресурсах провайдера в документации на сайте [Terraform](https://www.terraform.io/docs/providers/yandex/index.html) или в [зеркале](../../terraform/index.md).

  Если у вас еще нет Terraform, [установите его и настройте провайдер Yandex Cloud](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
  
  
  Чтобы управлять инфраструктурой с помощью Terraform от имени сервисного аккаунта или пользовательских аккаунтов: аккаунта на Яндексе, федеративного аккаунта и локального пользователя, [аутентифицируйтесь](../../terraform/authentication.md) соответствующим способом.

  Чтобы создать кластер Yandex Managed Service for Valkey™:

    1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

       * Кластер базы данных — описание кластера и его хостов. При необходимости здесь же можно задать [настройки СУБД](../concepts/settings-list.md).
       * Сеть — описание [облачной сети](../../vpc/concepts/network.md#network), в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
       * Подсети — описание [подсетей](../../vpc/concepts/network.md#network), к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.

       Пример структуры конфигурационного файла для создания нешардированного кластера с поддержкой SSL:

       ```hcl
       resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
         name                = "<имя_кластера>"
         environment         = "<окружение>"
         network_id          = "<идентификатор_сети>"
         security_group_ids  = [ "<список_идентификаторов_групп_безопасности>" ]
         tls_enabled         = true
         deletion_protection = <защита_кластера_от_удаления>
         announce_hostnames  = <использование_FQDN_вместо_IP-адресов>
         persistence_mode    = "<режим_персистентности>"

         disk_size_autoscaling = {
           planned_usage_threshold   = "<процент_для_планового_увеличения>"
           emergency_usage_threshold = "<процент_для_незамедлительного_увеличения>"
           disk_size_limit           = "<максимальный_размер_хранилища_в_гибибайтах>"
         }

         config = {
           password = "<пароль>"
           version  = "<версия_Valkey™>"
         }

         resources = {
           resource_preset_id = "<класс_хоста>"
           disk_type_id       = "<тип_диска>"
           disk_size          = <размер_хранилища_ГБ>
         }

         hosts = {
           "host1" = {
             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`.

           Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

       * `disk_size_autoscaling` — настройки автоматического увеличения размера хранилища:

           * `planned_usage_threshold` — процент заполнения хранилища, при котором хранилище будет увеличено в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window).
           
               Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
           
               Если вы задали этот параметр, настройте расписание технического обслуживания в блоке `maintenance_window`.
           
           * `emergency_usage_threshold` — процент заполнения хранилища, при котором хранилище будет увеличено немедленно.
           
               Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
           
               {% note warning %}
           
               Если заданы оба порога, значение `emergency_usage_threshold` должно быть не меньше `planned_usage_threshold`.
           
               {% endnote %}
           
           * `disk_size_limit` — максимальный размер хранилища в гибибайтах после увеличения.
           
           
           {% note warning %}
           
           * Размер хранилища не может быть уменьшен после автоматического увеличения.
           * Во время изменения размера хранилища хосты кластера будут по очереди остановлены и обновлены.
           
           {% endnote %}

       * `announce_hostnames` — настройка, определяющая, [использовать ли FQDN вместо IP-адресов](../concepts/network.md#fqdn-ip-setting): `true` или `false`.

           {% note info %}
           
           Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
           
           {% endnote %}

       * `persistence_mode` — режим [персистентности данных](../concepts/replication.md#persistence).

           Возможные значения:
           
           * `ON` — включить персистентность.
           * `OFF` — выключить персистентность.
           * `ON_REPLICAS` — включить персистентность только на репликах.

       * `version` — версия Valkey™: `7.2-valkey`, `8.0-valkey`, `8.1-valkey` или `9.0-valkey`.
       * `hosts` — список хостов и их параметров в формате `"<имя_хоста>" = { <настройки_хоста> }`. Имя хоста должно быть уникальным в кластере.

           Для каждого хоста доступны следующие параметры:

           * `zone_id` — [зона доступности](../../overview/concepts/geo-scope.md).
           * `subnet_id` — [идентификатор подсети](../../vpc/concepts/network.md#subnet) в выбранной зоне доступности.
           * `assign_public_ip` — публичный доступ к хосту: `true` или `false`.
           * `replica_priority` — приоритет назначения хоста мастером при [выходе из строя основного мастера](../concepts/replication.md#master-failover).

       Допустимая длина пароля — от 8 до 128 символов. Пароль должен удовлетворять регулярному выражению `[a-zA-Z0-9@=+?*.,!&#$^<>_-]*`.

       Если вы создаете шардированный кластер с типом диска **local-ssd**, укажите в конфигурационном файле не менее двух хостов на шард.

    1. Чтобы настроить время [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок `maintenance_window`:
       
       ```hcl
       resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
         ...
         maintenance_window = {
           type = "<тип_технического_обслуживания>"
           day  = "<день_недели>"
           hour = <порядковый_номер_часового_интервала>
         }
         ...
       }
       ```
       
       Где:
       
       * `type` — тип технического обслуживания. Принимает значения:
           * `ANYTIME` — в любое время.
           * `WEEKLY` — по расписанию.
       * `day` — день недели для типа `WEEKLY`: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
       * `hour` — порядковый номер часового интервала по UTC для типа `WEEKLY`: от `1` до `24`.
       
         > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

    1. Чтобы зашифровать диск [пользовательским ключом KMS](../../kms/concepts/key.md), добавьте в описание кластера параметр `disk_encryption_key_id`:

        ```hcl
        resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
          ...
          disk_encryption_key_id = "<идентификатор_ключа_KMS>"
        }
        ```

        Подробнее о шифровании дисков читайте в разделе [Хранилище](../concepts/storage.md#disk-encryption).

    1. Чтобы подключить [модули Valkey™](../concepts/modules.md), добавьте в описание кластера блок `modules`:

        ```hcl
        resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
          ...
          modules = {
            valkey_bloom = {
              enabled = <включить_модуль_Valkey-Bloom>
            }
            valkey_json = {
              enabled = <включить_модуль_Valkey-JSON>
            }
            valkey_search = {
              enabled        = <включить_модуль_Valkey-Search>
              reader_threads = <количество_потоков_обработки_запросов>
              writer_threads = <количество_потоков_индексации>
            }
          }
        }
        ```

       Где:

        * `valkey_bloom.enabled` — подключить модуль `Valkey-Bloom`: `true` или `false`.
        * `valkey_json.enabled` — подключить модуль `Valkey-JSON`: `true` или `false`.
        * `valkey_search.enabled` — подключить модуль `Valkey-Search`: `true` или `false`.
        * `valkey_search.reader_threads` — количество потоков обработки запросов в модуле `Valkey-Search`.
        * `valkey_search.writer_threads` — количество потоков индексации в модуле `Valkey-Search`.

    1. Проверьте корректность настроек.

        1. В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
        1. Выполните команду:
        
           ```bash
           terraform validate
           ```
        
           Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Создайте кластер.

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

    После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся [FQDN хостов кластера](../concepts/network.md#hostname). Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).

    Более подробная информация о ресурсах, которые можно создать с помощью Terraform, в [документации провайдера](../../terraform/resources/mdb_redis_cluster_v2.md).

    {% note warning "Ограничения по времени" %}
    
    Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
    
    * создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
    * изменение — 60 минут;
    * удаление — 15 минут.
    
    Операции, длящиеся дольше указанного времени, прерываются.
    
    {% cut "Как изменить эти ограничения?" %}
    
    Добавьте к описанию кластера блок `timeouts`, например:
    
    ```hcl
    resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
      ...
      timeouts = {
        create = "1h30m" # Полтора часа
        update = "2h"    # 2 часа
        delete = "30m"   # 30 минут
      }
    }
    ```
    
    {% endcut %}
    
    {% endnote %}


- REST API {#api}

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Создайте файл `body.json` и добавьте в него следующее содержимое:



        
        ```json
        {
          "folderId": "<идентификатор_каталога>",
          "name": "<имя_кластера>",
          "environment": "<окружение>",
          "configSpec": {
            "version": "<версия_Valkey™>",
            "resources": {
              "resourcePresetId": "<класс_хостов>",
              "diskSize": "<размер_хранилища_в_байтах>",
              "diskTypeId": "<тип_диска>"
            },
            "diskSizeAutoscaling": {
              "plannedUsageThreshold": "<процент_для_планового_увеличения>",
              "emergencyUsageThreshold": "<процент_для_незамедлительного_увеличения>",
              "diskSizeLimit": "<максимальный_размер_хранилища_в_байтах>"
            },
            "redis": {
              "password": "<пароль_пользователя>"
            },
            "modules": {
              "valkeySearch": {
                "enabled": "<включить_модуль_Valkey-Search>",
                "readerThreads": "<количество_потоков_обработки_запросов>",
                "writerThreads": "<количество_потоков_индексации>"
              },
              "valkeyJson": {
                "enabled": "<включить_модуль_Valkey-JSON>"
              },
              "valkeyBloom": {
                "enabled": "<включить_модуль_Valkey-Bloom>"
              }
            }
          },
          "hostSpecs": [
            {
              "zoneId": "<зона_доступности>",
              "subnetId": "<идентификатор_подсети>",
              "shardName": "<название_шарда>",
              "replicaPriority": "<приоритет_хоста>",
              "assignPublicIp": <публичный_доступ_к_хосту_кластера>
            },
            { <аналогичный_набор_настроек_для_хоста_2> },
            { ... },
            { <аналогичный_набор_настроек_для_хоста_N> }
          ],
          "networkId": "<идентификатор_сети>",
          "sharded": <шардирование_кластера>,
          "securityGroupIds": [
            "<идентификатор_группы_безопасности_1>",
            "<идентификатор_группы_безопасности_2>",
            ...
            "<идентификатор_группы_безопасности_N>"
          ],
          "tlsEnabled": <поддержка_шифрованных_TLS-соединений>,
          "deletionProtection": <защита_кластера_от_удаления>,
          "announceHostnames": <использование_FQDN_вместо_IP-адресов>,
          "persistenceMode": "<режим_персистентности>",
          "maintenanceWindow": {
            "weeklyMaintenanceWindow": {
              "day": "<день_недели>",
              "hour": "<порядковый_номер_часового_интервала>"
            }
          }
        }
        ```


        Где:

        * `folderId` — идентификатор каталога. Его можно запросить со [списком каталогов в облаке](../../resource-manager/operations/folder/get-id.md).
        * `name` — имя кластера.
        * `environment` — окружение: `PRESTABLE` или `PRODUCTION`.
        * `configSpec` — настройки кластера:

            * `version` — версия Valkey™: `7.2-valkey`, `8.0-valkey`, `8.1-valkey` или `9.0-valkey`.
            * `resources` — ресурсы кластера:

                * `resourcePresetId` — [класс хостов](../concepts/instance-types.md);
                * `diskSize` — размер диска в байтах;
                * `diskTypeId` — [тип диска](../concepts/storage.md).

            * `diskSizeAutoscaling` — настройки автоматического увеличения размера хранилища:
            
              * `plannedUsageThreshold` — процент заполнения хранилища, при котором хранилище будет увеличено в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window).
            
                Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
            
                Если вы задали этот параметр, настройте расписание технического обслуживания с помощью `maintenanceWindow`.
            
              * `emergencyUsageThreshold` — процент заполнения хранилища, при котором хранилище будет увеличено немедленно.
            
                Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
            
                {% note warning %}
            
                Если заданы оба порога, значение `emergencyUsageThreshold` должно быть не меньше `plannedUsageThreshold`.
            
                {% endnote %}
            
              * `diskSizeLimit` — максимальный размер хранилища в байтах после увеличения.
            
              
              {% note warning %}
              
              * Размер хранилища не может быть уменьшен после автоматического увеличения.
              * Во время изменения размера хранилища хосты кластера будут по очереди остановлены и обновлены.
              
              {% endnote %}


            * `redis.password` — пароль пользователя.

            * `modules` — параметры [модулей Valkey™](../concepts/modules.md):

               * `valkeySearch.enabled` — подключить модуль `Valkey-Search`: `true` или `false`. Для модуля доступна настройка параметров:
                   * `valkeySearch.readerThreads` — количество потоков обработки запросов.
                   * `valkeySearch.writerThreads` — количество потоков индексации.
               * `valkeyJson.enabled` — подключить модуль `Valkey-JSON`: `true` или `false`.
               * `valkeyBloom.enabled` — подключить модуль `Valkey-Bloom`: `true` или `false`.

               {% note warning %}
               
               После подключения модули невозможно отключить.
               
               {% endnote %}

        * `hostSpecs` — параметры хоста:

            * `zoneId` — [зона доступности](../../overview/concepts/geo-scope.md).
            * `subnetId` — [идентификатор подсети](../../vpc/concepts/network.md#subnet). Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.
            * `shardName` — название шарда для хоста. Этот параметр используется, только если для параметра `sharded` указано значение `true`.
            * `replicaPriority` — приоритет назначения хоста мастером при [выходе из строя основного мастера](../concepts/replication.md#master-failover).
            * `assignPublicIp` — доступность хоста из интернета по публичному IP-адресу: `true` или `false`. Включить публичный доступ можно, только если для параметра `tlsEnabled` указано значение `true`.

        * `networkId` — идентификатор [сети](../../vpc/concepts/network.md#network), в которой будет размещен кластер.

        * `sharded` — [шардирование кластера](../concepts/sharding.md): `true` или `false`.

            {% note warning %}

            Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже [включить в нем шардирование](update.md#enable-sharding).

            {% endnote %}

            Если вы создаете шардированный кластер с типом диска `local-ssd`, укажите не менее двух хостов на шард, добавив нужное количество блоков `hostSpecs`.

        
        * `securityGroupIds` — идентификаторы [групп безопасности](../concepts/network.md#security-groups).


        * `tlsEnabled` — поддержка шифрованных TLS-соединений с кластером: `true` или `false`.

            {% note warning %}

            Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.

            {% endnote %}

        * `deletionProtection` — защита кластера от непреднамеренного удаления: `true` или `false`.

            Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

        * `announceHostnames` — [использование FQDN вместо IP-адресов](../concepts/network.md#fqdn-ip-setting): `true` или `false`.

            {% note info %}
            
            Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
            
            {% endnote %}

        * `persistenceMode` — режим [персистентности данных](../concepts/replication.md#persistence).

            Возможные значения:
            
            * `ON` — включить персистентность.
            * `OFF` — выключить персистентность.
            * `ON_REPLICAS` — включить персистентность только на репликах.

        * `maintenanceWindow` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). Передайте один из двух параметров:

            * `anytime` — техническое обслуживание происходит в любое время.
            * `weeklyMaintenanceWindow` — техническое обслуживание происходит раз в неделю, в указанное время:

                * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
                * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.

                > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

    1. Воспользуйтесь методом [Cluster.Create](../api-ref/Cluster/create.md) и выполните запрос, например с помощью [cURL](https://curl.se/):

        ```bash
        curl \
            --request POST \
            --header "Authorization: Bearer $IAM_TOKEN" \
            --header "Content-Type: application/json" \
            --url 'https://mdb.api.yandexcloud.kz/managed-redis/v1/clusters' \
            --data "@body.json"
        ```

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/Cluster/create.md#yandex.cloud.operation.Operation).

- gRPC API {#grpc-api}

    1. [Получите IAM-токен для аутентификации в API](../api-ref/authentication.md) и поместите токен в переменную среды окружения:

        ```bash
        export IAM_TOKEN="<IAM-токен>"
        ```

    1. Клонируйте репозиторий [cloudapi](https://github.com/yandex-cloud/cloudapi):
       
       ```bash
       cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
       ```
       
       Далее предполагается, что содержимое репозитория находится в директории `~/cloudapi/`.

    1. Создайте файл `body.json` и добавьте в него следующее содержимое:



        
        ```json
        {
          "folder_id": "<идентификатор_каталога>",
          "name": "<имя_кластера>",
          "environment": "<окружение>",
          "config_spec": {
            "version": "<версия_Valkey™>",
            "resources": {
              "resource_preset_id": "<класс_хостов>",
              "disk_size": "<размер_хранилища_в_байтах>",
              "disk_type_id": "<тип_диска>"
            },
            "disk_size_autoscaling": {
              "planned_usage_threshold": "<процент_для_планового_увеличения>",
              "emergency_usage_threshold": "<процент_для_незамедлительного_увеличения>",
              "disk_size_limit": "<максимальный_размер_хранилища_в_байтах>"
            },
            "redis": {
              "password": "<пароль_пользователя>"
            },
            "modules": {
              "valkey_search": {
                "enabled": "<включить_модуль_Valkey-Search>",
                "reader_threads": "<количество_потоков_обработки_запросов>",
                "writer_threads": "<количество_потоков_индексации>"
              },
              "valkey_json": {
                "enabled": "<включить_модуль_Valkey-JSON>"
              },
              "valkey_bloom": {
                "enabled": "<включить_модуль_Valkey-Bloom>"
              }
            }
          },
          "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-адресов>,
          "persistence_mode": "<режим_персистентности>",
          "maintenance_window": {
            "weekly_maintenance_window": {
              "day": "<день_недели>",
              "hour": "<порядковый_номер_часового_интервала>"
            }
          }
        }
        ```


        Где:

        * `folder_id` — идентификатор каталога. Его можно запросить со [списком каталогов в облаке](../../resource-manager/operations/folder/get-id.md).
        * `name` — имя кластера.
        * `environment` — окружение: `PRESTABLE` или `PRODUCTION`.
        * `config_spec` — настройки кластера:

            * `version` — версия Valkey™: `7.2-valkey`, `8.0-valkey`, `8.1-valkey` или `9.0-valkey`.
            * `resources` — ресурсы кластера:

                * `resource_preset_id` — [класс хостов](../concepts/instance-types.md);
                * `disk_size` — размер диска в байтах;
                * `disk_type_id` — [тип диска](../concepts/storage.md).

            * `disk_size_autoscaling` — настройки автоматического увеличения размера хранилища:
            
              * `planned_usage_threshold` — процент заполнения хранилища, при котором хранилище будет увеличено в следующее [окно обслуживания](../concepts/maintenance.md#maintenance-window).
            
                Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
            
                Если вы задали этот параметр, настройте расписание технического обслуживания с помощью `maintenance_window`.
            
              * `emergency_usage_threshold` — процент заполнения хранилища, при котором хранилище будет увеличено немедленно.
            
                Значение задается в процентах от `0` до `100`. По умолчанию — `0` (автоматическое расширение отключено).
            
                {% note warning %}
            
                Если заданы оба порога, значение `emergency_usage_threshold` должно быть не меньше `planned_usage_threshold`.
            
                {% endnote %}
            
              * `disk_size_limit` — максимальный размер хранилища в байтах после увеличения.
              
              
              {% note warning %}
              
              * Размер хранилища не может быть уменьшен после автоматического увеличения.
              * Во время изменения размера хранилища хосты кластера будут по очереди остановлены и обновлены.
              
              {% endnote %}


            * `redis.password` — пароль пользователя.

            * `modules` — параметры [модулей Valkey™](../concepts/modules.md):

               * `valkey_search.enabled` — подключить модуль `Valkey-Search`: `true` или `false`. Для модуля доступна настройка параметров:
                   * `valkey_search.reader_threads` — количество потоков обработки запросов.
                   * `valkey_search.writer_threads` — количество потоков индексации.
               * `valkey_json.enabled` — подключить модуль `Valkey-JSON`: `true` или `false`.
               * `valkey_bloom.enabled` — подключить модуль `Valkey-Bloom`: `true` или `false`.

               {% note warning %}
               
               После подключения модули невозможно отключить.
               
               {% endnote %}

        * `host_specs` — параметры хоста:

            * `zone_id` — [зона доступности](../../overview/concepts/geo-scope.md).
            * `subnet_id` — [идентификатор подсети](../../vpc/concepts/network.md#subnet). Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.
            * `shard_name` — название шарда для хоста. Этот параметр используется, только если для параметра `sharded` указано значение `true`.
            * `replica_priority` — приоритет назначения хоста мастером при [выходе из строя основного мастера](../concepts/replication.md#master-failover).
            * `assign_public_ip` — доступность хоста из интернета по публичному IP-адресу: `true` или `false`. Включить публичный доступ можно, только если для параметра `tls_enabled` указано значение `true`.

        * `network_id` — идентификатор [сети](../../vpc/concepts/network.md#network), в которой будет размещен кластер.

        * `sharded` — [шардирование кластера](../concepts/sharding.md): `true` или `false`.

            {% note warning %}

            Отключить шардирование в кластере, для которого оно включено, невозможно. При необходимости можно создать нешардированный кластер и позже [включить в нем шардирование](update.md#enable-sharding).

            {% endnote %}

            Если вы создаете шардированный кластер с типом диска `local-ssd`, укажите не менее двух хостов на шард, добавив нужное количество блоков `host_specs`.

        
        * `security_group_ids` — идентификаторы [групп безопасности](../concepts/network.md#security-groups).


        * `tls_enabled` — поддержка шифрованных TLS-соединений с кластером: `true` или `false`.

            {% note warning %}

            Включить шифрование соединений можно только при создании нового кластера. Отключить шифрование в кластере, для которого оно включено, невозможно.

            {% endnote %}

        * `deletion_protection` — защита кластера от непреднамеренного удаления: `true` или `false`.

            Включенная защита кластера от удаления не помешает подключиться к нему вручную и удалить данные.

        * `announce_hostnames` — [использование FQDN вместо IP-адресов](../concepts/network.md#fqdn-ip-setting): `true` или `false`.

            {% note info %}
            
            Некоторые клиенты несовместимы с этой настройкой и не смогут подключиться к хостам кластера. Такие клиенты ожидают именно IP-адрес и некорректно обрабатывают ситуацию, когда IP-адрес подменяется на FQDN.
            
            {% endnote %}

        * `persistence_mode` — режим [персистентности данных](../concepts/replication.md#persistence).

            Возможные значения:
            
            * `ON` — включить персистентность.
            * `OFF` — выключить персистентность.
            * `ON_REPLICAS` — включить персистентность только на репликах.

        * `maintenance_window` — настройки времени [технического обслуживания](../concepts/maintenance.md) (в т. ч. для выключенных кластеров). Передайте один из двух параметров:

            * `anytime` — техническое обслуживание проводится в любое время.
            * `weekly_maintenance_window` — техническое обслуживание происходит раз в неделю, в указанное время:

                * `day` — день недели: `MON`, `TUE`, `WED`, `THU`, `FRI`, `SAT` или `SUN`.
                * `hour` — порядковый номер часового интервала по UTC: от `1` до `24`.

                > Например, `1` соответствует интервалу с `00:00` до `01:00`, `5` — с `04:00` до `05:00`.

    1. Воспользуйтесь вызовом [ClusterService.Create](../api-ref/grpc/Cluster/create.md) и выполните запрос, например с помощью [gRPCurl](https://github.com/fullstorydev/grpcurl):

        ```bash
        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.yandexcloud.kz:443 \
            yandex.cloud.mdb.redis.v1.ClusterService.Create \
            < body.json
        ```

    1. Убедитесь, что запрос был выполнен успешно, изучив [ответ сервера](../api-ref/grpc/Cluster/create.md#yandex.cloud.operation.Operation).

{% endlist %}


{% note warning %}

Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная [настройка групп безопасности](connect/index.md#configuring-security-groups).

{% endnote %}


## Создать копию кластера {#duplicate}

Вы можете создать кластер Valkey™, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера Valkey™ импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер Valkey™ обладает множеством настроек и нужно создать похожий на него кластер.

Чтобы создать копию кластера Valkey™:

{% list tabs group=instructions %}

- Terraform {#tf}

    1. Если у вас еще нет Terraform, [установите его](../../tutorials/infrastructure-management/terraform-quickstart.md#install-terraform).
    1. [Получите данные для аутентификации](../../tutorials/infrastructure-management/terraform-quickstart.md#get-credentials). Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
    1. [Настройте и инициализируйте провайдер](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Чтобы не создавать конфигурационный файл с настройками провайдера вручную, [скачайте его](https://github.com/yandex-cloud-examples/yc-terraform-provider-settings/blob/main/provider.tf).
    1. Поместите конфигурационный файл в отдельную рабочую директорию и [укажите значения параметров](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

    1. В той же рабочей директории разместите файл с расширением `.tf` и содержимым:

        ```hcl
        resource "yandex_mdb_redis_cluster_v2" "old" { }
        ```

    1. Запишите идентификатор первоначального кластера Valkey™ в переменную окружения:

        ```bash
        export REDIS_CLUSTER_ID=<идентификатор_кластера>
        ```

        Идентификатор можно запросить вместе со [списком кластеров в каталоге](cluster-list.md#list-clusters).

    1. Импортируйте настройки первоначального кластера Valkey™ в конфигурацию Terraform:

        ```bash
        terraform import yandex_mdb_redis_cluster_v2.old ${REDIS_CLUSTER_ID}
        ```

    1. Получите импортированную конфигурацию:

        ```bash
        terraform show
        ```

    1. Скопируйте ее из терминала и вставьте в файл с расширением `.tf`.
    1. Расположите файл в новой директории `imported-cluster`.
    1. Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:

        * Укажите новое имя кластера в строке `resource` и параметре `name`.
        * Удалите параметры `created_at`, `health`, `id` и `status`.
        * В блоке `config` добавьте параметр `password`.
        * Если в блоке `config` указано значение параметра `notify_keyspace_events = "\"\""`, удалите этот параметр.
        * Если указано значение параметра `sharded = false`, в блоке `hosts` удалите параметры `shard_name`.
        * Если в блоке `maintenance_window` указано значение параметра `type = "ANYTIME"`, удалите параметр `hour`.
        * (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.

    1. В директории `imported-cluster` [получите данные для аутентификации](../../tutorials/infrastructure-management/terraform-quickstart.md#get-credentials).

    1. В этой же директории [настройте и инициализируйте провайдер](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Чтобы не создавать конфигурационный файл с настройками провайдера вручную, [скачайте его](https://github.com/yandex-cloud-examples/yc-terraform-provider-settings/blob/main/provider.tf).

    1. Поместите конфигурационный файл в директорию `imported-cluster` и [укажите значения параметров](../../tutorials/infrastructure-management/terraform-quickstart.md#configure-provider). Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.

    1. Проверьте корректность файлов конфигурации Terraform:

        ```bash
        terraform validate
        ```

        Если в файлах конфигурации есть ошибки, Terraform на них укажет.

    1. Создайте необходимую инфраструктуру:

        1. Выполните команду для просмотра планируемых изменений:
        
           ```bash
           terraform plan
           ```
        
           Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
        
        1. Если вас устраивают планируемые изменения, внесите их:
           1. Выполните команду:
        
              ```bash
              terraform apply
              ```
        
           1. Подтвердите изменение ресурсов.
           1. Дождитесь завершения операции.

        В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в [консоли управления](https://kz.console.yandex.cloud).

    {% note warning "Ограничения по времени" %}
    
    Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex Managed Service for Valkey™:
    
    * создание, в т. ч. путем восстановления из резервной копии, — 15 минут;
    * изменение — 60 минут;
    * удаление — 15 минут.
    
    Операции, длящиеся дольше указанного времени, прерываются.
    
    {% cut "Как изменить эти ограничения?" %}
    
    Добавьте к описанию кластера блок `timeouts`, например:
    
    ```hcl
    resource "yandex_mdb_redis_cluster_v2" "<имя_кластера>" {
      ...
      timeouts = {
        create = "1h30m" # Полтора часа
        update = "2h"    # 2 часа
        delete = "30m"   # 30 минут
      }
    }
    ```
    
    {% endcut %}
    
    {% endnote %}

{% endlist %}

## Примеры {#examples}

### Создание кластера с одним хостом {#creating-a-single-host-cluster}

{% list tabs group=instructions %}

- CLI {#cli}

  Чтобы создать кластер с одним хостом, передайте один параметр `--host`.

  Создайте кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:

  
  * Имя `myredis`.
  * Версия `9.0-valkey`.
  * Окружение — `production`.
  * Сеть `default`.
  * Один хост класса `hm2.nano` в подсети `b0rcctk2rvtr********`, в зоне доступности `kz1-a` и группе безопасности с идентификатором `enp6saqnq4ie********`, с публичным доступом и [приоритетом хоста](../concepts/replication.md#master-failover) `50`.
  * С поддержкой SSL-соединений.
  * Хранилище на сетевых SSD-дисках (`network-ssd`) размером 16 ГБ.
  * Пароль `user1user1`.
  * С защитой от непреднамеренного удаления.


  Выполните следующую команду:

  
  ```bash
  yc managed-redis cluster create \
    --name myredis \
    --redis-version 9.0-valkey \
    --environment production \
    --network-name default \
    --resource-preset hm2.nano \
    --host zone-id=kz1-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
  ```



- Terraform {#tf}

  Создайте кластер Yandex Managed Service for Valkey™ и сеть для него с тестовыми характеристиками:

    * Имя `myredis`.
    * Версия `9.0-valkey`.
    * Окружение — `PRODUCTION`.
    * Облако с идентификатором `b1gq90dgh25********`.
    * Каталог с идентификатором `b1gia87mbaom********`.
    * Новая сеть `mynet`.
    * Один хост класса `hm2.nano` в новой подсети `mysubnet`, в зоне доступности `kz1-a`, с публичным доступом и [приоритетом хоста](../concepts/replication.md#master-failover) `50`. Подсеть `mysubnet` будет иметь диапазон `10.5.0.0/24`.
    * Новая группа безопасности `redis-sg`, разрешающая подключения через порт `6380` с любых адресов подсети `mysubnet`.
    * С поддержкой SSL-соединений.
    * Хранилище на сетевых SSD-дисках (`network-ssd`) размером 16 ГБ.
    * Пароль `user1user1`.
    * С защитой от непреднамеренного удаления.

  Конфигурационный файл для такого кластера выглядит так:

  ```hcl
  resource "yandex_mdb_redis_cluster_v2" "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  = "9.0-valkey"
    }

    resources = {
      resource_preset_id = "hm2.nano"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }

    hosts = {
      "host1" = {
        zone             = "kz1-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           = "kz1-a"
    network_id     = yandex_vpc_network.mynet.id
    v4_cidr_blocks = ["10.5.0.0/24"]
  }
  ```


{% endlist %}

### Создание шардированного кластера с одним шардом {#creating-a-single-shard-sharded-cluster}

{% list tabs group=instructions %}

- CLI {#cli}

  Создайте [шардированный](../concepts/sharding.md) кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:

  
  * Имя `myredis`.
  * Версия `9.0-valkey`.
  * Окружение `production`.
  * С включенным шардированием.
  * С поддержкой SSL-соединений.
  * С защитой от непреднамеренного удаления.
  * Сеть `default`.
  * Группа безопасности с идентификатором `enp6saqnq4ie********`.
  * Класс хостов `hm2.nano`.
  * Один хост в шарде `shard1`, в подсети `b0rcctk2rvtr********`, в зоне доступности `kz1-a`, с публичным доступом и [приоритетом хоста](../concepts/replication.md#master-failover) `50`.
  * Хранилище на сетевых SSD-дисках (`network-ssd`) размером 16 ГБ.
  * Пароль `user1user1`.


  Выполните следующую команду:

  
  ```bash
  yc managed-redis cluster create \
    --name myredis \
    --redis-version 9.0-valkey \
    --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
  ```



- Terraform {#tf}

  Создайте [шардированный](../concepts/sharding.md) кластер Yandex Managed Service for Valkey™ и сеть для него с тестовыми характеристиками:

  * Имя `myredis`.
  * Версия `9.0-valkey`.
  * Окружение `PRODUCTION`.
  * С включенным шардированием.
  * С поддержкой SSL-соединений.
  * С защитой от непреднамеренного удаления.
  * Новая сеть `mynet`, которая будет состоять из одной подсети. Эта новая подсеть `mysubnet` будет иметь диапазон `10.5.0.0/24`.
  * Новая группа безопасности `redis-sg`, разрешающая подключения через порт `6380` с любых адресов подсети `mysubnet`.
  * Класс хостов `hm2.nano`.
  * Один хост в шарде `shard1`, в подсети `mysubnet`, в зоне доступности `kz1-a`, с публичным доступом и [приоритетом хоста](../concepts/replication.md#master-failover) `50`.
  * Хранилище на сетевых SSD-дисках (`network-ssd`) размером 16 ГБ.
  * Пароль `user1user1`.

  Конфигурационный файл для такого кластера выглядит так:

  ```hcl
  resource "yandex_mdb_redis_cluster_v2" "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  = "9.0-valkey"
      password = "user1user1"
    }

    resources = {
      resource_preset_id = "hm2.nano"
      disk_type_id       = "network-ssd"
      disk_size          = 16
    }

    hosts = {
      "host1" = {
        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           = "kz1-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"]
    }
  }
  ```


{% endlist %}


### Создание шардированного кластера с тремя шардами {#creating-a-sharded-cluster}


{% note info %}

В [регионе Казахстан](../../overview/concepts/region.md) доступна только [зона доступности](../../overview/concepts/geo-scope.md) `kz1-a`.

{% endnote %}


{% list tabs group=instructions %}

- Terraform {#tf}

    Создайте [шардированный](../concepts/sharding.md) кластер Yandex Managed Service for Valkey™ с тестовыми характеристиками:

    * Имя `myredis`.
    * Версия `9.0-valkey`.
    * Окружение `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](connect/index.md)) с любых адресов подсетей.
    * Хранилище на сетевых SSD-дисках (`network-ssd`) размером 16 ГБ.
    * Пароль `user1user1`.
    * С защитой от непреднамеренного удаления.

    Конфигурационный файл для такого кластера выглядит так:

    ```hcl
    resource "yandex_mdb_redis_cluster_v2" "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  = "9.0-valkey"
      }

      resources = {
        resource_preset_id = "hm2.nano"
        disk_type_id       = "network-ssd"
        disk_size          = 16
      }

      hosts = {
        "host1" = {
          zone       = "kz1-a"
          subnet_id  = yandex_vpc_subnet.subnet-a.id
          shard_name = "shard1"
        }

        "host2" = {
          zone       = "kz1-b"
          subnet_id  = yandex_vpc_subnet.subnet-b.id
          shard_name = "shard2"
        }

        "host3" = {
          zone       = "kz1-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           = "kz1-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           = "kz1-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           = "kz1-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"
        ]
      }
    }
    ```

{% endlist %}