Создание Redis-кластера

Redis-кластер — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста: хост-мастер принимает запросы на запись, асинхронно дублируя изменения в репликах.

Количество хостов, которые можно создать вместе с Redis-кластером, зависит от выбранного типа хоста:

  • В кластере с типом хостов high-memory можно создать неограниченное число хостов (от 1 до пределов текущей квоты).

  • В кластере с типом хостов burstable можно создать только один хост.

Как создать кластер Redis

  1. В консоли управления выберите каталог, в котором нужно создать кластер БД.

  2. Выберите сервис Managed Service for Redis.

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

  4. Введите имя кластера в поле Имя кластера. Имя кластера должно быть уникальным в Облаке.

  5. Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):

    • production — для стабильных версий ваших приложений.
    • prestable — для тестирования, в том числе самого сервиса Managed Service for Redis. Prestable-окружение обновляется чаще, из-за чего в нем раньше исправляются уже известные проблемы, но могут происходить обратно несовместимые изменения.
  6. Выберите версию СУБД.

  7. Если требуется, включите шардирование кластера.

    Важная информация

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

  8. Настройте класс хостов кластера:

    • Выберите тип хостов — он определяет их гарантированную долю vCPU. Хосты типа high-memory работают с полным использованием ядра, а burstable — с частичным.
    • Выберите объем оперативной памяти для хоста.
    • Выберите размер диска. Доступный размер диска зависит от объема оперативной памяти и ограничен квотами и лимитами. Минимальный размер диска в 2 раза больше выбранного объема оперативной памяти, максимальный — в 8 раз больше.
  9. В блоке Настройки кластера в поле Пароль укажите пароль пользователя, от 8 до 128 символов.

  10. В блоке Сеть выберите сеть, к подсетям которой будут подключены хосты.

  11. В блоке Хосты нажмите на кнопку Добавить хост и выберите зону доступности и подсеть, к которой будет подключен хост. Создайте необходимое количество хостов. Для изменения зоны доступности и добавленного хоста нажмите на значок карандаша в строке хоста.

    Если вы включили шардирование, укажите названия шардов.

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

Если у вас еще нет интерфейса командной строки Яндекс.Облака, установите и инициализируйте его.

По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name или --folder-id.

Чтобы создать кластер:

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

    $ yc vpc subnet list
    

    Если ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.

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

    $ yc managed-redis cluster create --help
    
  3. При создании кластера с помощью CLI нельзя напрямую указать тип хоста и объем оперативной памяти. Вместо этого выберите подходящий класс хостов. Чтобы просмотреть доступные классы хостов, выполните команду:

    $ yc managed-redis resource-preset list
    
  4. Укажите параметры кластера в команде создания (в примере приведены не все флаги):

    $ yc managed-redis cluster create \
       --name <имя кластера> \
       --environment <окружение, prestable или production> \
       --network-name <имя сети> \
       --host zone-id=<зона доступности>,subnet-id=<идентификатор подсети> \
       --resource-preset <класс хоста> \
       --disk-size <размер хранилища в гигабайтах> \
       --password=<пароль пользователя> \
       --backup-window-start <время начала резервного копирования в формате ЧЧ:ММ:СС>
    

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

Terraform позволяет быстро создать облачную инфраструктуру в Яндекс.Облаке. Состав инфраструктуры определяется с помощью конфигурационных файлов, в которых указываются требуемые облачные ресурсы и их параметры.

Если у вас ещё нет Terraform, установите его и настройте провайдер.

Чтобы создать кластер:

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

    • Кластер базы данных — описание кластера и его хостов.
    • Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
    • Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.

    Пример структуры конфигурационного файла:

    resource "yandex_mdb_redis_cluster" "<имя кластера>" {
      name        = "<имя кластера>"
      environment = "<окружение>"
      network_id  = "<идентификатор сети>"
    
      config {
        password = "<пароль>"
      }
    
      resources {
        resource_preset_id = "<класс хоста>"
        disk_size          = <размер диска>
      }
    
      host {
        zone      = "<зона доступности>"
        subnet_id = "<идентификатор подсети>"
      }
    }
      
    resource "yandex_vpc_network" "<имя сети>" {}
    
    resource "yandex_vpc_subnet" "<имя подсети>" {
      zone           = "<зона доступности>"
      network_id     = "<идентификатор сети>"
      v4_cidr_blocks = ["<диапазон>"]
    }
    

    Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.

  2. Проверьте корректность конфигурацилонных файлов.

    1. В командной строке перейдите в каталог, в котором вы создали конфигурационный файл.
    2. Выполните проверку с помощь команды:
      terraform plan
      

    Если конфигурация описана верно, в терминале отобразится список создаваемых ресурсов и их параметров. Если в конфигурации есть ошибки, Terraform на них укажет. Это проверочный этап: ресурсы не будут созданы.

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

    1. Если в конфигурации нет ошибок, выполните команду:
      terraform apply
      
    2. Подтвердите создание ресурсов.

    После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся IP-адреса виртуальных машин. Проверить появление ресурсов и их настройки можно в консоли управления.

Примеры

Создание кластера с одним хостом

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

Допустим, нужно создать Redis-кластер со следующими характеристиками:

  • С именем myredis.
  • В окружении production.
  • В сети default.
  • С одним хостом класса hm1.nano в подсети b0rcctk2rvtr8efcch64, в зоне доступности ru-central1-c.
  • С хранилищем объемом 16 ГБ.
  • C паролем user1user1.

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

$ yc managed-redis cluster create \
     --name myredis \
     --environment production \
     --network-name default \
     --resource-preset hm1.nano \
     --host zone-id=ru-central1-c,subnet-id=b0rcctk2rvtr8efcch64 \
     --disk-size 16 \
     --password=user1user1

Создание кластера с одним хостом

Допустим, нужно создать Redis-кластер и сеть для него со следующими характеристиками:

  • С именем myredis.
  • В окружении production.
  • В облаке с идентификатором b1gq90dgh25иuebiu75o.
  • В каталоге myfolder.
  • В новой сети mynet.
  • С одним хостом класса hm1.nano в новой подсети mysubnet, в зоне доступности ru-central1-c. Подсеть mysubnet будет иметь диапазон 10.5.0.0/24.
  • С хранилищем объемом 16 ГБ.
  • C паролем user1user1.

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

provider "yandex" {
  token     = "<OAuth или статический ключ сервисного аккаунта>"
  cloud_id  = "b1gq90dgh25иuebiu75o"
  folder_id = "${data.yandex_resourcemanager_folder.myfolder.id}"
  zone      = "ru-central1-c"
}

resource "yandex_mdb_redis_cluster" "myredis" {
  name        = "myredis"
  environment = "PRODUCTION"
  network_id  = "${yandex_vpc_network.mynet.id}"

  config {
    password = "user1user1"
  }

  resources {
    resource_preset_id = "hm1.nano"
    disk_size          = 16
  }

  host {
    zone      = "ru-central1-c"
    subnet_id = "${yandex_vpc_subnet.mysubnet.id}"
  }
}

resource "yandex_vpc_network" "mynet" {}

resource "yandex_vpc_subnet" "mysubnet" {
  zone           = "ru-central1-c"
  network_id     = "${yandex_vpc_network.mynet.id}"
  v4_cidr_blocks = ["10.5.0.0/24"]
}