提供在实时迁移期间暂停 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

参考资料