945 字
5 分钟
虚拟机冷迁移流程

在 OpenStack 中,虚拟机的冷迁移(Cold Migration)是将虚拟机从一个计算节点迁移到另一个计算节点。冷迁移需要关闭虚拟机,然后将其配置、存储和网络资源转移到目标节点,再重新启动虚拟机。以下是冷迁移的详细流程:

详细流程#

1. 用户请求迁移#

  • 用户通过 OpenStack Dashboard(Horizon)或 CLI 发起冷迁移请求:

    Terminal window
    openstack server migrate <server_id>
  • 请求参数可以包括目标计算节点(如果不指定,Nova 调度器会自动选择)。

2. Nova-API 接收请求#

  • Nova-API 接收到冷迁移请求后,将请求记录到数据库,并将任务放入消息队列。
  • 虚拟机的状态更新为 “MIGRATING”

3. Nova-Scheduler 调度节点#

  1. 选择目标节点
    • 如果用户未指定目标节点,Nova-Scheduler 会根据调度策略(如资源利用率、可用性区域等)选择一个合适的计算节点。
    • 检查目标节点是否有足够的资源(CPU、内存、存储等)。
  2. 将目标节点信息传递给 Nova-Compute

4. 源计算节点的处理#

  1. 虚拟机关机
    • Nova-Compute 调用 hypervisor(如 libvirt)的 API 将虚拟机关闭。
    • 虚拟机的状态更新为 “SHUTOFF”
  2. 打包迁移数据
    • 将虚拟机的实例配置文件和元数据打包。
    • 如果使用本地存储,将虚拟机的磁盘文件打包准备迁移。

5. 存储迁移#

  • 本地存储(shared-nothing storage):
    • Nova-Compute 将虚拟机的磁盘文件通过 scp、rsync 或其他方式传输到目标节点。
  • 共享存储(如 Ceph):
    • 如果两节点共享存储(如使用 Ceph 或 NFS),则无需传输磁盘文件。

6. 目标计算节点的处理#

  1. 准备虚拟机环境
    • Nova-Compute 在目标节点上解析迁移的元数据文件,恢复虚拟机配置。
    • 在目标节点创建虚拟机实例目录。
  2. 存储挂载
    • 如果使用块存储(Cinder),重新挂载块存储卷到目标节点。
  3. 网络配置
    • Neutron 在目标节点配置虚拟网络,包括分配 IP、设置安全组规则、创建虚拟交换机接口等。

7. 启动虚拟机#

  • Nova-Compute 调用 hypervisor 的 API,在目标节点上启动虚拟机。
  • 虚拟机的状态更新为 “ACTIVE”

8. 清理源节点#

  • Nova-Compute 在源节点上清理迁移数据,包括删除本地磁盘文件和虚拟机实例目录。
  • 释放源节点的资源。

9. 状态更新#

  • Nova 将迁移结果更新到数据库。
  • Nova-API 从数据库获取结果并通知用户迁移完成。

流程图示意#

用户请求冷迁移
Nova-API → 消息队列 → Nova-Scheduler(选择目标节点)
↓ ↘ 通知目标节点
源计算节点(关机虚拟机,迁移数据) → 目标计算节点(重建环境,启动虚拟机)
清理源节点数据
状态更新为 "ACTIVE"

主要涉及的组件#

  1. Nova
    • Nova-API:接收迁移请求。
    • Nova-Scheduler:调度目标节点。
    • Nova-Compute:执行虚拟机迁移、重建和启动。
  2. Neutron
    • 配置虚拟机的网络环境。
  3. Cinder(如果使用块存储):
    • 卷的分离与挂载。
  4. Glance(如果镜像需要重新下载):
    • 提供虚拟机的镜像。

冷迁移的注意事项#

  1. 停机时间
    冷迁移需要关闭虚拟机,因此会有停机时间。对于高可用性要求高的业务,需要提前规划迁移时间。
  2. 共享存储的优化
    如果源和目标节点共享存储,迁移会更快,因为无需传输磁盘文件。
  3. 资源检查
    确保目标节点有足够的资源容纳迁移的虚拟机。
  4. 网络连通性
    源节点与目标节点之间需要网络互通,以便传输迁移数据。