Миграция хостов кластера Valkey™ в другую зону доступности
Примечание
Для кластеров, хосты которых располагаются в зоне доступности ru-central1-d
, недоступно:
- использование платформы Intel Broadwell;
- хранилище на локальных SSD-дисках при использовании платформы Intel Cascade Lake.
Хосты кластера 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. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.Выполните команду:
yc managed-redis host add \ --cluster-name <имя_кластера> \ --host zone-id=<зона_доступности>,` `subnet-id=<ID_новой_подсети>,` `assign-public-ip=<публичный_доступ_к_хосту:_true_или_false>
Имя кластера можно получить со списком кластеров в каталоге.
В параметре
zone-id
укажите зону, куда вы переносите хосты.-
В конфигурационный файл Terraform с планом инфраструктуры добавьте манифест хоста:
resource "yandex_mdb_redis_cluster" "<имя_кластера>" { ... host { zone = "<зона_доступности>" subnet_id = "<идентификатор_новой_подсети>" assign_public_ip = <публичный_доступ_к_хосту:_true_или_false> } }
В параметре
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-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.cloud.yandex.net: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.cloud.yandex.net/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.cloud.yandex.net:443 \ yandex.cloud.mdb.redis.v1.ClusterService.DeleteHosts
Где
host_names
— имя удаляемого хоста. Чтобы узнать имя, получите список хостов в кластере.Идентификатор кластера можно запросить со списком кластеров в каталоге.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
- Перейдите на страницу каталога
-
Дождитесь, когда кластер перейдет в состояние Alive. В консоли управления перейдите на страницу каталога и выберите сервис Yandex Managed Service for Valkey™. Состояние кластера отображается в столбце Доступность.