Миграция данных в Yandex StoreDoc
Чтобы перенести ваши данные в сервис Yandex StoreDoc, нужно перенести данные, запретить запись в старую базу данных и переключить нагрузку на кластер-приемник в Yandex Cloud.
Перенести данные из стороннего кластера-источника в кластер-приемник Yandex StoreDoc можно двумя способами:
-
Перенос данных с использованием сервиса Yandex Data Transfer.
Этот способ миграции позволяет:
- перенести базу без остановки обслуживания пользователей;
- мигрировать со старых версий MongoDB на более новые;
- обойтись без создания промежуточной виртуальной машины или разрешения доступа к вашему кластеру-приемнику Yandex StoreDoc из интернета.
Чтобы использовать этот способ, разрешите подключение к кластеру-источнику из интернета.
-
Миграция при помощи дампа базы.
Дамп — набор файлов, который позволяет восстановить состояние базы данных. Чтобы перенести данные в кластер Yandex StoreDoc, создайте дамп базы с помощью утилиты
mongodumpи восстановите его на кластере-приемнике с помощью утилитыmongorestore. Чтобы обеспечить полноту дампа, перед его созданием кластер-источник следует перевести в режимтолько чтение
.Используйте этот способ только в том случае, если перенос данных с помощью Yandex Data Transfer по каким-либо причинам невозможен.
Миграция данных с использованием сервиса Yandex Data Transfer
Чтобы перенести данные:
- Создайте кластер-приемник.
- Подготовьте кластер-источник и кластер-приемник.
- Настройте эндпоинты и трансфер.
- Перенесите данные.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Yandex StoreDoc: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (см. тарифы Yandex StoreDoc).
- Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Каждый трансфер: использование вычислительных ресурсов и количество переданных строк данных (см. тарифы Data Transfer).
Создайте кластер-приемник
Создайте кластер-приемник Yandex StoreDoc, вычислительная мощность и размер хранилища которого соответствуют среде, в которой развернута мигрируемая база данных.
Имя базы в кластере-приемнике должно совпадать с именем базы-источника.
Подготовьте кластер-источник и кластер-приемник
- Подготовьте кластер-источник.
- Убедитесь, что настройки сети, в которой размещен кластер-источник, разрешают подключение к нему из интернета.
- Подготовьте кластер-приемник.
Настройте эндпоинты и трансфер
-
Создайте эндпоинт для источника со следующими параметрами:
-
Тип базы данных —
MongoDB. -
Параметры эндпоинта → Настройки подключения —
Пользовательская инсталляция.Укажите параметры подключения к кластеру-источнику.
Примечание
Так как сервис не поддерживает перенос коллекций
Time Series, необходимо исключить такие коллекции в настройках эндпоинта. -
-
Создайте эндпоинт для приемника со следующими параметрами:
-
Тип базы данных —
MongoDB. -
Параметры эндпоинта → Настройки подключения —
Кластер Yandex StoreDoc.Укажите идентификатор кластера-приемника.
-
-
Создайте трансфер типа Копирование и репликация, использующий созданные эндпоинты.
Чтобы ускорить копирование больших коллекций (более 1 ГБ), включите параллельное копирование в настройках трансфера. Укажите два воркера или больше. Коллекция разделится на указанное количество частей, которые будут копироваться параллельно.
Чтобы параллельное копирование работало, поля
_idво всех документах коллекции должны иметь одинаковый тип данных. Если трансфер обнаруживает неоднородность типов, то коллекция не разбивается на части и переносится в одном потоке. При необходимости удалите из коллекции документы с отличающимися типами данных перед началом трансфера.Примечание
Если после активации трансфера в коллекцию добавится документ с отличающимся типом данных, трансфер перенесет его на стадии репликации после параллельного копирования. Однако при повторной активации трансфер не сможет разбить коллекцию на части, так как требование к одинаковому типу поля
_idво всех документах коллекции не будет выполнено.
Перенесите данные
- Активируйте трансфер.
- Дождитесь перехода трансфера в статус Реплицируется.
- Переведите кластер-источник в режим
только чтение
и переключите нагрузку на кластер-приемник. - На странице мониторинга трансфера дождитесь снижения до нуля характеристики Maximum data transfer delay. Это значит, что на кластер-приемник перенесены все изменения, произошедшие в кластере-источнике после завершения копирования данных.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Деактивируйте трансфер и дождитесь его перехода в статус Остановлен.
Подробнее о статусах трансфера см. в разделе Жизненный цикл трансфера.
-
Удалите эндпоинты для источника и приемника.
Миграция при помощи дампа базы
Чтобы перенести данные при помощи дампа базы:
- Создайте кластер-приемник.
- Создайте дамп мигрируемой базы с помощью утилиты
mongodump. - При необходимости создайте виртуальную машину в Compute Cloud, чтобы восстанавливать базу из дампа в инфраструктуре Yandex Cloud.
- Восстановите данные из дампа в кластере с помощью утилиты
mongorestore.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Кластер Yandex StoreDoc: использование выделенных хостам вычислительных ресурсов, объем хранилища и резервных копий (см. тарифы Yandex StoreDoc).
- Публичные IP-адреса, если для хостов кластера включен публичный доступ (см. тарифы Virtual Private Cloud).
- Виртуальная машина: использование вычислительных ресурсов, хранилища, публичного IP-адреса и операционной системы (см. тарифы Compute Cloud).
Создайте кластер-приемник
Создайте кластер-приемник Yandex StoreDoc, вычислительная мощность и размер хранилища которого соответствуют среде, в которой развернута мигрируемая база данных.
Имя базы в кластере-приемнике должно совпадать с именем базы-источника.
Создайте дамп
Создать дамп базы данных следует с помощью утилиты mongodump.
-
Установите
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 -
Перед созданием дампа рекомендуется переключить СУБД в режим «только чтение», чтобы не потерять данные, которые могут появиться за время создания дампа.
-
Создайте дамп базы данных:
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 понадобится, если:
- К вашему кластеру Yandex StoreDoc нет доступа из интернета.
- Ваше оборудование или соединение с кластером в Yandex Cloud недостаточно надежны.
Чтобы подготовить виртуальную машину для восстановления дампа:
-
В консоли управления создайте новую виртуальную машину из образа Ubuntu 20.04 LTS. Нужное количество оперативной памяти и ядер процессора зависит от объема переносимых данных и требуемой скорости переноса.
Минимальной конфигурации (1 ядро, 2 ГБ RAM, 10 ГБ дискового пространства) должно хватить для переноса базы до 1 ГБ. Чем больше переносимая база, тем больше должно быть дискового пространства (как минимум в два раза больше, чем размер базы) и оперативной памяти.
Виртуальная машина должна находиться в той же сети и зоне доступности, что хост-мастер кластера Yandex StoreDoc. Кроме того, виртуальной машине должен быть присвоен внешний 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
В результате вы получите виртуальную машину с дампом базы данных, который готов к восстановлению на кластер Yandex StoreDoc.
Восстановите данные
Восстанавливать базу данных из дампа следует с помощью утилиты 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с указанием на пространства имен, которые нужно или не нужно включать для восстанавливаемого набора коллекций.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
- Удалите кластер Yandex StoreDoc.
- Если вы создали виртуальную машину для загрузки дампа, удалите ее.
- Если вы зарезервировали публичный статический IP-адрес, освободите и удалите его.