Создание кластера MongoDB
Кластер MongoDB — это один или несколько хостов базы данных, между которыми можно настроить репликацию. Репликация работает по умолчанию в любом кластере из более чем 1 хоста (первичный хост принимает запросы на запись и асинхронно дублирует изменения на вторичных хостах).
Примечание
- Количество хостов, которые можно создать вместе с кластером MongoDB, зависит от выбранного типа диска и класса хостов.
- Доступные типы диска зависят от выбранного класса хостов.
Создать кластер
Для создания кластера Managed Service for MongoDB нужна роль vpc.user и роль managed-mongodb.editor или выше. О том, как назначить роль, см. в документации Identity and Access Management.
Чтобы создать кластер Managed Service for MongoDB:
-
В консоли управления
выберите каталог, в котором нужно создать кластер БД. -
Выберите сервис Managed Service for MongoDB.
-
Нажмите кнопку Создать кластер.
-
В блоке Базовые параметры:
-
Введите название в поле Имя кластера. Имя кластера должно быть уникальным в рамках облака.
-
(Опционально) Введите Описание кластера.
-
Выберите окружение, в котором нужно создать кластер (после создания кластера окружение изменить невозможно):
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 ГБ.
-
Выберите размер хранилища, который будет использоваться для данных и резервных копий. Подробнее о том, как занимают пространство резервные копии, см. в разделе Резервные копии.
-
-
В блоке База данных укажите атрибуты БД:
-
Имя БД.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config
,local
,admin
иmdb_internal
зарезервированы для собственных нужд Managed Service for MongoDB. Создавать БД с этими именами нельзя. -
Имя пользователя.
-
Пароль пользователя. Минимум 8 символов.
-
-
В блоке Сетевые настройки выберите:
- Облачную сеть для размещения кластера.
- Группы безопасности для сетевого трафика кластера. Может потребоваться дополнительная настройка групп безопасности для того, чтобы можно было подключаться к кластеру.
-
В блоке Хосты добавьте хосты БД, создаваемые вместе с кластером:
- Нажмите кнопку Добавить хост.
- Выберите зону доступности.
- Выберите подсеть в указанной зоне доступности. Если подсети нет, создайте ее.
- Если хост должен быть доступен снаружи Yandex Cloud, включите опцию Публичный доступ.
Чтобы обеспечить отказоустойчивость, для типов диска
local-ssd
иnetwork-ssd-nonreplicated
необходимо как минимум 3 хоста. Подробнее см. в разделе Хранилище.По умолчанию хосты создаются в разных зонах доступности. См. подробнее об управлении хостами.
-
При необходимости задайте дополнительные настройки кластера:
-
Начало резервного копирования (UTC) — промежуток времени, в течение которого начинается резервное копирование кластера. Время указывается по UTC в 24-часовом формате. По умолчанию —
22:00 - 23:00
UTC. -
Срок хранения автоматических резервных копий, дней
Время, в течение которого нужно хранить созданные автоматически резервные копии. Если для такой копии истекает срок хранения, то она удаляется. Значение по умолчанию — 7 дней. Эта функциональность находится на стадии Preview. Подробнее см. в разделе Резервные копии.
Изменение срока хранения затрагивает как новые автоматические резервные копии, так и уже существующие. Например, если изначальный срок хранения был 7 дней и оставшееся время жизни отдельной автоматической резервной копии при таком сроке — 1 день, то при увеличении срока хранения до 9 дней, оставшееся время жизни этой резервной копии будет уже 3 дня.
Для существующего кластера автоматически созданные копии хранятся заданное количество дней, а созданные вручную — бессрочно. После удаления кластера все копии хранятся 7 дней.
-
Окно обслуживания — настройки времени технического обслуживания:
- Чтобы разрешить проведение технического обслуживания в любое время, выберите пункт произвольное (по умолчанию).
- Чтобы указать предпочтительное время начала обслуживания, выберите пункт по расписанию и укажите нужные день недели и час дня по UTC. Например, можно выбрать время, когда кластер наименее загружен.
Операции по техническому обслуживанию проводятся для включенных и выключенных кластеров. Они могут включать в себя: обновление СУБД, применение патчей и так далее.
-
Сбор статистики — включите эту опцию, чтобы пользоваться встроенным инструментом для диагностики производительности в кластере. Эта функциональность находится на стадии Preview.
-
Защита от удаления — защита кластера от непреднамеренного удаления. Включенная защита не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
-
-
При необходимости задайте настройки СУБД.
Примечание
Некоторые настройки MongoDB зависят от выбранного класса хостов.
-
Нажмите кнопку Создать кластер.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать кластер Managed Service for MongoDB:
-
Проверьте, есть ли в каталоге подсети для хостов кластера:
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 <размер_хранилища_ГБ> \ --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
— тип диска. -
--performance-diagnostics
— включить диагностику производительности кластера:true
илиfalse
. -
--deletion-protection
— защита кластера от непреднамеренного удаления:true
илиfalse
. Включенная защита не помешает удалить пользователя или базу данных, а также подключиться вручную и удалить содержимое базы данных.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config
,local
,admin
иmdb_internal
зарезервированы для собственных нужд Managed Service for MongoDB. Создавать БД с этими именами нельзя.Примечание
По умолчанию при создании кластера устанавливается режим технического обслуживания
anytime
— в любое время. Вы можете установить конкретное время обслуживания при изменении настроек кластера. -
Terraform
Terraform распространяется под лицензией Business Source License
Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
Чтобы создать кластер Managed Service for MongoDB:
-
Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:
-
Кластер базы данных — описание кластера и его хостов.
-
Сеть — описание облачной сети, в которой будет расположен кластер. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.
-
Подсети — описание подсетей, к которым будут подключены хосты кластера. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.
Пример структуры конфигурационного файла:
resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { name = "<имя_кластера>" environment = "<окружение>" network_id = "<идентификатор_сети>" security_group_ids = [ "<список_идентификаторов_групп_безопасности>" ] deletion_protection = <защита_кластера_от_удаления> cluster_config { version = "<версия_MongoDB>" } resources_mongod { resource_preset_id = "<класс_хоста>" disk_type_id = "<тип_диска>" disk_size = <размер_хранилища_ГБ> } host { zone_id = "<зона_доступности>" subnet_id = "<идентификатор_подсети>" assign_public_ip = <публичный_доступ> host_parameters { hidden = <скрытие_хоста> secondary_delay_secs = <отставание_реплики_в_секундах> priority = <приоритет_хоста> } } } resource "yandex_mdb_mongodb_database" "<имя_БД>" { cluster_id = "<идентификатор_кластера>" name = "<имя_БД>" } resource "yandex_mdb_mongodb_user" "<имя_пользователя>" { 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 = "<идентификатор_сети>" 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
— версия MongoDB: 6.0 или 7.0.
Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config
,local
,admin
иmdb_internal
зарезервированы для собственных нужд Managed Service for MongoDB. Создавать БД с этими именами нельзя.Чтобы настроить время технического обслуживания (в т. ч. для выключенных кластеров), добавьте к описанию кластера блок
maintenance_window
:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... maintenance_window { type = <тип_технического_обслуживания> day = <день_недели> hour = <час_дня> } ... }
Где:
type
— тип технического обслуживания. Принимает значения:ANYTIME
— в любое время.WEEKLY
— по расписанию.
day
— день недели для типаWEEKLY
в форматеDDD
. Например,MON
.hour
— час дня по UTC для типаWEEKLY
в форматеHH
. Например,21
.
Более подробную информацию о ресурсах, которые вы можете создать с помощью Terraform, см. в документации провайдера
. -
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Создайте кластер.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
После этого в указанном каталоге будут созданы все требуемые ресурсы, а в терминале отобразятся FQDN хостов. Проверить появление ресурсов и их настройки можно в консоли управления
.Ограничения по времени
Провайдер Terraform ограничивает время на выполнение операций с кластером Managed Service for MongoDB:
- создание, в т. ч. путем восстановления из резервной копии, — 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": <защита_кластера_от_удаления:_true_или_false>, "maintenanceWindow": { "weeklyMaintenanceWindow": { "day": "<день_недели>", "hour": "<час>" } }, "configSpec": { "version": "<версия_MongoDB>", "mongodb": { "mongod": { "resources": { "resourcePresetId": "<класс_хоста>", "diskSize": "<размер_хранилища_в_байтах>", "diskTypeId": "<тип_диска>" } } }, "backupWindowStart": { "hours": "<часы>", "minutes": "<минуты>", "seconds": "<секунды>", "nanos": "<наносекунды>" }, "backupRetainPeriodDays": "<время_хранения_резервных_копий_в_днях>", "performanceDiagnostics": { "profilingEnabled": <включить_профилировщик:_true_или_false> } }, "databaseSpecs": [ { "name": "<имя_БД>" }, { <аналогичный_набор_настроек_для_БД_2> }, { ... }, { <аналогичный_набор_настроек_для_БД_N> } ], "userSpecs": [ { "name": "<имя_пользователя>", "password": "<пароль_пользователя>", "permissions": [ { "databaseName": "<имя_БД>", "roles": [ "<роль_1>", "<роль_2>", ..., "<роль_N>" ] } ] }, { <аналогичный_набор_настроек_для_пользователя_2> }, { ... }, { <аналогичный_набор_настроек_для_пользователя_N> } ], "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "assignPublicIp": <публичный_доступ_к_хосту:_true_или_false>, "type": "<тип_хоста>", "shardName": "<имя_шарда>", "hidden": <скрытие_хоста:_true_или_false>, "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
— версия MongoDB: 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
— включение профилировщика.
-
-
databaseSpecs
— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и содержит параметрname
— имя БД.Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config
,local
,admin
иmdb_internal
зарезервированы для собственных нужд Managed Service for MongoDB. Создавать БД с этими именами нельзя. -
userSpecs
— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name
— имя пользователя. -
password
— пароль пользователя. -
permissions
— настройки разрешений пользователя:databaseName
— имя базы данных, к которой пользователь получает доступ.roles
— массив ролей пользователя. Каждая роль представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Пользователи и роли.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions
.
-
-
hostSpecs
— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zoneId
— зона доступности.subnetId
— идентификатор подсети.assignPublicIp
— доступность хоста из интернета по публичному IP-адресу.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": <защита_кластера_от_удаления:_true_или_false>, "maintenance_window": { "weekly_maintenance_window": { "day": "<день_недели>", "hour": "<час>" } }, "config_spec": { "version": "<версия_MongoDB>", "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": <включить_профилировщик:_true_или_false> } }, "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": <публичный_доступ_к_хосту:_true_или_false>, "type": "<тип_хоста>", "shard_name": "<имя_шарда>", "hidden": <скрытие_хоста:_true_или_false>, "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
— версия MongoDB: 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
— включение профилировщика.
-
-
database_specs
— настройки баз данных в виде массива элементов. Каждый элемент соответствует отдельной БД и содержит параметрname
— имя БД.Имя базы может содержать латинские буквы, цифры, нижнее подчеркивание и дефис. Максимальная длина имени — 63 символа. Имена
config
,local
,admin
иmdb_internal
зарезервированы для собственных нужд Managed Service for MongoDB. Создавать БД с этими именами нельзя. -
user_specs
— настройки пользователей в виде массива элементов. Каждый элемент соответствует отдельному пользователю и имеет следующую структуру:-
name
— имя пользователя. -
password
— пароль пользователя. -
permissions
— настройки разрешений пользователя:database_name
— имя базы данных, к которой пользователь получает доступ.roles
— массив ролей пользователя. Каждая роль представлена в виде отдельной строки в массиве. Список доступных значений см. в разделе Пользователи и роли.
Для каждой базы данных добавьте отдельный элемент с настройками разрешений в массив
permissions
.
-
-
host_specs
— настройки хостов кластера в виде массива элементов. Каждый элемент соответствует отдельному хосту и имеет следующую структуру:zone_id
— зона доступности.subnet_id
— идентификатор подсети.assign_public_ip
— доступность хоста из интернета по публичному IP-адресу.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
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Важно
Если вы указали идентификаторы групп безопасности при создании кластера, то для подключения к нему может потребоваться дополнительная настройка групп безопасности.
Создать копию кластера
Вы можете создать кластер MongoDB, который будет обладать настройками созданного ранее кластера. Для этого конфигурация исходного кластера MongoDB импортируется в Terraform. В результате вы можете либо создать идентичную копию, либо взять за основу импортированную конфигурацию и внести в нее изменения. Использовать импорт удобно, если исходный кластер MongoDB обладает множеством настроек и нужно создать похожий на него кластер.
Чтобы создать копию кластера MongoDB:
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
В той же рабочей директории разместите файл с расширением
.tf
и содержимым:resource "yandex_mdb_mongodb_cluster" "old" { }
-
Запишите идентификатор первоначального кластера MongoDB в переменную окружения:
export MONGODB_CLUSTER_ID=<идентификатор_кластера>
Идентификатор можно запросить вместе со списком кластеров в каталоге.
-
Импортируйте настройки первоначального кластера MongoDB в конфигурацию Terraform:
terraform import yandex_mdb_mongodb_cluster.old ${MONGODB_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 ограничивает время на выполнение операций с кластером Managed Service for MongoDB:
- создание, в т. ч. путем восстановления из резервной копии, — 30 минут;
- изменение — 60 минут.
Операции, длящиеся дольше указанного времени, прерываются.
Как изменить эти ограничения?
Добавьте к описанию кластера блок timeouts
, например:
resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" {
...
timeouts {
create = "1h30m" # Полтора часа
update = "2h" # 2 часа
}
}
Примеры
Создание кластера с одним хостом
Чтобы создать кластер с одним хостом, передайте один параметр --host
.
Создайте кластер Managed Service for MongoDB с тестовыми характеристиками:
- С именем
mymg
. - В окружении
production
. - В сети
default
. - В группе безопасности с идентификатором
enp6saqnq4ie********
. - С одним хостом класса
s2.micro
в подсетиb0rcctk2rvtr********
, в зоне доступностиru-central1-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=ru-central1-a,subnet-id=b0rcctk2rvtr******** \
--mongod-disk-size 20 \
--mongod-disk-type network-ssd \
--user name=user1,password=user1user1 \
--database name=db1 \
--deletion-protection
Создайте кластер Managed Service for MongoDB и сеть для него с тестовыми характеристиками:
-
Название —
mymg
. -
Версия —
7.0
. -
Окружение —
PRODUCTION
. -
Идентификатор облака —
b1gq90dgh25********
. -
Идентификатор каталога —
b1gia87mbaom********
. -
Сеть —
mynet
. -
Класс хоста —
s2.micro
. -
Количество блоков
host
— один. -
Подсеть —
mysubnet
. Сетевые настройки:- Зона доступности —
ru-central1-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 = "7.0"
}
resources_mongod {
resource_preset_id = "s2.micro"
disk_type_id = "network-ssd"
disk_size = 20
}
host {
zone_id = "ru-central1-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 = "MongoDB"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Создание шардированного кластера
Кластер Managed Service for MongoDB можно создать со стандартным или расширенным шардированием. Подробнее о видах шардирования см. в разделе Особенности управления шардированием.
Стандартное шардирование
Создайте кластер Managed Service for MongoDB и сеть для него с несколькими хостами:
- один хост
MONGOD
; - три хоста
MONGOINFRA
.
Тестовые характеристики кластера:
- Название —
mymg
. - Окружение —
PRODUCTION
. - Защита от непреднамеренного удаления — включена.
- Версия —
7.0
. - База данных —
db1
. - Пользователь —
user1
. - Пароль —
user1user1
. - Класс хоста
MONGOD
—s2.micro
. - Класс хостов
MONGOINFRA
—c3-c2-m4
. - Хранилище на сетевых SSD-дисках —
network-ssd
. - Размер хранилища — 10 ГБ.
Сетевые характеристики:
-
Сеть —
mynet
. -
Группа безопасности —
mymg-sg
с идентификаторомenp6saqnq4ie********
. В Terraform группа создается с правилом, которое разрешает TCP-подключения к кластеру из интернета через порт27018
. -
Подсеть —
mysubnet
. -
Зона доступности —
ru-central1-a
. -
Диапазон —
10.5.0.0/24
(только для Terraform).
Выполните команду, чтобы создать кластер Managed Service for MongoDB со стандартным шардированием:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 7.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=ru-central1-a,`
`subnet-name=mysubnet \
--mongoinfra-resource-preset c3-c2-m4 \
--mongoinfra-disk-type network-ssd \
--mongoinfra-disk-size 10 \
--host type=mongoinfra,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongoinfra,`
`zone-id=ru-central1-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 = "7.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 = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongoinfra"
}
host {
zone_id = "ru-central1-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 = "MongoDB"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}
Расширенное шардирование
Создайте кластер Managed Service for MongoDB и сеть для него с несколькими хостами:
- один хост
MONGOD
; - два хоста
MONGOS
; - три хоста
MONGOCFG
.
Тестовые характеристики кластера:
- Название —
mymg
. - Окружение —
PRODUCTION
. - Защита от непреднамеренного удаления — включена.
- Версия —
7.0
. - База данных —
db1
. - Пользователь —
user1
. - Пароль —
user1user1
. - Класс хостов —
s2.micro
. - Хранилище на сетевых SSD-дисках —
network-ssd
. - Размер хранилища — 10 ГБ.
Сетевые характеристики:
- Сеть —
mynet
. - Группа безопасности —
mymg-sg
с идентификаторомenp6saqnq4ie********
. В Terraform группа создается с правилом, которое разрешает TCP-подключения к кластеру из интернета через порт27018
. - Подсеть —
mysubnet
. - Зона доступности —
ru-central1-a
. - Диапазон —
10.5.0.0/24
(только для Terraform).
Выполните команду, чтобы создать кластер Managed Service for MongoDB с расширенным шардированием:
yc managed-mongodb cluster create \
--name mymg \
--environment production \
--deletion-protection \
--mongodb-version 7.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=ru-central1-a,`
`subnet-name=mysubnet \
--mongos-resource-preset s2.micro \
--mongos-disk-type network-ssd \
--mongos-disk-size 10 \
--host type=mongos,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongos,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--mongocfg-resource-preset s2.micro \
--mongocfg-disk-type network-ssd \
--mongocfg-disk-size 10 \
--host type=mongocfg,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=ru-central1-a,`
`subnet-name=mysubnet \
--host type=mongocfg,`
`zone-id=ru-central1-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 = "7.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 = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongod"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongos"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "ru-central1-a"
subnet_id = yandex_vpc_subnet.mysubnet.id
type = "mongocfg"
}
host {
zone_id = "ru-central1-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 = "MongoDB"
port = 27018
protocol = "TCP"
v4_cidr_blocks = [ "0.0.0.0/0" ]
}
}
resource "yandex_vpc_subnet" "mysubnet" {
name = "mysubnet"
zone = "ru-central1-a"
network_id = yandex_vpc_network.mynet.id
v4_cidr_blocks = ["10.5.0.0/24"]
}