Миграция хостов кластера 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 в другую зону доступности.