Миграция данных в Managed Service for MongoDB
Важно
Часть ресурсов, необходимых для прохождения практического руководства, доступны только в регионе Россия.
Чтобы перенести ваши данные в сервис Managed Service for MongoDB, нужно перенести данные, запретить запись в старую базу данных и переключить нагрузку на кластер-приемник в Yandex Cloud.
Перенести данные из стороннего кластера-источника в кластер-приемник Managed Service for MongoDB можно двумя способами:
-
Перенос данных с использованием сервиса Yandex Data Transfer.
Этот способ миграции позволяет:
- перенести базу без остановки обслуживания пользователей;
- мигрировать со старых версий MongoDB на более новые;
- обойтись без создания промежуточной виртуальной машины или разрешения доступа к вашему кластеру-приемнику Managed Service for MongoDB из интернета.
Чтобы использовать этот способ миграции, разрешите подключение к кластеру-источнику из интернета.
Подробнее см. в разделе Какие задачи решает сервис Yandex Data Transfer.
-
Миграция при помощи дампа базы.
Дамп — набор файлов, который позволяет восстановить состояние базы данных. Чтобы перенести данные в кластер Managed Service for MongoDB, создайте дамп базы с помощью утилиты
mongodump
и восстановите его на кластере-приемнике с помощью утилитыmongorestore
. Чтобы обеспечить полноту дампа, перед его созданием кластер-источник следует перевести в режимтолько чтение
.
Перед началом работы
Создайте кластер-приемник Managed Service for MongoDB, вычислительная мощность и размер хранилища которого соответствуют среде, в которой развернута мигрируемая база данных.
Имя базы в кластере-приемнике должно совпадать с именем базы-источника.
Миграция данных с использованием сервиса Yandex Data Transfer
-
Создайте эндпоинт для источника со следующими параметрами:
-
Тип базы данных —
MongoDB
. -
Параметры эндпоинта → Настройки подключения —
Пользовательская инсталляция
.Укажите параметры подключения к кластеру-источнику.
Примечание
Так как сервис не поддерживает перенос коллекций Time Series
, необходимо исключить такие коллекции в настройках эндпоинта. -
-
Создайте эндпоинт для приемника со следующими параметрами:
-
Тип базы данных —
MongoDB
. -
Параметры эндпоинта → Настройки подключения —
Кластер Managed Service for MongoDB
.Укажите идентификатор кластера-приемника.
-
-
Создайте трансфер типа Копирование и репликация, использующий созданные эндпоинты.
Чтобы ускорить копирование больших коллекций (более 1 ГБ), включите параллельное копирование в настройках трансфера. Укажите два воркера или больше. Коллекция разделится на указанное количество частей, которые будут копироваться параллельно.
Чтобы параллельное копирование работало, тип данных
поля_id
у всех документов коллекции должен быть одинаковым. Если трансфер обнаруживает неоднородность типов, то коллекция не разбивается на части и переносится в одном потоке. При необходимости перед началом трансфера удалите из коллекции документы с отличающимися типами данных.Примечание
Если после активации трансфера в коллекцию добавится документ с отличающимся типом данных, трансфер перенесет его на стадии репликации, после параллельного копирования. Но при повторной активации трансфер не сможет разбить коллекцию на части, так как требование к типу поля
_id
во всех документах коллекции не будет выполнено. -
Дождитесь перехода трансфера в статус Реплицируется.
-
Переведите кластер-источник в режим
только чтение
и переключите нагрузку на кластер-приемник. -
На странице мониторинга трансфера дождитесь снижения до нуля характеристики Maximum data transfer delay. Это значит, что на кластер-приемник перенесены все изменения, произошедшие в кластере-источнике после завершения копирования данных.
-
Деактивируйте трансфер и дождитесь его перехода в статус Остановлен.
Подробнее о статусах трансфера см. в разделе Жизненный цикл трансфера.
-
Удалите эндпоинты для источника и приемника.
Миграция при помощи дампа базы
Последовательность действий:
- Создайте дамп мигрируемой базы с помощью утилиты
mongodump
. - При необходимости создайте виртуальную машину в Compute Cloud, чтобы восстанавливать базу из дампа в инфраструктуре Yandex Cloud.
- Восстановите данные из дампа в кластере с помощью утилиты
mongorestore
.
Создайте дамп
Создать дамп базы данных следует с помощью утилиты mongodump
. Подробно утилита описана в документации MongoDB
-
Установите
mongodump
и дополнительные утилиты для работы с MongoDB. Пример для Ubuntu 20.04 LTS:wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list sudo apt update sudo apt install mongodb-org-shell mongodb-org-tools
Инструкции для других платформ, а также более подробную информацию об установке утилит можно найти на странице Install MongoDB
. -
Перед созданием дампа рекомендуется переключить СУБД в режим «только чтение», чтобы не потерять данные, которые могут появиться за время создания дампа.
-
Создайте дамп базы данных:
mongodump --host <адрес_сервера_СУБД> \ --port <порт> \ --username <имя_пользователя> \ --password "<пароль>" \ --db <имя_БД> \ --out ~/db_dump
Если вы можете использовать несколько ядер процессора для создания дампа, задайте флаг
-j
с количеством доступных ядер:mongodump --host <адрес_сервера_СУБД> \ --port <порт> \ --username <имя_пользователя> \ --password "<пароль>" \ -j <количество_ядер> \ --db <имя_БД> \ --out ~/db_dump
-
Архивируйте дамп:
tar -cvzf db_dump.tar.gz ~/db_dump
(Опционально) Создайте виртуальную машину для загрузки дампа
Промежуточная виртуальная машина в Yandex Compute Cloud понадобится, если:
- К вашему кластеру Managed Service for MongoDB нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
Чтобы подготовить виртуальную машину для восстановления дампа:
-
В консоли управления создайте новую виртуальную машину из образа Ubuntu 20.04 LTS. Нужное количество оперативной памяти и ядер процессора зависит от объема переносимых данных и требуемой скорости переноса.
Минимальной конфигурации (1 ядро, 2 ГБ RAM, 10 ГБ дискового пространства) должно хватить для переноса базы до 1 ГБ. Чем больше переносимая база, тем больше должно быть дискового пространства (как минимум в два раза больше, чем размер базы) и оперативной памяти.
Виртуальная машина должна находиться в той же сети и зоне доступности, что хост-мастер кластера Managed Service for MongoDB. Кроме того, виртуальной машине должен быть присвоен внешний IP-адрес, чтобы вы могли загрузить файл дампа извне Yandex Cloud.
-
Установите клиент MongoDB и дополнительные утилиты для работы с СУБД:
wget -qO - https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list sudo apt update sudo apt install mongodb-org-shell mongodb-org-tools
-
Перенесите дамп базы данных с вашего сервера на виртуальную машину, например, используя утилиту
scp
:scp ~/db_dump.tar.gz <имя_пользователя_ВМ>@<публичный_адрес_ВМ>:/tmp/db_dump.tar.gz
-
Распакуйте дамп на виртуальной машине:
tar -xzf /tmp/db_dump.tar.gz
В результате вы получите виртуальную машину с дампом базы данных, который готов к восстановлению на кластер Managed Service for MongoDB.
Восстановите данные
Восстанавливать базу данных из дампа следует с помощью утилиты mongorestore
-
Если вы восстанавливаете дамп с виртуальной машины в Yandex Cloud:
mongorestore --host <адрес_сервера_СУБД> \ --port <порт> \ --username <имя_пользователя> \ --password "<пароль>" \ -j <количество_потоков> \ --authenticationDatabase <имя_БД> \ --nsInclude '*.*' /tmp/db_dump
-
Если вы восстанавливаете дамп с сервера вне Yandex Cloud, для
mongorestore
необходимо явно задать параметры SSL:mongorestore --host <адрес_сервера_СУБД> \ --port <порт> \ --ssl \ --sslCAFile <путь_к_файлу_сертификата> \ --username <имя_пользователя> \ --password "<пароль>" \ -j <количество_потоков> \ --authenticationDatabase <имя_БД> \ --nsInclude '*.*' ~/db_dump
-
Если нужно перенести только определенные коллекции, задайте флаги
--nsInclude
и--nsExclude
с указанием на пространства имен, которые нужно или не нужно включать для восстанавливаемого набора коллекций.