Миграция хостов кластера Valkey™ в другую зону доступности
Примечание
В регионе Казахстан доступна только зона доступности kz1-a.
Хосты кластера Yandex Managed Service for Valkey™ располагаются в зонах доступности Yandex Cloud. Чтобы перенести хосты из одной зоны в другую, добавьте в кластер хосты, расположенные в целевой зоне доступности, и удалите хосты в первоначальной зоне доступности:
-
Создайте подсеть в зоне доступности, в которую вы переносите хосты.
-
Если в кластере используется класс хостов b2.medium или b3-c1-m4, измените его на другой класс. Иначе вы не сможете добавить хост в кластер и выполнить миграцию.
Кластер недоступен около пяти — семи минут после изменения класса хостов.
Прежний класс можно будет вернуть после миграции.
-
Добавьте хост в кластер:
Консоль управленияCLITerraformREST APIgRPC API-
Перейдите в сервис Yandex Managed Service for Valkey™.
-
Нажмите на имя нужного кластера и перейдите на вкладку Хосты.
-
Нажмите кнопку
Создать хост. -
Укажите параметры хоста:
- Зону доступности, куда переносятся хосты.
- Новую подсеть.
- Выберите опцию Публичный доступ, если хост должен быть доступен извне Yandex Cloud.
-
Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.
По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду
yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров--folder-nameили--folder-id.Выполните команду:
yc managed-redis host add \ --cluster-name <имя_кластера> \ --host zone-id=<зона_доступности>,` `subnet-id=<ID_новой_подсети>,` `assign-public-ip=<разрешить_публичный_доступ_к_хосту>Имя кластера можно получить со списком кластеров в каталоге.
В параметре
zone-idукажите зону, куда вы переносите хосты.-
В конфигурационный файл Terraform с планом инфраструктуры добавьте манифест хоста:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" { ... host { zone = "<зона_доступности>" subnet_id = "<идентификатор_новой_подсети>" assign_public_ip = <разрешить_публичный_доступ_к_хосту> } }В параметре
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.yandexcloud.kz/managed-redis/v1/clusters/<идентификатор_кластера>/hosts:batchCreate' \ --data '{ "hostSpecs": [ { "zoneId": "<зона_доступности>", "subnetId": "<идентификатор_подсети>", "shardName": "<имя_шарда>", "replicaPriority": "<приоритет_хоста>", "assignPublicIp": <разрешить_публичный_доступ_к_хосту> } ] }'Где
hostSpecs— параметры хоста:zoneId— зона доступности.subnetId— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shardName— имя шарда для хоста. Этот параметр используется, только если включено шардирование кластера.replicaPriority— приоритет назначения хоста мастером при выходе из строя основного мастера.assignPublicIp— доступность хоста из интернета по публичному IP-адресу:trueилиfalse. Включить публичный доступ можно, только если в кластере включена поддержка TLS.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите 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/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "host_specs": [ { "zone_id": "<зона_доступности>", "subnet_id": "<идентификатор_подсети>", "shard_name": "<имя_шарда>", "replica_priority": "<приоритет_хоста>", "assign_public_ip": <разрешить_публичный_доступ_к_хосту> } ] }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.redis.v1.ClusterService.AddHostsГде
host_specs— параметры хоста:zone_id— зона доступности.subnet_id— идентификатор подсети. Необходимо указывать, если в выбранной зоне доступности создано две или больше подсетей.shard_name— имя шарда для хоста. Этот параметр используется, только если включено шардирование кластера.replica_priority— приоритет назначения хоста мастером при выходе из строя основного мастера.assign_public_ip— доступность хоста из интернета по публичному IP-адресу:trueилиfalse. Включить публичный доступ можно, только если в кластере включена поддержка TLS.
Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
-
Чтобы успешно выполнять подключение к базе данных после миграции, укажите FQDN нового хоста в вашем бэкенде или клиенте (например, в коде или графической IDE). Удалите FQDN прежнего хоста в первоначальной зоне.
Чтобы узнать FQDN, получите список хостов в кластере:
yc managed-redis host list --cluster-name <имя_кластера>FQDN указан в выводе команды, в столбце
NAME. -
Удалите хосты в первоначальной зоне доступности:
Консоль управленияCLITerraformREST APIgRPC API- Перейдите в сервис Yandex Managed Service for Valkey™.
- Нажмите на имя нужного кластера и выберите вкладку Хосты.
- Нажмите на значок
в строке нужного хоста, выберите пункт Удалить и подтвердите удаление.
Выполните команду для каждого хоста:
yc managed-redis 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.yandexcloud.kz/managed-redis/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/redis/v1/cluster_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "host_names": [ "<имя_хоста>" ] }' \ mdb.api.yandexcloud.kz:443 \ yandex.cloud.mdb.redis.v1.ClusterService.DeleteHostsГде
host_names— имя удаляемого хоста. Чтобы узнать имя, получите список хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Дождитесь, когда кластер перейдет в состояние Alive. В консоли управления перейдите на страницу каталога и выберите сервис Yandex Managed Service for Valkey™. Состояние кластера отображается в столбце Доступность.