Перенести группу виртуальных машин с сетевым балансировщиком нагрузки в другую зону доступности
Примечание
Зона доступности ru-central1-c
поэтапно выводится из эксплуатации. Подробнее о планах по развитию зон доступности и возможностях миграции см. пост в блоге Yandex Cloud.
Чтобы перенести группу ВМ c сетевым балансировщиком нагрузки Yandex Network Load Balancer:
-
Создайте подсеть в зоне доступности, в которую вы хотите перенести группу ВМ.
-
Добавьте ВМ группы в новую зону доступности:
Консоль управленияCLITerraformAPI-
В консоли управления
откройте каталог, в котором находится нужная группа виртуальных машин. -
Выберите сервис Compute Cloud.
-
На панели слева выберите
Группы виртуальных машин. -
Выберите группу ВМ, которую хотите изменить.
-
В правом верхнем углу нажмите
Редактировать. -
В блоке Распределение добавьте зону доступности, в которую вы хотите перенести группу ВМ.
-
Если у вас группа ВМ с ручным масштабированием, в блоке Масштабирование укажите размер группы, достаточный для размещения во всех выбранных зонах доступности.
Вернуть изначальное количество ВМ можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
-
Если у вас автоматически масштабируемая группа ВМ с ручной (
OPPORTUNISTIC
) стратегией остановки, в поле Останавливать машины по стратегии измените стратегию на автоматическую (PROACTIVE
).Вернуть ручную стратегию остановки можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
-
Нажмите Сохранить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра
--folder-name
или--folder-id
.-
Откройте файл со спецификацией группы виртуальных машин и измените шаблон ВМ:
-
В секции
allocation_policy
добавьте новую зону доступности. -
В секции
network_interface_specs
добавьте идентификатор подсети, созданной ранее. -
Если у вас группа ВМ с ручным масштабированием, в секции
scale_policy
укажите размер группы, достаточный для размещения во всех выбранных зонах доступности.Вернуть изначальное количество ВМ можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
-
Если у вас автоматически масштабируемая группа ВМ с ручной (
OPPORTUNISTIC
) стратегией остановки, в секцииdeploy_policy
измените стратегию на автоматическую (PROACTIVE
).Вернуть ручную стратегию остановки можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
-
-
Посмотрите описание команды CLI для изменения группы ВМ:
yc compute instance-group update --help
-
Получите список всех групп ВМ в каталоге по умолчанию:
yc compute instance-group list
Результат:
+----------------------+---------------------------------+--------+--------+ | ID | NAME | STATUS | SIZE | +----------------------+---------------------------------+--------+--------+ | cl15sjqilrei******** | first-fixed-group-with-balancer | ACTIVE | 3 | | cl19s7dmihgm******** | test-group | ACTIVE | 2 | +----------------------+---------------------------------+--------+--------+
-
Измените группу ВМ:
yc compute instance-group update \ --id <идентификатор_группы_ВМ> \ --file <файл_со_спецификацией_ВМ>
Где:
--id
— идентификатор группы ВМ.--file
— путь к файлу со спецификацией группы ВМ.
Результат:
id: cl15sjqilrei******** ... allocation_policy: zones: - zone_id: <старая_зона_доступности> - zone_id: <новая_зона_доступности> ...
Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.
-
Откройте файл конфигурации Terraform для группы виртуальных машин и добавьте в блоке
allocation_policy
новую зону доступности, а в блокеnetwork_interface
идентификатор подсети, созданной ранее.... network_interface { subnet_ids = [ "<идентификатор_подсети_в_старой_зоне_доступности>", "<идентификатор_подсети_в_новой_зоне_доступности>" ] } ... allocation_policy { zones = [ "<старая_зона_доступности>", "<новая_зона_доступности>" ] } ...
Где:
zones
— зоны доступности, в которых будет размещена группа ВМ — новая и старая.subnet_ids
— идентификаторы подсетей в зонах доступности, в которых будет размещена группа ВМ.
Если у вас группа ВМ с ручным масштабированием, в секции
scale_policy
укажите размер группы, достаточный для размещения во всех выбранных зонах доступности.... scale_policy { fixed_scale { size = <количество_ВМ_в_группе> } } ...
Вернуть изначальное количество ВМ можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
Если у вас автоматически масштабируемая группа ВМ с ручной (
OPPORTUNISTIC
) стратегией остановки, измените стратегию на автоматическую (PROACTIVE
):... deploy_policy { strategy = "proactive" } ...
Вернуть ручную стратегию остановки можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Добавится новая зона доступности для группы ВМ. Проверить изменения можно в консоли управления
или с помощью команды CLI:yc compute instance-group get <имя_группы_ВМ>
-
Воспользуйтесь методом REST API update для ресурса InstanceGroup или вызовом gRPC API InstanceGroupService/Update.
Если у вас группа ВМ с ручным масштабированием, задайте размер группы, достаточный для размещения ВМ во всех выбранных зонах доступности. Вернуть изначальное количество ВМ можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.
Если у вас автоматически масштабируемая группа ВМ с ручной (
OPPORTUNISTIC
) стратегией остановки, измените стратегию на автоматическую (PROACTIVE
). Вернуть ручную стратегию остановки можно будет после воссоздания всех ВМ группы в новой зоне доступности и удаления всех ВМ в старой.Дождитесь пока ВМ создадутся в новой зоне доступности и перейдут в статус
Running Actual
. -
-
В зависимости от типа балансировщика, выполните следующие действия:
-
Внешний балансировщик (
EXTERNAL
):-
Дождитесь пока ресурсы целевой группы в новой зоне доступности пройдут проверку состояния и перейдут в статус
HEALTHY
. См. Проверить состояние целевых ресурсов.После этого новая зона доступности будет включена в маршрутизацию трафика через балансировщик. Этот процесс может занимать до 2 минут. См. Сходимость маршрутизации в зоне доступности.
-
Удалите ВМ группы из старой зоны доступности:
Консоль управленияCLITerraformAPI- В консоли управления
откройте каталог, в котором находится нужная группа виртуальных машин. - Выберите сервис Compute Cloud.
- На панели слева выберите
Группы виртуальных машин. - Выберите группу ВМ, которую хотите изменить.
- В правом верхнем углу нажмите
Редактировать. - В блоке Распределение отключите старую зону доступности.
- Нажмите Сохранить.
-
Откройте файл со спецификацией группы виртуальных машин и измените шаблон ВМ:
- В секции
allocation_policy
удалите старую зону доступности. - В секции
network_interface_specs
удалите идентификатор подсети в старой зоне доступности.
- В секции
-
Измените группу ВМ:
yc compute instance-group update \ --id <идентификатор_группы_ВМ> \ --file <файл_со_спецификацией_ВМ>
Где:
--id
— идентификатор группы ВМ.--file
— путь к файлу со спецификацией группы ВМ.
Результат:
id: cl15sjqilrei******** ... allocation_policy: zones: - zone_id: <новая_зона_доступности> ...
-
Откройте файл конфигурации Terraform для группы виртуальных машин и удалите в блоке
allocation_policy
старую зону доступности, а в блокеnetwork_interface
идентификатор подсети в старой зоне:... network_interface { subnet_ids = ["<идентификатор_подсети_в_новой_зоне_доступности>"] } ... allocation_policy { zones = ["<новая_зона_доступности>"] } ...
Где:
zones
— зона доступности, в которую вы хотите переместить группу ВМ. Можно указать несколько зон.subnet_ids
— идентификатор подсети в той зоне доступности, в которую вы хотите перенести группу ВМ.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
ВМ группы будут удалены в старой зоне доступности. Проверить изменения можно в консоли управления
или с помощью команды CLI:yc compute instance-group get <имя_группы_ВМ>
-
Воспользуйтесь методом REST API update для ресурса InstanceGroup или вызовом gRPC API InstanceGroupService/Update.
- В консоли управления
-
-
Внутренний балансировщик (
INTERNAL
):-
Перенесите ресурсы, которым нужен доступ к внутреннему балансировщику, в подсеть, созданную ранее.
-
Измените обработчик балансировщика:
Консоль управленияCLITerraformAPI-
В консоли управления
выберите каталог, в котором находится балансировщик. -
В списке сервисов выберите Network Load Balancer.
-
Нажмите на имя нужного балансировщика.
-
В блоке Обработчики нажмите
и выберите Удалить обработчик. -
Справа сверху нажмите
Добавить обработчик и создайте новый обработчик.При создании нового обработчика укажите подсеть в той зоне доступности, в которую вы хотите перенести балансировщик.
-
Нажмите кнопку Добавить.
-
Посмотрите описание команды CLI для удаления обработчика:
yc load-balancer network-load-balancer remove-listener --help
-
Получите список всех сетевых балансировщиков в каталоге по умолчанию:
yc load-balancer network-load-balancer list
Результат:
+----------------------+---------------+-----------------+----------+----------------+------------------------+----------+ | ID | NAME | REGION ID | TYPE | LISTENER COUNT | ATTACHED TARGET GROUPS | STATUS | +----------------------+---------------+-----------------+----------+----------------+------------------------+----------+ | enp2btm6uvdr******** | nlb-34aa5-db1 | ru-central1 | INTERNAL | 0 | | ACTIVE | | enpvg9o73hqh******** | test-balancer | ru-central1 | EXTERNAL | 0 | | ACTIVE | +----------------------+---------------+-----------------+----------+----------------+------------------------+----------+
-
Получите имя обработчика:
yc load-balancer network-load-balancer get <имя_балансировщика>
Результат:
id: enp2btm6uvdr******** folder_id: b1gmit33ngp3******** ... listeners: - name: listener-980ee-af3 address: 172.17.0.36
-
Удалите обработчик:
yc load-balancer network-load-balancer remove-listener <имя_балансировщика> \ --listener-name <имя_обработчика>
Где
--listener-name
— имя обработчика, который нужно удалить.Результат:
done (1s) id: enpvg9o73hqh******** folder_id: b1gmit33ngp3******** created_at: "2023-08-09T13:44:57Z" name: nlb-34aa5-db1 region_id: ru-central1 status: INACTIVE type: INTERNAL
-
Посмотрите описание команды CLI для добавления обработчика:
yc load-balancer network-load-balancer add-listener --help
-
Добавьте обработчик:
yc load-balancer network-load-balancer add-listener <имя_балансировщика> \ --listener name=<имя_обработчика>,` `port=<порт>,` `target-port=<целевой_порт>,` `internal-subnet-id=<идентификатор_подсети>
Где:
name
— имя обработчика.port
— порт, на котором сетевой балансировщик будет принимать входящий трафик.target-port
— целевой порт, на который балансировщик будет направлять трафик.internal-subnet-id
— идентификатор подсети в той зоне доступности, в которую вы хотите перенести балансировщик.
Результат:
done (1s) id: enp2btm6uvdr******** folder_id: b1gmit33ngp3******** created_at: "2023-08-09T08:37:03Z" name: nlb-34aa5-db1 region_id: ru-central1 status: ACTIVE type: INTERNAL listeners: - name: new-listener address: 10.0.0.16 port: "22" protocol: TCP target_port: "22" subnet_id: e2lgp8o00g06******** ip_version: IPV4
-
Откройте файл Terraform с конфигурацией балансировщика и в блоке
listener
замените значения полейname
иsubnet_id
:listener { name = "<новое_имя_обработчика>" port = 80 target_port = 81 protocol = "tcp" internal_address_spec { subnet_id = "<идентификатор_подсети_в_целевой_зоне_доступности>" ip_version = "ipv4" } }
Где:
name
— имя обработчика.port
— порт, на котором сетевой балансировщик будет принимать входящий трафик.target_port
— целевой порт, на который балансировщик будет направлять трафик.subnet_id
— идентификатор подсети в той зоне доступности, в которую вы хотите перенести группу ВМ.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
Будет добавлен новый обработчик балансировщика в новой зоне доступности. Проверить создание нового обработчика можно в консоли управления
. -
-
Чтобы удалить обработчик сетевого балансировщика, воспользуйтесь методом REST API removeListener для ресурса NetworkLoadBalancer или вызовом gRPC API NetworkLoadBalancerService/RemoveListener и передайте в запросе:
- Идентификатор балансировщика в параметре
networkLoadBalancerId
. - Имя обработчика в параметре
listenerName
.
Идентификатор балансировщика можно получить со списком сетевых балансировщиков в каталоге, имя обработчика — с детальной информацией о сетевом балансировщике.
- Идентификатор балансировщика в параметре
-
Чтобы добавить обработчик сетевого балансировщика, воспользуйтесь методом API addListener для ресурса NetworkLoadBalancer или вызовом gRPC API NetworkLoadBalancerService/AddListener и передайте в запросе:
{ "listenerSpec": { "name": "<имя_обработчика>", "port": "<входящий_порт>", "targetPort": "<целевой_порт>", "internalAddressSpec": { "subnetId": "<идентификатор_подсети>" } } }
Где:
name
— имя обработчика.port
— порт, на котором сетевой балансировщик будет принимать входящий трафик.targetPort
— целевой порт, на который балансировщик будет направлять трафик.subnetId
— идентификатор подсети в той зоне доступности, в которую вы хотите перенести балансировщик.
Важно
IP-адрес обработчика изменится. Укажите новый IP-адрес обработчика в настройках ресурсов, трафик с которых принимается балансировщиком.
-
-
Удалите ВМ группы из старой зоны доступности:
Консоль управленияCLITerraformAPI- В консоли управления
откройте каталог, в котором находится нужная группа виртуальных машин. - Выберите сервис Compute Cloud.
- На панели слева выберите
Группы виртуальных машин. - Выберите группу ВМ, которую хотите изменить.
- В правом верхнем углу нажмите
Редактировать. - В блоке Распределение отключите старую зону доступности.
- Нажмите Сохранить.
-
Откройте файл со спецификацией группы виртуальных машин и измените шаблон ВМ:
- В секции
allocation_policy
удалите старую зону доступности. - В секции
network_interface_specs
удалите идентификатор подсети в старой зоне доступности.
- В секции
-
Измените группу ВМ:
yc compute instance-group update \ --id <идентификатор_группы_ВМ> \ --file <файл_со_спецификацией_ВМ>
Где:
--id
— идентификатор группы ВМ.--file
— путь к файлу со спецификацией группы ВМ.
Результат:
id: cl15sjqilrei******** ... allocation_policy: zones: - zone_id: <новая_зона_доступности> ...
-
Откройте файл конфигурации Terraform для группы виртуальных машин и удалите в блоке
allocation_policy
старую зону доступности, а в блокеnetwork_interface
идентификатор подсети в старой зоне:... network_interface { subnet_ids = ["<идентификатор_подсети_в_новой_зоне_доступности>"] } ... allocation_policy { zones = ["<новая_зона_доступности>"] } ...
Где:
zones
— зона доступности, в которую вы хотите переместить группу ВМ. Можно указать несколько зон.subnet_ids
— идентификатор подсети в той зоне доступности, в которую вы хотите перенести группу ВМ.
Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Примените изменения:
-
В терминале перейдите в папку, где вы отредактировали конфигурационный файл.
-
Проверьте корректность конфигурационного файла с помощью команды:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминале слово
yes
и нажмите Enter.
ВМ группы будут удалены в старой зоне доступности. Проверить изменения можно в консоли управления
или с помощью команды CLI:yc compute instance-group get <имя_группы_ВМ>
-
Воспользуйтесь методом REST API update для ресурса InstanceGroup или вызовом gRPC API InstanceGroupService/Update.
- В консоли управления
-
Убедитесь, что в подсети в старой зоне доступности не осталось ресурсов.
-
Удалите подсеть в старой зоне доступности.
-
-