Создание кластера Yandex StoreDoc
Кластер Yandex StoreDoc — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста (первичный хост принимает запросы на запись и асинхронно дублирует изменения на вторичных хостах).
Примечание
- Количество хостов, которые можно создать вместе с кластером Yandex StoreDoc, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
Создать кластер
Для создания кластера Yandex StoreDoc нужна роль vpc.user и роль managed-mongodb.editor или выше. О том, как назначить роль, см. в документации Identity and Access Management.
Чтобы создать кластер Yandex StoreDoc:
-
В консоли управления
выберите каталог, в котором нужно создать кластер БД. -
Выберите сервис Yandex StoreDoc.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите название в поле Имя кластера. Имя кластера должно быть уникальным в рамках облака.
-
(Опционально) Введите Описание кластера.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
PRODUCTION— для стабильных версий ваших приложений.PRESTABLE— для тестирования. Prestable-окружение аналогично Production-окружению и на него также распространяется SLA, но при этом на нем раньше появляются новые функциональные возможности, улучшения и исправления ошибок. В Prestable-окружении вы можете протестировать совместимость новых версий с вашим приложением.
-
Укажите версию СУБД.
-
-
В блоке Класс хоста выберите:
- Одну из доступных платформ.
- Тип конфигурации: memory-optimized, cpu-optimized, standard или burstable.
- Класс хостов — он определяет технические характеристики виртуальных машин, на которых будут развернуты хосты БД. При изменении класса хостов для кластера меняются характеристики всех созданных хостов.
-
В блоке Размер хранилища:
-
Выберите тип диска.
От выбранного типа зависит, с каким шагом можно будет изменить размер диска:
- Сетевые HDD- и SSD-диски — с шагом 1 ГБ.
- Локальные SSD-диски:
- для платформ Intel Broadwell и Intel Cascade Lake — с шагом 100 ГБ;
- для платформы Intel Ice Lake — с шагом 368 ГБ.
- Нереплицируемые SSD-диски и cверхбыстрые сетевые SSD-диски с тремя репликами — с шагом 93 ГБ.
-
Выберите размер хранилища, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. в разделе Резервные копии.
-
(Опционально) Выберите опцию Зашифрованный диск, чтобы зашифровать диск пользовательским ключом KMS.
-
Чтобы создать новый ключ, нажмите кнопку Создать.
-
Чтобы использовать созданный ранее ключ, выберите его в поле Ключ KMS.
Подробнее о шифровании дисков см. в разделе Хранилище.
-
-
-
В блоке База данных укажите атрибуты БД:
-
Имя БД.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config,local,adminиmdb_internalзарезервированы для собственных нужд Yandex StoreDoc. Создавать БД с этими именами нельзя. -
Имя пользователя.
-
Пароль пользователя. Минимум 8 символов.
-
-
В блоке Сетевые настройки выберите:
- Облачную сеть для размещения кластера.
- Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты добавьте хосты БД, создаваемые вместе с кластером:
- Нажмите кнопку Добавить хост.
- Выберите зону доступности.
- Выберите подсеть в указанной зоне доступности. Если подсети нет, создайте ее.
- Если хост должен быть доступен снаружи Yandex Cloud, включите опцию Публичный доступ.
Чтобы обеспечить отказоустойчивость, для типов диска
local-ssdиnetwork-ssd-nonreplicatedнеобходимо как минимум 3 хоста. Подробнее см. в разделе Хранилище.По умолчанию хосты создаются в разных зонах доступности. См. подробнее об управлении хостами.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — промежуток времени, в течение которого начинается резервное копирование кластера. Время указывается по UTC в 24-часовом формате. По умолчанию —
22:00 - 23:00UTC. -
Срок хранения автоматических резервных копий, дней
Время, в течение которого нужно хранить созданные автоматически резервные копии. Если для такой копии истекает срок хранения, то она удаляется. Значение по умолчанию — 7 дней. Эта функциональность находится на стадии Preview. Подробнее см. в разделе Резервные копии.
Изменение срока хранения затрагивает как новые автоматические резервные копии, так и уже существующие. Например, если изначальный срок хранения был 7 дней и оставшееся время жизни отдельной автоматической резервной копии при таком сроке — 1 день, то при увеличении срока хранения до 9 дней, оставшееся время жизни этой резервной копии будет уже 3 дня.
Для существующего кластера автоматически созданные копии хранятся заданное количество дней, а созданные вручную — бессрочно. После удаления кластера все копии хранятся 7 дней.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Сбор статистики — включите эту опцию, чтобы пользоваться встроенным инструментом для диагностики производительности в кластере. Эта функциональность находится на стадии Preview.
-
Защита от удаления — защита кластера от непреднамеренного удаления.
Включенная защита кластера от удаления не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
-
-
При необходимости задайте настройки СУБД.
Примечание
Некоторые настройки Yandex StoreDoc зависят от выбранного класса хостов.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.
Чтобы создать кластер Yandex StoreDoc:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
yc vpc subnet listЕсли ни одной подсети в каталоге нет, создайте нужные подсети в сервисе VPC.
-
Посмотрите описание команды CLI для создания кластера:
yc managed-mongodb cluster create --help -
Укажите параметры кластера в команде создания (в примере приведены не все параметры):
yc managed-mongodb cluster create \ --name <имя_кластера> \ --environment=<окружение> \ --network-name <имя_сети> \ --host zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту>,` `hidden=<скрыть_хост>,` `secondary-delay-secs=<отставание_реплики_в_секундах>,` `priority=<приоритет_хоста> \ --mongod-resource-preset <класс_хоста> \ --user name=<имя_пользователя>,password=<пароль_пользователя> \ --database name=<имя_БД> \ --mongod-disk-type <network-hdd|network-ssd|network-ssd-nonreplicated|local-ssd> \ --mongod-disk-size <размер_хранилища_ГБ> \ --disk-encryption-key-id <идентификатор_ключа_KMS> \ --performance-diagnostics=<включить_диагностику> \ --deletion-protectionИдентификатор подсети
subnet-idнеобходимо указывать, если в выбранной зоне доступности создано 2 и больше подсетей.Где:
-
--environment— окружение:prestableилиproduction. -
--host— параметры хоста:zone-id— зона доступности.subnet-id— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.assign-public-ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.hidden— скрытие хоста:trueилиfalse. Если хост скрыт, он будет доступен для чтения только для прямых подключений (например, чтобы делать с него резервные копии, не добавляя нагрузки на кластер).secondary-delay-secs— отставание реплики от мастера в секундах. Может быть полезно для восстановления данных в случае ошибочных операций.priority— приоритет назначения хоста мастером.
-
--mongod-disk-type— тип диска. -
--disk-encryption-key-id— шифрование диска пользовательским ключом KMS.Подробнее о шифровании дисков см. в разделе Хранилище.
-
--performance-diagnostics— включить диагностику производительности кластера:trueилиfalse. -
--deletion-protection— защита кластера от непреднамеренного удаления:trueилиfalse.Включенная защита кластера от удаления не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config,local,adminиmdb_internalзарезервированы для собственных нужд Yandex StoreDoc. Создавать БД с этими именами нельзя.Примечание
По умолчанию при создании кластера устанавливается режим технического обслуживания
anytime— в любое время. Вы можете установить конкретное время обслуживания при изменении настроек кластера. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Yandex StoreDoc:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер базы данных — описание кластера и его хостов.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = yandex_vpc_network.<имя_сети>.id security_group_ids = [ "<список_идентификаторов_групп_безопасности>" ] deletion_protection = <защитить_кластер_от_удаления> cluster_config { version = "<версия_Yandex_StoreDoc>" } resources_mongod { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } host { zone_id = "<зона_доступности>" subnet_id = yandex_vpc_subnet.<имя_подсети>.id assign_public_ip = <разрешить_публичный_доступ_к_хосту> host_parameters { hidden = <скрыть_хост> secondary_delay_secs = <отставание_реплики_в_секундах> priority = <приоритет_хоста> } } } resource "yandex_mdb_mongodb_database" "<имя_БД>" { cluster_id = yandex_mdb_mongodb_cluster.<имя_кластера>.id name = "<имя_БД>" } resource "yandex_mdb_mongodb_user" "<имя_пользователя>" { cluster_id = yandex_mdb_mongodb_cluster.<имя_кластера>.id name = "<имя_пользователя>" password = "<пароль>" permission { database_name = "<имя_БД>" roles = [ "<список_ролей_пользователя>" ] } depends_on = [ yandex_mdb_mongodb_database.<имя_БД> ] } resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" } resource "yandex_vpc_subnet" "<имя_подсети>" { name = "<имя_подсети>" zone = "<зона_доступности>" network_id = yandex_vpc_network.<имя_сети>.id v4_cidr_blocks = ["<диапазон>"] }Где:
-
environment— окружение:PRESTABLEилиPRODUCTION. -
host— параметры хоста:zone_id— зона доступности.subnet_id— идентификатор подсети в выбранной зоне доступности.assign_public_ip— публичный доступ к хосту:trueилиfalse.host_parameters— дополнительные параметры хоста:hidden— скрытие хоста:trueилиfalse. Если хост скрыт, он будет доступен для чтения только для прямых подключений (например, чтобы делать с него резервные копии, не добавляя нагрузки на кластер).secondary_delay_secs— отставание реплики от мастера в секундах. Может быть полезно для восстановления данных в случае ошибочных операций.priority— приоритет назначения хоста мастером.
-
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse.Включенная защита кластера от удаления не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
-
version— версия Yandex StoreDoc: 6.0, 7.0 или 8.0.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config,local,adminиmdb_internalзарезервированы для собственных нужд Yandex StoreDoc. Создавать БД с этими именами нельзя.Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }Где:
type— тип технического обслуживания. Принимает значения:ANYTIME— в любое время.WEEKLY— по расписанию.
day— день недели для типаWEEKLY:MON,TUE,WED,THU,FRI,SATилиSUN.hour— час дня по UTC для типаWEEKLY: от1до24.
Чтобы зашифровать диск пользовательским ключом KMS, добавьте параметр
disk_encryption_key_id:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... disk_encryption_key_id = <идентификатор_ключа_KMS> ... }Подробнее о шифровании дисков см. в разделе Хранилище.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера.
-
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся FQDN хостов. Проверить появление ресурсов и их настройки можно в консоли управления
.Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex StoreDoc:
- создание, в т. ч. путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок
timeouts, например:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... timeouts { create = "1h30m" # Полтора часа update = "2h" # 2 часа } } -
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Создайте файл
body.jsonи добавьте в него следующее содержимое:{ "folderId": "<идентификатор_каталога>", "name": "<имя_кластера>", "environment": "<окружение>", "networkId": "<идентификатор_сети>", "securityGroupIds": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "deletionProtection": <защитить_кластер_от_удаления>, "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час>" } }, "configSpec": { "version": "<версия_Yandex_StoreDoc>", "mongodb": { "mongod": { "resources": { "resourcePresetId": "<класс_хоста>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } } }, "backupWindowStart": { "hours": "<часы>", "minutes": "<минуты>", "seconds": "<секунды>", "nanos": "<наносекунды>" }, "backupRetainPeriodDays": "<время_хранения_резервных_копий_в_днях>", "performanceDiagnostics": { "profilingEnabled": <включить_профилировщик> } }, "databaseSpecs": [ { "name": "<имя_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>", "roles": [ "<роль_1>", "<роль_2>", ..., "<роль_N>" ] } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "assignPublicIp": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>", "shardName": "<имя_шарда>", "hidden": <скрыть_хост>, "secondaryDelaySecs": "<отставание_реплики_в_секундах>", "priority": "<приоритет_хоста>", "tags": "<метки_хоста>" }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ], }Где:
-
folderId— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
networkId— идентификатор сети, в которой будет размещен кластер. -
securityGroupIds— идентификаторы групп безопасности. -
deletionProtection— защита кластера от непреднамеренного удаления:trueилиfalse.Включенная защита кластера от удаления не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
-
maintenanceWindow— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). ВmaintenanceWindowпередайте один из двух параметров:-
anytime— техническое обслуживание происходит в любое время. -
weeklyMaintenanceWindow— техническое обслуживание происходит раз в неделю, в указанное время:day— день недели в форматеDDD.hour— час в форматеHH. Возможные значения: от1до24часов.
-
-
configSpec— настройки кластера:-
version— версия Yandex StoreDoc: 5.0, 6.0 или 7.0. -
mongod— тип хоста.-
resources— ресурсы кластера:resourcePresetId— класс хостов.diskSize— размер диска в байтах.diskTypeId— тип диска.
-
-
backupWindowStart— настройки окна резервного копирования.В параметре укажите время, когда начинать резервное копирование:
hours— от0до23часов.minutes— от0до59минут.seconds— от0до59секунд.nanos— от0до999999999наносекунд.
-
backupRetainPeriodDays— время хранения резервных копий в днях. -
performanceDiagnostics— настройки для сбора статистики:profilingEnabled— включение профилировщика:trueилиfalse.
-
-
databaseSpecs— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и содержит параметрname— имя БД.Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config,local,adminиmdb_internalзарезервированы для собственных нужд Yandex StoreDoc. Создавать БД с этими именами нельзя. -
userSpecs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. -
password— пароль пользователя. -
permissions— настройки разрешений пользователя:databaseName— имя базы данных, к которой пользователь получает доступ.roles— массив ролей пользователя. Каждая роль представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Пользователи и роли.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions.
-
-
hostSpecs— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zoneId— зона доступности.subnetId— идентификатор подсети.assignPublicIp— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.type— тип хоста в шардированном кластере:MONGOD,MONGOINFRA,MONGOSилиMONGOCFG.shardName— имя шарда в шардированном кластере.hidden— скрытие хоста:trueилиfalse. Если хост скрыт, он будет доступен для чтения только для прямых подключений (например, чтобы делать с него резервные копии, не добавляя нагрузки на кластер).secondaryDelaySecs— отставание реплики от мастера в секундах. Может быть полезно для восстановления данных в случае ошибочных операций.priority— приоритет назначения хоста мастером.tags— метки хоста.
-
-
Воспользуйтесь методом Cluster.Create и выполните запрос, например, с помощью cURL
:curl \ --request POST \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/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": "<окружение>", "network_id": "<идентификатор_сети>", "security_group_ids": [ "<идентификатор_группы_безопасности_1>", "<идентификатор_группы_безопасности_2>", ... "<идентификатор_группы_безопасности_N>" ], "deletion_protection": <защитить_кластер_от_удаления>, "maintenance_window": { "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час>" } }, "config_spec": { "version": "<версия_Yandex_StoreDoc>", "mongodb": { "mongod": { "resources": { "resource_preset_id": "<класс_хоста>", "disk_size": "<размер_хранилища_в_байтах>", "disk_type_id": "<тип_диска>" } } }, "backup_window_start": { "hours": "<часы>", "minutes": "<минуты>", "seconds": "<секунды>", "nanos": "<наносекунды>" }, "backup_retain_period_days": "<время_хранения_резервных_копий_в_днях>", "performance_diagnostics": { "profiling_enabled": <включить_профилировщик> } }, "database_specs": [ { "name": "<имя_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "user_specs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "database_name": "<имя_БД>", "roles": [ "<роль_1>", "<роль_2>", ..., "<роль_N>" ] } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>", "shard_name": "<имя_шарда>", "hidden": <скрыть_хост>, "secondary_delay_secs": "<отставание_реплики_в_секундах>", "priority": "<приоритет_хоста>", "tags": "<метки_хоста>" }, { <аналогичный_набор_настроек_для_хоста_2> }, { ... }, { <аналогичный_набор_настроек_для_хоста_N> } ] }Где:
-
folder_id— идентификатор каталога. Его можно запросить со списком каталогов в облаке. -
name— имя кластера. -
environment— окружение кластера:PRODUCTIONилиPRESTABLE. -
network_id— идентификатор сети, в которой будет размещен кластер. -
security_group_ids— идентификаторы групп безопасности. -
deletion_protection— защита кластера от непреднамеренного удаления:trueилиfalse.Включенная защита кластера от удаления не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
-
maintenance_window— настройки времени технического обслуживания (в т. ч. для выключенных кластеров). Вmaintenance_windowпередайте один из двух параметров:-
anytime— техническое обслуживание происходит в любое время. -
weekly_maintenance_window— техническое обслуживание происходит раз в неделю, в указанное время:day— день недели в форматеDDD.hour— час в форматеHH. Возможные значения: от1до24часов.
-
-
config_spec— настройки кластера:version— версия Yandex StoreDoc: 5.0, 6.0 или 7.0.-
mongod— тип хоста.-
resources— ресурсы кластера:resource_preset_id— класс хостов.disk_size— размер диска в байтах.disk_type_id— тип диска.
-
-
backup_window_start— настройки окна резервного копирования.В параметре укажите время, когда начинать резервное копирование:
hours— от0до23часов.minutes— от0до59минут.seconds— от0до59секунд.nanos— от0до999999999наносекунд.
-
backup_retain_period_days— время хранения резервных копий в днях. -
performance_diagnostics— настройки для сбора статистики:profiling_enabled— включение профилировщика:trueилиfalse.
-
-
database_specs— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и содержит параметрname— имя БД.Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config,local,adminиmdb_internalзарезервированы для собственных нужд Yandex StoreDoc. Создавать БД с этими именами нельзя. -
user_specs— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name— имя пользователя. -
password— пароль пользователя. -
permissions— настройки разрешений пользователя:database_name— имя базы данных, к которой пользователь получает доступ.roles— массив ролей пользователя. Каждая роль представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Пользователи и роли.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions.
-
-
host_specs— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zone_id— зона доступности.subnet_id— идентификатор подсети.assign_public_ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.type— тип хоста в шардированном кластере:MONGOD,MONGOINFRA,MONGOSилиMONGOCFG.shard_name— имя шарда в шардированном кластере.hidden— скрытие хоста:trueилиfalse. Если хост скрыт, он будет доступен для чтения только для прямых подключений (например, чтобы делать с него резервные копии, не добавляя нагрузки на кластер).secondaryDelaySecs— отставание реплики от мастера в секундах. Может быть полезно для восстановления данных в случае ошибочных операций.priority— приоритет назначения хоста мастером.tags— метки хоста.
-
-
Воспользуйтесь вызовом ClusterService.Create и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/mongodb/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d @ \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.Create \ < body.json -
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Создать копию кластера
Вы можете создать кластер Yandex StoreDoc, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера Yandex StoreDoc импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер Yandex StoreDoc обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера Yandex StoreDoc:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tfи содержимым:resource "yandex_mdb_mongodb_cluster" "old" { } -
Запишите идентификатор первоначального кластера Yandex StoreDoc в переменную окружения:
export STOREDOC_CLUSTER_ID=<идентификатор_кластера>Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера Yandex StoreDoc в конфигурацию Terraform:
terraform import yandex_mdb_mongodb_cluster.old ${STOREDOC_CLUSTER_ID} -
Получите импортированную конфигурацию:
terraform show -
Скопируйте ее из терминала и вставьте в файл с расширением
.tf. -
Расположите файл в новой директории
imported-cluster. -
Измените скопированную конфигурацию так, чтобы из нее можно было создать новый кластер:
- Укажите новое имя кластера в строке
resourceи параметреname. - Удалите параметры
created_at,health,id,shardedиstatus. - В блоках
hostудалите параметрыhealthиname. - Если в блоке
maintenance_windowуказано значение параметраtype = "ANYTIME", удалите параметрhour. - Если есть блоки
user, удалите их. Пользователи БД добавляются с помощью отдельного ресурсаyandex_mdb_mongodb_user. - (Опционально) Внесите дополнительные изменения, если вам нужна не идентичная, а кастомизированная копия.
- Укажите новое имя кластера в строке
-
В директории
imported-clusterполучите данные для аутентификации. -
В этой же директории настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в директорию
imported-clusterи укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле. -
Проверьте корректность файлов конфигурации Terraform:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Yandex StoreDoc:
- создание, в т. ч. путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts, например:
resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
}
}
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host.
Создайте кластер Yandex StoreDoc с тестовыми характеристиками:
- С именем
mymg. - В окружении
production. - В сети
default. - В группе безопасности с идентификатором
enp6saqnq4ie********. - С одним хостом класса
s2.microв подсетиb0rcctk2rvtr********, в зоне доступностиkz1-a. - С хранилищем на сетевых SSD-дисках (
network-ssd) размером 20 ГБ. - С одним пользователем,
user1, с паролемuser1user1. - С одной базой данных,
db1. - С защитой от непреднамеренного удаления.
Выполните следующую команду:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--network-name default \
--security-group-ids enp6saqnq4ie******** \
--mongod-resource-preset s2.micro \
--host zone-id=kz1-a,subnet-id=b0rcctk2rvtr******** \
--mongod-disk-size 20 \
--mongod-disk-type network-ssd \
--user name=user1,password=user1user1 \
--database name=db1 \
--deletion-protection
Создайте кластер Yandex StoreDoc и сеть для него с тестовыми характеристиками:
-
Название —
mymg. -
Версия —
8.0. -
Окружение —
PRODUCTION. -
Идентификатор облака —
b1gq90dgh25********. -
Идентификатор каталога —
b1gia87mbaom********. -
Сеть —
mynet. -
Класс хоста —
s2.micro. -
Количество блоков
host— один. -
Подсеть —
mysubnet. Сетевые настройки:- Зона доступности —
kz1-a. - Диапазон —
10.5.0.0/24.
- Зона доступности —
-
Группа безопасности —
mymg-sg. Правила группы разрешают TCP-подключения к кластеру из интернета через порт27018. -
Хранилище на сетевых SSD-дисках —
network-ssd. -
Размер хранилища — 20 ГБ.
-
Пользователь —
user1. -
Пароль —
user1user1. -
База данных —
db1. -
Защита от непреднамеренного удаления — включена.
Конфигурационный файл для кластера с одним хостом:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "8.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
}
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
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"]
}
Создание шардированного кластера
Кластер Yandex StoreDoc можно создать со стандартным или расширенным шардированием. Подробнее о видах шардирования см. в разделе Особенности управления шардированием.
Стандартное шардирование
Создайте кластер Yandex StoreDoc и сеть для него с несколькими хостами:
- один хост
MONGOD; - три хоста
MONGOINFRA.
Тестовые характеристики кластера:
- Название —
mymg. - Окружение —
PRODUCTION. - Защита от непреднамеренного удаления — включена.
- Версия —
8.0. - База данных —
db1. - Пользователь —
user1. - Пароль —
user1user1. - Класс хоста
MONGOD—s2.micro. - Класс хостов
MONGOINFRA—c3-c2-m4. - Хранилище на сетевых SSD-дисках —
network-ssd. - Размер хранилища — 10 ГБ.
Сетевые характеристики:
-
Сеть —
mynet. -
Группа безопасности —
mymg-sgс идентификаторомenp6saqnq4ie********. В Terraform группа создается с правилом, которое разрешает TCP-подключения к кластеру из интернета через порт27018. -
Подсеть —
mysubnet. -
Зона доступности —
kz1-a. -
Диапазон —
10.5.0.0/24(только для Terraform).
Выполните команду, чтобы создать кластер Yandex StoreDoc со стандартным шардированием:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 8.0 \
--database name=db1 \
--user name=user1,password=user1user1 \
--mongod-resource-preset s2.micro \
--mongod-disk-type network-ssd \
--mongod-disk-size 10 \
--host type=mongod,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--mongoinfra-resource-preset c3-c2-m4 \
--mongoinfra-disk-type network-ssd \
--mongoinfra-disk-size 10 \
--host type=mongoinfra,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--network-name mynet \
--security-group-ids enp6saqnq4ie********
Конфигурационный файл для кластера со стандартным шардированием:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "8.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongoinfra {
resource_preset_id = "c3-c2-m4"
disk_type_id = "network-ssd"
disk_size = 10
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
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"]
}
Расширенное шардирование
Создайте кластер Yandex StoreDoc и сеть для него с несколькими хостами:
- один хост
MONGOD; - два хоста
MONGOS; - три хоста
MONGOCFG.
Тестовые характеристики кластера:
- Название —
mymg. - Окружение —
PRODUCTION. - Защита от непреднамеренного удаления — включена.
- Версия —
8.0. - База данных —
db1. - Пользователь —
user1. - Пароль —
user1user1. - Класс хостов —
s2.micro. - Хранилище на сетевых SSD-дисках —
network-ssd. - Размер хранилища — 10 ГБ.
Сетевые характеристики:
- Сеть —
mynet. - Группа безопасности —
mymg-sgс идентификаторомenp6saqnq4ie********. В Terraform группа создается с правилом, которое разрешает TCP-подключения к кластеру из интернета через порт27018. - Подсеть —
mysubnet. - Зона доступности —
kz1-a. - Диапазон —
10.5.0.0/24(только для Terraform).
Выполните команду, чтобы создать кластер Yandex StoreDoc с расширенным шардированием:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 8.0 \
--database name=db1 \
--user name=user1,password=user1user1 \
--mongod-resource-preset s2.micro \
--mongod-disk-type network-ssd \
--mongod-disk-size 10 \
--host type=mongod,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--mongos-resource-preset s2.micro \
--mongos-disk-type network-ssd \
--mongos-disk-size 10 \
--host type=mongos,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--host type=mongos,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--mongocfg-resource-preset s2.micro \
--mongocfg-disk-type network-ssd \
--mongocfg-disk-size 10 \
--host type=mongocfg,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=kz1-a,`
`subnet-name=mysubnet \
--network-name mynet \
--security-group-ids enp6saqnq4ie********
Конфигурационный файл для кластера с расширенным шардированием:
resource "yandex_mdb_mongodb_cluster" "mymg" {
name = "mymg"
environment = "PRODUCTION"
network_id = yandex_vpc_network.mynet.id
security_group_ids = [ yandex_vpc_security_group.mymg-sg.id ]
deletion_protection = true
cluster_config {
version = "8.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongos {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
resources_mongocfg {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 10
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "kz1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
}
resource "yandex_mdb_mongodb_database" "db1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "db1"
}
resource "yandex_mdb_mongodb_user" "user1" {
cluster_id = yandex_mdb_mongodb_cluster.mymg.id
name = "user1"
password = "user1user1"
permission {
database_name = "db1"
}
depends_on = [
yandex_mdb_mongodb_database.db1
]
}
resource "yandex_vpc_network" "mynet" {
name = "mynet"
}
resource "yandex_vpc_security_group" "mymg-sg" {
name = "mymg-sg"
network_id = yandex_vpc_network.mynet.id
ingress {
description = "Yandex StoreDoc"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
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"]
}