在进行实时迁移之前进行异步检查¶
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 |
引入 |