一直忘记记录虚机迁移过程,时间长了就模糊了,这里记录一下虚机迁移的大体流程
前置条件
- 权限检查:执行迁移的用户是否有足够的权限执行动态迁移。
- 参数检查:传递给API的参数是否足够与正确
- 检查目标物理主机是否存在。
- 检查被迁移的云主机是否为up状态。
- 检查源和目的物理主机上的nova-compute service是否正常运行。
- 检查目的物理主机与源物理主机是否为同一台服务器。
- 检查目的物理主机是否有足够的内存。
- 检查目的主机的Hypervisor版本是否大于等于源主机。
预处理
- 在目的物理主机上获得与准备云主机挂载的块设备(Volume)。
- 在目的物理主机上设置云主机的网络(Networks)。
- 在目的物理主机上设置云主机的防火墙(Fireware)。
迁移ing
- 调用libvirt的Python接口migrateToURI,执行动态迁移。
- 以一定的时间间隔(0.5)循环调用wait_for_liva_migration方法,检测云主机迁移的状态,直到云主机成功迁移。
迁移后处理
- 在源物理主机上 detach volume。
- 在源物理主机上释放 security group ingress rule。
- 在目的物理主机上更新数据库里虚拟机的状态。
- 在源物理主机上删除虚拟机。
经过上述处理,虚机就成功迁移到新的计算节点上。
注意: 如果待迁移的主机正在进行耗费内存的操作,则可能导致动态迁移的失败。