提供在实时迁移期间暂停 VM 的方法¶
蓝图: https://blueprints.launchpad.net/nova/+spec/pause-vm-during-live-migration
在使用实时迁移时,操作员可能希望提高迁移的成功率,即使以牺牲更长的 VM 停机时间为代价。本规范提出一个新的 Nova API,用于在实时迁移期间暂停 VM。
问题描述¶
实时迁移最常见的用例是主机维护,用于不同的目的。例如,OpenStack 升级到新版本,甚至硬件升级。Hypervisors 具有一些功能,例如 CPU 限制或内存压缩,以使将每个 VM 实时迁移到其他主机成为可能。但是,VM 可能会运行阻止实时迁移完成的工作负载。在这种情况下,操作员可能希望在实时迁移期间暂停 VM,以停止 VM 上的内存写入。
另一个用例是迫在眉睫的主机故障,其中实时迁移持续时间对于保持 VM 运行至关重要,无论在过渡到目标主机期间 VM 停机时间如何。
当前,要在实时迁移期间暂停 VM,操作员需要通过 libvirt/hypervisor 暂停 VM。此暂停对 Nova 是透明的,因为这与实时迁移期间的“暂停和复制”步骤发生的情况相同。
用例¶
作为 OpenStack 云的操作员,我希望能够在实时迁移期间暂停 VM。此操作可防止 VM 弄脏内存,从而强制实时迁移完成。
提议的变更¶
用于在实时迁移期间暂停 VM 的新 API 方法。这将向计算节点发出异步 RPC 调用,以通过 libvirt 暂停 VM。此外,这将引入新的实例操作 ‘live-migration-paused-vm’。Migration 对象和 MigrationList 对象将用于确定存在的迁移,并由计算驱动程序提供额外的可选数据。
这还需要对 rpcapi 版本进行增量更新。
备选方案¶
另一种选择是不这样做,让操作员通过 hypervisor 手动暂停 VM。
另一种选择是重用 Nova 中现有的暂停操作。但是,这可能会给操作员带来一些困惑。Libvirt 保持了实时迁移开始时 VM 的状态。当实时迁移完成时,libvirt 会将 VM 状态恢复到保留的状态。示例工作流程
VM 处于活动状态
操作员启动实时迁移
Libvirt 保持 VM 的活动状态
操作员在过渡期间暂停 VM(例如,nova 暂停 VM)
LM 完成
Libvirt 将 VM 状态恢复到保留的状态 - 在这种情况下,恢复到活动状态。
由于这种行为,不建议重用现有的暂停操作。这可能会让操作员感到困惑,即单个操作用于两种不同的目的。
此外,将来可能存在多种强制结束实时迁移的方法。此 API 可以扩展为提供提示,以执行暂停 VM 之外的其他操作,以在实时迁移期间进行操作。
这也适用于 Tasks API。
数据模型影响¶
无。Nova 已经创建并跟踪了使用的 Migration 对象。
REST API 影响¶
将在新的微版本中添加。
通过暂停 VM 强制实时迁移完成
POST /servers/{id}/migrations/{id}/action
Body
{
"force_complete": null
}
Normal http response code: `202 Accepted`
No response body is needed
Expected error http response code: `400 Bad Request`
- the instance state is invalid for forcing live migration to complete,
i.e., the task state is not 'migrating' or the migration is not in a
'running' state and the type is 'live-migration'. Also when live
migration cancel action is undergoing.
Expected error http response code: `403 Forbidden`
- Policy violation if the caller is not granted access to
'os_compute_api:servers:migrations:force_complete' in policy.json
Expected error http response code: `404 Not Found`
- the instance does not exist
由于这是一个异步调用,因此可能存在不会通过 API 公开的错误。例如,hypervisor 不支持在实时迁移期间暂停 VM。此类错误将由计算服务记录。
安全影响¶
无
通知影响¶
将有新的通知来指示正在进行的实时迁移期间暂停 VM 的开始和结果。
其他最终用户影响¶
python-novaclient 将通过新的操作扩展,以通过在过渡到目标主机期间暂停 VM 来强制进行正在进行的实时迁移完成。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
主要负责人: Pawel Koniszewski (irc: pkoniszewski)
工作项¶
通过 libvirt 暂停实时迁移期间的 VM
python-novaclient ‘nova live-migration-force-complete’
依赖项¶
无
测试¶
Nova 中的单元和功能测试
如果可能,使用 Tempest 测试来减慢实时迁移速度或启动永无止境的实时迁移
文档影响¶
需要记录新的 API
计算 API 扩展文档 https://developer.openstack.org/api-ref-compute-v2.1.html
nova.compute.api 文档 https://docs.openstack.org/developer/nova/api/nova.compute.api.html
参考资料¶
无