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 调度节点
- 选择目标节点:
- 如果用户未指定目标节点,Nova-Scheduler 会根据调度策略(如资源利用率、可用性区域等)选择一个合适的计算节点。
- 检查目标节点是否有足够的资源(CPU、内存、存储等)。
- 将目标节点信息传递给 Nova-Compute。
4. 源计算节点的处理
- 虚拟机关机:
- Nova-Compute 调用 hypervisor(如 libvirt)的 API 将虚拟机关闭。
- 虚拟机的状态更新为 “SHUTOFF”。
- 打包迁移数据:
- 将虚拟机的实例配置文件和元数据打包。
- 如果使用本地存储,将虚拟机的磁盘文件打包准备迁移。
5. 存储迁移
- 本地存储(shared-nothing storage):
- Nova-Compute 将虚拟机的磁盘文件通过 scp、rsync 或其他方式传输到目标节点。
- 共享存储(如 Ceph):
- 如果两节点共享存储(如使用 Ceph 或 NFS),则无需传输磁盘文件。
6. 目标计算节点的处理
- 准备虚拟机环境:
- Nova-Compute 在目标节点上解析迁移的元数据文件,恢复虚拟机配置。
- 在目标节点创建虚拟机实例目录。
- 存储挂载:
- 如果使用块存储(Cinder),重新挂载块存储卷到目标节点。
- 网络配置:
- Neutron 在目标节点配置虚拟网络,包括分配 IP、设置安全组规则、创建虚拟交换机接口等。
7. 启动虚拟机
- Nova-Compute 调用 hypervisor 的 API,在目标节点上启动虚拟机。
- 虚拟机的状态更新为 “ACTIVE”。
8. 清理源节点
- Nova-Compute 在源节点上清理迁移数据,包括删除本地磁盘文件和虚拟机实例目录。
- 释放源节点的资源。
9. 状态更新
- Nova 将迁移结果更新到数据库。
- Nova-API 从数据库获取结果并通知用户迁移完成。
流程图示意
用户请求冷迁移 ↓Nova-API → 消息队列 → Nova-Scheduler(选择目标节点) ↓ ↘ 通知目标节点源计算节点(关机虚拟机,迁移数据) → 目标计算节点(重建环境,启动虚拟机) ↓清理源节点数据 ↓状态更新为 "ACTIVE"主要涉及的组件
- Nova:
- Nova-API:接收迁移请求。
- Nova-Scheduler:调度目标节点。
- Nova-Compute:执行虚拟机迁移、重建和启动。
- Neutron:
- 配置虚拟机的网络环境。
- Cinder(如果使用块存储):
- 卷的分离与挂载。
- Glance(如果镜像需要重新下载):
- 提供虚拟机的镜像。
冷迁移的注意事项
- 停机时间:
冷迁移需要关闭虚拟机,因此会有停机时间。对于高可用性要求高的业务,需要提前规划迁移时间。 - 共享存储的优化:
如果源和目标节点共享存储,迁移会更快,因为无需传输磁盘文件。 - 资源检查:
确保目标节点有足够的资源容纳迁移的虚拟机。 - 网络连通性:
源节点与目标节点之间需要网络互通,以便传输迁移数据。