通用方案:专有云V3环境临时迁移ECS实例的方法

通用方案:专有云V3环境临时迁移ECS实例的方法

更新时间:2020-06-29 13:58:28

1. 概述

本文主要介绍在专有云V3环境中,临时迁移ECS实例的方法。

方案总览

类别 内容
风险等级(方案执行的影响)
操作方式 黑屏
操作复杂度
预估执行时长 单台ECS实例迁移预计10分钟,具体时间根据迁移实例数量而定
客户业务的影响
可监控性 不支持
有效性(重启、重拉、补丁、升级、扩容等配置是否丢失) 固化
数据修订(变更是否涉及增删改操作)
执行灰度策略 一个实例成功迁移至目标物理机,并且状态为running后,再进行下一个实例的迁移
首次发布时间 N/A
预计完成时间 N/A

1.1. 适用范围

  • 专有云V3,ECS
    说明
    • 实例冷迁移适用于专有云V3.0~V3.11环境,包含V3.0和V3.11环境。
    • 实例热迁移适用于专有云V3.3~V3.11环境,包含V3.3和V3.11环境。

1.2. 风险说明

当ECS物理机异常时,可能存在热迁移失败的情况,如热迁移失败,需要使用冷迁移,冷迁移需要停止ECS实例,然后进行迁移。

2. 问题描述

ECS实例所在的宿主机宕机或异常,导致ECS实例长时间未主动迁移。

3. 解决方案

3.1. 环境检查

登录ECS实例所在的集群AG,查看该实例信息。

  1. 登录ECSAG服务器,关于如何登录ECSAG服务器请参见专有云如何登录ECSAG服务器
  2. 执行以下命令,查看实例的相关信息。
    go2which [$Instance_ID]
    说明:[$Instance_ID]为待迁移的实例ID。
    系统返回类似如下,获得地区、nc_id等信息。

3.2. 实施步骤

查询当前环境资源空闲的物理机

  1. 登录ECSAG服务器,执行以下命令,查询当期环境资源空闲的物理机。
    go2cluster_resource
    系统返回类似如下,根据实际情况选择目标物理机的ID。
  2. 执行以下命令,查看物理机相关信息。
    go2ncinfo [$NC_IP]
    说明:[$NC_IP]为物理机的IP地址。
  3. 执行以下命令,查看异常物理机上的实例数量与实例状态是否为running。如异常物理机上ECS实例的状态为running,请先尝试热迁移。如果热迁移不成功,则尝试冷迁移。
    go2vmlist [$NC_IP]

实例热迁移

热迁移的限制条件

在进行热迁移之前,您需要了解以下相关限制条件,对于专有云的热迁移功能,主要有以下限制: 

  • 目前只支持在KVM虚拟化环境下通过go2hyapi命令进行热迁移,嫦娥上的热迁移入口暂时不可用。
  • 只支持ECS标准镜像的热迁移,ECS提供可迁移的镜像列表。若对不在可迁移镜像列表中的VM进行迁移,将不承担故障定位服务。
  • 作为RS提供SLB服务,或者作为Client访问SLB的VM,在热迁移后会出现旧链接Session不通的情况,迁移后新建链接不受影响。
  • 只支持在同类型物理主机间进行迁移,且2台机器的软件版本必须完全一致。
  • DPDK AVS场景目前不支持热迁移能力。
  • 对于使用了本地存储方案的VM,不支持热迁移。因为迁移到其它物理机后,无法再访问该存储。
  • 使用了GPU、FPGA或者其他(直通、SRIOV)设备的VM,将不支持热迁移。
    说明:专有云V3.3版本之前创建的VM不具备热迁移能力,需要重启后生效。
热迁移的操作步骤

注意:在执行热迁移前,请参见补充说明,了解热迁移命令的参数介绍。

  1. 登录ECSAG服务器,执行以下命令,确认实例状态为running。
    go2which [$Instance_ID]
  2. 执行以下命令,查看实例ID。
    sudo virsh list |grep [$Instance_ID]
    系统显示类似如下。
  3. 不指定目标物理机,由控制系统自己选择合适的目的物理机热迁移,请参考如下命令。
    go2hyapi live_migrate_vm vm_name=[$Instance_ID] no_check_load=true no_check_image=true no_check_package=true virt_pre_check=false no_check_slb=true no_check_mig_enable=true rate=100
    注意:指定目标物理机进行热迁移时,如果目标物理机不满足热迁移条件,则可能会失败,迁移失败的实例会在原来的物理机上运行。命令行中vm_name=[$Instance_ID]之后的即为可选参数,需要关注影响和作用 。
    系统显示类似如下。
  4. 如实例一直处于migrating(迁移中)状态,无法迁移成功,需要在VM的源物理机上,执行以下命令,确认当前VM是否正在迁移。
    sudo virsh query-migrate [$Dom_ID]
    说明:[$Dom_ID]为本小节步骤2中获取的实例ID。
    系统显示类似如下,如果正在迁移,会返回一段JSON信息。
  5. 执行以下命令,修改热迁移状态。

    go2hyapi manually_change_migration_status vm_name=[$Instance_ID] where=[$VM_NC_ID] region_id=[$Region_ID]
    说明
    • [$VM_NC_ID]为VM所属的nc_id。
    • [$Region_ID]为区域ID,可参见本小节步骤1中的返回结果。
    系统显示类似如下。

实例冷迁移

  1. 登录ECSAG服务器,执行以下命令,确认实例状态为running。
    go2which [$Instance_ID]
  2. 执行以下命令,确定实例为stopped状态。如为running状态,则需要先停止实例。
    go2hyapi stop_vm vm_name=[$Instance_ID]
  3. 冷迁移实例至其它物理机的方法有以下两种,请根据现场实际情况进行操作。
    • 不指定目标物理机,由控制系统自己选择合适的目的物理机,冷迁移命令如下。
      go2hyapi recover_vm vm_name=[$Instance_ID] region_id=[$Region_ID]
    • 指定目标物理机进行热迁移的命令如下。
      说明:指定目标物理机进行冷迁移时,如果目标物理机不满足冷迁移条件,则可能会失败。
      go2hyapi recover_vm vm_name=[$Instance_ID] region_id=[$Region_ID] dst_nc_id=[$DST_NC_ID]
      说明:[$DST_NC_ID]为需要迁移的目标nc_id。

3.3. 结果验证

  1. 登录ECSAG服务器,执行以下命令,确认实例信息与预期相符,可通过nc_id参数值判断实例已迁移。
    go2which [$Instance_ID]
  2. 执行以下命令,确认异常物理机上的实例均已迁移。
    go2ncinfo [$NC_IP]
  3. 登录houyiregiondb数据库,关于如何登录数据库,请参见专有云如何查找ecsdriver和houyiregiondb数据库
  4. 检查该实例的信息,确认实例迁移后的运行状态、所在物理机等信息正确。

4. 回滚方案

无需回滚,操作前的情况已非正常状态,如需回滚,请参见实施步骤执行以下回滚操作:

  • 冷迁移回滚命令如下。
    go2hyapi recover_vm vm_name=[$Instance_ID] region_id=[$Region_ID] dst_nc_id=[$DST_NC_ID]
  • 热迁移回滚命令如下。
    go2hyapi live_migrate_vm vm_name=[$Instance_ID] nc_id=[$NC_ID]

说明:dst_nc_id与nc_id为源nc_id。

5. 补充说明

热迁移的参考命令如下:

go2hyapi live_migrate_vm vm_name=[$Instance_ID] no_check_load=true no_check_image=true no_check_package=true virt_pre_check=false no_check_slb=true no_check_mig_enable=true rate=100

说明:命令行中vm_name=[$Instance_ID]之后的即为可选参数,需要关注影响和作用 。

命令中的可选参数说明如下:

参数名称

作用

影响

取值

nc_id

指定迁移到某个目标NC

可能会出现NC不支持,VM规格导致迁移失败的情况

目标NC的id

no_check_image

对不在支持列表的镜像也强制迁移

迁移不保证SLA

默认为flase

no_check_load

不满足负载阈值的情况下强制迁移

业务中断时间不可控

默认为false

no_check_package

不检查虚拟化包

迁移不保证SLA

默认为false

virt_pre_check

检查QEMU Kmod版本

迁移不保证SLA

默认为true

no_check_slb

不检查SLB

迁移不保证SLA

默认为false

no_check_mig_enable

不检查热迁移环境是否可用

迁移不保证SLA

默认为false

no_check_cpu

不检查CPU Model

迁移不保证SLA

默认为false

rate

迁移使用带宽

占用物理机带宽资源

  • 万兆网络80MB
  • 千兆网络40MB