在进行实时迁移之前进行异步检查

https://blueprints.launchpad.net/nova/+spec/async-live-migration-rest-check

现有的 nova 实时迁移操作非常复杂:在接受并触发实时迁移之前,需要验证环境。此验证以同步方式进行,需要进行多次 RPC 调用,所有调用都必须成功后,流程才能开始,并且 REST API 层才能响应。 最好使检查异步化,并立即使用 202 - Accepted 响应 REST API。

问题描述

在实时迁移之前,环境验证的现有工作流程涉及几个步骤:向 conductor 发出 RPC 调用,这将触发向相关计算节点发出另外两个 RPC 调用。只有在这些调用都成功后,才会发出 RPC cast 来触发迁移,并响应 HTTP 请求。

用例

执行实时迁移的用户希望对实时迁移请求获得快速响应,并使用 instance-actions 服务来获取有效状态。

提议的变更

与其以阻塞方式执行所有检查,此规范建议使用 wrap_instance_event 装饰 conductor 的方法,以便可以检查实时迁移状态。收到实时迁移请求后,Nova API 将向 conductor 发送 RPC cast,然后立即使用 HTTP 响应进行响应。为了区分阻塞和非阻塞的实时迁移类型,将向 conductor 的 RPC API 引入新方法:* migrate_server - 现有的冷迁移、调整大小和实时迁移的通用方法。这将继续提供现有的阻塞行为,通过从 Nova API 发送 RPC 调用到 conductor。* live_migrate_server - 仅用于实时迁移的新方法。此方法将通过使用来自 Nova API 层的 rpc cast 来实现非阻塞检查。两种方法都应使用 wrap_instance_event 装饰,以便为阻塞和非阻塞路径记录事件到数据库。

备选方案

保持现状。另一种选择是切换为非阻塞 rpc cast,而不维护先前行为并升级 Nova REST API 微版本。

数据模型影响

REST API 影响

由于此更改将导致在后台执行验证检查,因此实时迁移 API 将响应 badRequest(400) 的情况将仅限于接收到错误的输入。应升级 REST API 微版本,以保留切换到先前行为的可能性。

安全影响

通知影响

其他最终用户影响

用户应使用 instance-actions 操作检查实时迁移状态。

性能影响

Nova REST API 方法变为非阻塞,这将提高 API 层的整体吞吐量。同时,应添加更多写入数据库的操作(在 conductor 端写入实例操作详细信息)。

其他部署者影响

开发人员影响

实现

负责人

主要负责人

tdurakov

其他贡献者

rpodolyaka

工作项

  • 为 conductor 的方法添加 wrap_instance_event 装饰器

  • 使实时迁移检查变为非阻塞

  • 升级 Nova REST API 版本。

依赖项

测试

应将测试添加到 tempest,以检查实时迁移的 conductor 部分是否由 instance-actions 记录。代码也应涵盖单元和功能测试。

文档影响

由于此更改会更改工作流程,因此应更新文档。需要向最终用户强调,需要通过 instance-actions 检查实时迁移过程。

参考资料

历史

修订版

发布名称

描述

Newton

引入