Управление резервными копиями в Managed Service for MongoDB
Вы можете создавать резервные копии и восстанавливать кластеры из имеющихся резервных копий.
Также Managed Service for MongoDB ежедневно создает автоматическую резервную копию. Вы можете задать время начала резервного копирования и срок хранения для нее.
Восстановить кластер из резервной копии
Технология Point-in-Time Recovery (PITR) позволяет восстановить состояние кластера на любой момент времени в интервале от создания самой старой резервной копии до архивации самой свежей коллекции oplog
Например, если операция создания резервной копии завершилась 10.08.2020 в 12:00:00 UTC, текущая дата — 15.08.2020 19:00:00 UTC, а последняя коллекция oplog была сохранена 15.08.2020 в 18:50:00 UTC, кластер может быть восстановлен в любое свое состояние в промежутке времени с 10.08.2020 12:00:01 UTC до 15.08.2020 18:50:00 UTC включительно.
Важно
PITR не поддерживается для кластеров с включенным шардированием. Такие кластеры могут быть восстановлены только на момент создания выбранной резервной копии.
Восстанавливая кластер из резервной копии, вы создаете новый кластер с данными из резервной копии. Если в каталоге не хватает ресурсов для создания такого кластера, восстановиться из резервной копии не получится. Средняя скорость восстановления из резервной копии — 10 МБайт/с.
Для нового кластера необходимо задать все параметры, обязательные при создании, кроме типа кластера (резервную копию MongoDB не получится восстановить как кластер PostgreSQL).
При восстановлении до состояния на текущий момент времени новый кластер будет отражать состояние:
- существующего кластера на момент восстановления;
- удаленного кластера на момент архивации последней коллекции oplog.
Чтобы восстановить из резервной копии существующий кластер:
-
Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. -
Нажмите на имя нужного кластера и выберите вкладку
Резервные копии. -
Нажмите на значок
нужной резервной копии и нажмите Восстановить кластер. -
Задайте настройки нового кластера. В списке Каталог можно выбрать каталог для нового кластера.
-
Чтобы восстановить состояние кластера на требуемый момент времени после создания этой резервной копии, задайте нужное значение настройки Дата и время восстановления (UTC). Значение можно ввести вручную или выбрать из выпадающего календаря.
Если оставить настройку без изменений, кластер будет восстановлен в состояние на момент завершения создания резервной копии.
-
Нажмите кнопку Восстановить кластер.
Чтобы восстановить из резервной копии удаленный ранее кластер:
-
Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. -
На панели слева выберите
Резервные копии. -
Найдите нужную резервную копию по времени создания и идентификатору кластера. В колонке Идентификатор содержатся идентификаторы в формате
<идентификатор_кластера>:<идентификатор_резервной_копии>
. -
Нажмите на значок
нужной резервной копии и нажмите Восстановить кластер. -
Задайте настройки нового кластера. В списке Каталог можно выбрать каталог для нового кластера.
-
Чтобы восстановить состояние кластера на требуемый момент времени после создания этой резервной копии, задайте нужное значение настройки Дата и время восстановления (UTC). Значение можно ввести вручную или выбрать из выпадающего календаря.
Если оставить настройку без изменений, кластер будет восстановлен в состояние на момент завершения создания резервной копии.
-
Нажмите кнопку Восстановить кластер.
Managed Service for MongoDB запустит операцию создания кластера из резервной копии.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы восстановить кластер из резервной копии:
-
Посмотрите описание команды CLI для восстановления кластера MongoDB:
yc managed-mongodb cluster restore --help
-
Получите список доступных резервных копий кластеров MongoDB:
yc managed-mongodb backup list
Результат:
+--------------------------+---------------------+----------------------+---------------------+--------+-----------+ | ID | CREATED AT | SOURCE CLUSTER ID | STARTED AT | SIZE | TYPE | +--------------------------+---------------------+----------------------+---------------------+--------+-----------+ | c9qlk4v13uq7********:... | 2020-08-10 12:00:00 | c9qlk4v13uq7******** | 2020-08-10 11:55:17 | 3.3 KB | AUTOMATED | | ... | | +--------------------------+---------------------+----------------------+---------------------+--------+-----------+
Время завершения создания резервной копии указано в столбце
CREATED AT
списка доступных резервных копий в форматеyyyy-mm-dd hh:mm:ss
(2020-08-10 12:00:00
в примере выше). Вы можете восстановить состояние кластера на любой момент времени, начиная от создания резервной копии. -
Выполните команду создания нового кластера из резервной копии (в примере приведены только некоторые параметры):
yc managed-mongodb cluster restore \ --backup-id <идентификатор_резервной_копии> \ --recovery-target-timestamp <момент_времени> \ --mongodb-version <версия_MongoDB> \ --name <имя_нового_кластера> \ --environment <окружение> \ --network-name <имя_сети> \ --host zone-id=<зона_доступности>,` `subnet-id=<идентификатор_подсети> \ --mongod-resource-preset <класс_хоста> \ --mongod-disk-size <размер_хранилища_ГБ> \ --mongod-disk-type <тип_диска> \ --performance-diagnostics=<включить_диагностику>
Где:
-
--recovery-target-timestamp
— момент времени, на который нужно восстановить состояние кластера MongoDB, в формате UNIX time . Если параметр не задан, восстановится состояние кластера на момент завершения создания резервной копии. -
--environment
— окружение:PRESTABLE
илиPRODUCTION
. -
--mongod-disk-type
— тип диска:network-hdd
илиnetwork-ssd
. -
--performance-diagnostics
— включить диагностику производительности кластера:true
илиfalse
.
-
Чтобы восстановить из резервной копии существующий кластер, воспользуйтесь методом REST API restore для ресурса Cluster или вызовом gRPC API ClusterService/Restore и передайте в запросе:
- Идентификатор требуемой резервной копии в параметре
backupId
. Чтобы узнать идентификатор, получите список резервных копий в кластере. - Имя нового кластера, который будет содержать восстановленные из резервной копии данные, в параметре
name
. Имя кластера должно быть уникальным в рамках каталога.
В параметре recoveryTargetSpec.timestamp
укажите момент времени, на который нужно восстановить состояние кластера MongoDB, в формате UNIX time
Создать резервную копию
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку
Резервные копии. - Нажмите кнопку Создать резервную копию.
Сервис начнет создавать резервную копию без дополнительного подтверждения.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы создать резервную копию кластера:
-
Посмотрите описание команды CLI для создания резервной копии MongoDB:
yc managed-mongodb cluster backup --help
-
Запросите создание резервной копии, указав идентификатор или имя кластера:
yc managed-mongodb cluster backup <имя_или_идентификатор_кластера>
Идентификатор и имя кластера можно получить со списком кластеров.
Чтобы создать резервную копию, воспользуйтесь методом REST API backup для ресурса Cluster или вызовом gRPC API ClusterService/Backup и передайте в запросе идентификатор кластера в параметре clusterId
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
Важно
Во время создания резервной копии производительность кластера может снижаться.
Получить список резервных копий
Чтобы получить список резервных копий кластера:
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку
Резервные копии.
Чтобы получить список всех резервных копий в каталоге:
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - На панели слева выберите
Резервные копии.
В этих списках содержится следующая информация:
- Имя резервной копии.
- Шард-источник.
- Размер резервной копии.
- Тип резервной копии: автоматическая (
Automated
) или ручная (Manual
). - Время начала создания резервной копии по UTC (Coordinated Universal Time).
- Время окончания создания резервной копии по UTC.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список резервных копий кластеров MongoDB, доступных в каталоге по умолчанию, выполните команду:
yc managed-mongodb backup list
Результат:
+--------------------------+---------------------+----------------------+---------------------+--------+-----------+
| ID | CREATED AT | SOURCE CLUSTER ID | STARTED AT | SIZE | TYPE |
+--------------------------+---------------------+----------------------+---------------------+--------+-----------+
| c9qlk4v13uq7********:... | 2020-08-10 12:00:00 | c9qlk4v13uq7******** | 2020-08-10 11:55:17 | 3.3 KB | AUTOMATED |
| c9qpm90p3pcg********:... | 2020-08-09 22:01:04 | c9qpm90p3pcg******** | 2020-08-09 21:30:00 | 30 KB | MANUAL |
+--------------------------+---------------------+----------------------+---------------------+--------+-----------+
В выведенной таблице содержится следующая информация:
- Идентификатор резервной копии.
- Время окончания создания резервной копии по UTC (Coordinated Universal Time).
- Идентификатор кластера, для которого создавалась эта резервная копия.
- Время начала создания резервной копии по UTC.
- Размер резервной копии.
- Тип резервной копии: автоматическая (
AUTOMATED
) или ручная (MANUAL
).
Чтобы получить список резервных копий кластера, воспользуйтесь методом REST API listBackups для ресурса Cluster или вызовом gRPC API ClusterService/ListBackups и передайте в запросе идентификатор кластера в параметре clusterId
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
Чтобы получить список резервных копий всех кластеров Managed Service for MongoDB в каталоге, воспользуйтесь методом REST API list для ресурса Backup или вызовом gRPC API BackupService/List и передайте в запросе идентификатор каталога в параметре folderId
.
Получить информацию о резервной копии
Чтобы получить информацию о резервной копии существующего кластера:
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - Нажмите на имя нужного кластера и выберите вкладку
Резервные копии.
Чтобы получить информацию о резервной копии удаленного ранее кластера:
- Перейдите на страницу каталога
и выберите сервис Managed Service for MongoDB. - На панели слева выберите
Резервные копии.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить данные о резервной копии кластера MongoDB, выполните команду:
yc managed-mongodb backup get <идентификатор_резервной_копии>
Идентификатор резервной копии можно получить со списком резервных копий.
Чтобы получить информацию о резервной копии, воспользуйтесь методом REST API get для ресурса Backup или вызовом gRPC API BackupService/Get и передайте в запросе идентификатор резервной копии в параметре backupId
.
Чтобы узнать идентификатор, получите список резервных копий.
Задать срок хранения автоматических резервных копий
В консоли управления
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы задать срок хранения автоматических резервных копий, передайте нужное значение в аргументе --backup-retain-period-days
команды изменения кластера:
yc managed-mongodb cluster update <имя_или_идентификатор_кластера> \
--backup-retain-period-days=<срок_хранения_в_днях>
Допустимые значения: от 7
до 35
. Значение по умолчанию — 7
.
Идентификатор и имя кластера можно запросить со списком кластеров в каталоге.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации кластера MongoDB см. в документации провайдера Terraform
. -
Добавьте к описанию кластера MongoDB блок
backup_retain_period_days
в секцииcluster_config
:resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... cluster_config { ... backup_retain_period_days = <срок_хранения_в_днях> } ... } ...
Где
backup_retain_period_days
— срок хранения автоматических резервных копий.Допустимые значения: от
7
до35
. Значение по умолчанию —7
. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы 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 часа } }
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Cluster.update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-mongodb/v1/clusters/<идентификатор_кластера>' \ --data '{ "updateMask": "configSpec.backupRetainPeriodDays", "configSpec": { "backupRetainPeriodDays": <срок_хранения_в_днях> } }'
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
configSpec.backupRetainPeriodDays
— срок хранения автоматических резервных копий.Допустимые значения — от
7
до35
. Значение по умолчанию —7
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом ClusterService/Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask
(в виде массива строкpaths[]
).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }
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 '{ "cluster_id": "<идентификатор_кластера>", "update_mask": { "paths": [ "config_spec.backup_retain_period_days" ] }, "config_spec": { "backup_retain_period_days": <срок_хранения_в_днях> } }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
config_spec.backup_retain_period_days
— срок хранения автоматических резервных копий.Допустимые значения — от
7
до35
. Значение по умолчанию —7
.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Примеры
Создайте новый кластер Managed Service for MongoDB из резервной копии с тестовыми характеристиками:
- Резервная копия для восстановления:
c9qlk4v13uq7********:...
. - Момент времени, на который нужно восстановить:
1597060810
(2020-08-10 12:00:10
). - Версия:
5.0
. - Имя нового кластера:
mynewmg
. - Окружение:
PRODUCTION
. - Сеть:
default
. - Один хост класса
s2.micro
в зоне доступностиru-central1-a
и в подсетиb0rcctk2rvtr********
. - Хранилище на сетевых SSD-дисках (
network-ssd
) размером 20 ГБ. - С базами данных и пользователями, которые существовали в кластере на момент восстановления.
Выполните следующую команду:
yc managed-mongodb cluster restore \
--backup-id c9qlk4v13uq7********:... \
--recovery-target-timestamp 1597060810 \
--mongodb-version 5.0 \
--name mynewmg \
--environment PRODUCTION \
--network-name default \
--host zone-id=ru-central1-a,subnet-id=b0rcctk2rvtr******** \
--mongod-resource-preset s2.micro \
--mongod-disk-size 20 \
--mongod-disk-type network-ssd