Миграция хостов кластера Yandex StoreDoc в другую зону доступности
Хосты кластера Yandex StoreDoc располагаются в зонах доступности Yandex Cloud. Чтобы перенести хосты из одной зоны в другую:
-
Создайте подсеть в зоне доступности, в которую вы переносите хосты.
-
Добавьте хост в кластер:
Консоль управленияCLITerraformREST APIgRPC API-
В консоли управления
выберите каталог. -
Перейдите
в сервис Yandex StoreDoc. -
Нажмите на имя нужного кластера Yandex StoreDoc и выберите вкладку Хосты.
-
Нажмите кнопку
Создать хост. -
Укажите параметры хоста:
- Зону доступности, куда переносятся хосты.
- Новую подсеть.
- Выберите опцию Публичный доступ, если хост должен быть доступен извне Yandex Cloud.
-
Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.
Выполните команду:
yc managed-mongodb host add \ --cluster-name <имя_кластера> \ --host type=<тип_хоста>,` `zone-id=<зона_доступности>,` `subnet-id=<ID_новой_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту>Особенности команды:
- Имя кластера можно получить со списком кластеров в каталоге.
- Возможные значения параметра
type:mongod,mongos,mongocfg,mongoinfra. Тип хоста зависит от типа шардирования. - В параметре
zone-idукажите зону, куда вы переносите хосты.
-
В конфигурационный файл Terraform с планом инфраструктуры добавьте манифест хоста:
resource "yandex_mdb_mongodb_cluster" "<имя_кластера>" { ... host { type = "<тип_хоста>" zone_id = "<зона_доступности>" subnet_id = "<идентификатор_новой_подсети>" assign_public_ip = <разрешить_публичный_доступ_к_хосту> ... } }Возможные значения параметра
type:MONGOD,MONGOINFRA,MONGOSилиMONGOCFG. Тип хоста зависит от типа шардирования.В параметре
zoneукажите зону, куда вы переносите хосты. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.AddHosts и выполните запрос, например, с помощью 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/<идентификатор_кластера>/hosts:batchCreate' \ --data '{ "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "assignPublicIp": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>", "shardName": "<имя_шарда>", "hidden": <скрыть_хост>, "secondaryDelaySecs": "<задержка_в_секундах>", "priority": "<приоритет_назначения_хоста_первичной_репликой>", "tags": "<метки_хоста>" } ] }'Где
hostSpecs— массив новых хостов. Один элемент массива содержит настройки для одного хоста:zoneId— зона доступности.subnetId— идентификатор подсети.assignPublicIp— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.type— тип хоста в шардированном кластере:MONGOD,MONGOINFRA,MONGOSилиMONGOCFG. Если кластер нешардированный, укажитеMONGOD.shardName— имя шарда в шардированном кластере.hidden— будет ли хост виден (false) или скрыт (true).secondaryDelaySecs— время отставания хоста от первичной реплики.priority— приоритет назначения хоста первичной репликой.tags— метки хоста.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.AddHosts и выполните запрос, например, с помощью 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 '{ "cluster_id": "<идентификатор_кластера>", "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "assign_public_ip": <разрешить_публичный_доступ_к_хосту>, "type": "<тип_хоста>", "shard_name": "<имя_шарда>", "hidden": <скрыть_хост>, "secondary_delay_secs": "<задержка_в_секундах>", "priority": "<приоритет_назначения_хоста_первичной_репликой>", "tags": "<метки_хоста>" } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.AddHostsГде
host_specs— массив новых хостов. Один элемент массива содержит настройки для одного хоста:zone_id— зона доступности.subnet_id— идентификатор подсети.assign_public_ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse.type— тип хоста в шардированном кластере:MONGOD,MONGOINFRA,MONGOSилиMONGOCFG. Если кластер нешардированный, укажитеMONGOD.shard_name— имя шарда в шардированном кластере.hidden— будет ли хост виден (false) или скрыт (true).secondary_delay_secs— время отставания хоста от первичной реплики.priority— приоритет назначения хоста первичной репликой.tags— метки хоста.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
-
Чтобы успешно выполнять подключение к базе данных после миграции, укажите FQDN нового хоста в вашем бэкенде или клиенте (например, в коде или графической IDE). Удалите FQDN прежнего хоста в первоначальной зоне.
Чтобы узнать FQDN, получите список хостов в кластере:
yc managed-mongodb host list --cluster-name <имя_кластера>FQDN указан в выводе команды, в столбце
NAME.Как получить FQDN хоста в Консоли управления
, описано в инструкции. -
Удалите хосты в первоначальной зоне доступности:
Консоль управленияCLITerraformREST APIgRPC API- В консоли управления
выберите каталог. - Перейдите
в сервис Yandex StoreDoc. - Нажмите на имя нужного кластера Yandex StoreDoc и выберите вкладку Хосты.
- Нажмите на значок
в строке нужного хоста, выберите пункт Удалить и подтвердите удаление.
Выполните команду для каждого хоста:
yc managed-mongodb host delete <FQDN_хоста> --cluster-name <имя_кластера>-
В конфигурационном файле Terraform с планом инфраструктуры удалите из описания кластера блоки
hostс первоначальной зоной доступности. -
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Введите слово
yesи нажмите Enter.-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Воспользуйтесь методом Cluster.DeleteHosts и выполните запрос, например, с помощью 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/<идентификатор_кластера>/hosts:batchDelete' \ --data '{ "hostNames": [ "<имя_хоста>" ] }'Где
hostNames— массив с именами удаляемых хостов. Чтобы узнать имя нужного хоста, получите список хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>" -
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapiДалее предполагается, что содержимое репозитория находится в директории
~/cloudapi/. -
Воспользуйтесь вызовом ClusterService.DeleteHosts и выполните запрос, например, с помощью 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 '{ "cluster_id": "<идентификатор_кластера>", "host_names": [ "<имя_хоста>" ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.mongodb.v1.ClusterService.DeleteHostsГде
host_names— массив с именами удаляемых хостов. Чтобы узнать имя нужного хоста, получите список хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
- В консоли управления
-
Дождитесь, когда кластер перейдет в состояние Alive. В консоли управления
выберите каталог, в котором расположен кластер. Перейдите в сервис Yandex StoreDoc. Состояние кластера отображается в столбце Доступность.
Примечание
Для кластеров, хосты которых располагаются в зоне доступности kz1-d, недоступно:
- использование платформы Intel Broadwell;
- хранилище на локальных SSD-дисках при использовании платформы Intel Cascade Lake.
Особенности миграции в сервисе Yandex Data Transfer
Если кластер выступает в роли эндпоинта при передаче данных с помощью сервиса Data Transfer и используется тип трансфера Репликация или Копирование и репликация, перезапустите трансфер после миграции кластера. Так трансфер получит сведения о новой топологии кластера.
Трансферы типа Копирование перезапускать не нужно, так как во время их активации информация о новой топологии передается автоматически.
Чтобы перезапустить трансфер, выберите один из двух способов:
- Деактивируйте трансфер и дождитесь его перехода в статус Остановлен. Затем активируйте трансфер и дождитесь его перехода в статус Реплицируется.
- Измените какую-либо настройку трансфера или эндпоинта.
Подробнее читайте в разделе Миграция эндпоинтов и трансфера Data Transfer в другую зону доступности.