救援实例的实时迁移¶
https://blueprints.launchpad.net/nova/+spec/live-migrate-rescued-instances
当实例被救援时,libvirt 驱动程序会在实例目录中创建一个文件,其中包含原始实例的 XML。该文件在取消救援实例时用于恢复到原始磁盘配置。然而,该文件并非必要用于恢复实例的原始配置。此外,依赖于此文件意味着我们目前无法实时迁移救援实例。因此,建议我们在救援操作期间不创建此文件,并在取消救援时从数据库重建实例的原始 XML 文件。
问题描述¶
目前,操作员无法实时迁移救援实例。
用例¶
作为 OpenStack 云的操作员,我希望能够实时迁移节点上的所有活动实例,以便进行维护。
提议的变更¶
计算管理器的实时迁移方法将被修改,以允许迁移处于救援状态的实例。救援和实时迁移操作的实现因驱动程序而异。
Hyper-V
最近添加了对救援和实时迁移救援实例的支持。
VMware
目前不支持跨计算节点的实例实时迁移,但提案补丁 https://review.openstack.org/#/c/270116/ 将解决此问题。当此补丁实施后,将支持实时迁移救援实例。
XenAPI 和 Libvirt
由于实例救援时存储在计算节点上的本地信息,目前不支持实时迁移救援实例。实时迁移不会将此信息复制到目标计算节点,因此后续的取消救援操作将失败。
建议修改 XenAPI 和 Libvirt 驱动程序中救援和取消救援的实现方式。
在 libvirt 驱动程序中,救援方法将当前的域 XML 保存到本地文件,而取消救援方法使用此文件将实例恢复到其先前的设置,即再次从实例主磁盘启动,而不是从救援镜像启动。然而,将先前状态保存在域 XML 文件中是不必要的,因为在取消救援期间,域将被销毁并重新启动。这实际上是硬重启,所以我只是在取消救援操作期间调用硬重启。硬重启从 nova 数据库重建域 XML,因此不需要域 XML 文件。
为 XenAPI 提出了类似的方法。
为了支持不完全支持救援状态下实例实时迁移的驱动程序,将添加一个新的驱动程序功能标志,名为 code:supports_live_migrate_rescued。对于不支持救援实例迁移的驱动程序,此标志将被设置为 False。
如果驱动程序支持救援状态下实例的实时迁移,则 os-migrateLive 操作 API 调用将返回 202 响应代码,而不是尝试对处于救援状态的实例执行实时迁移时当前的 409 响应代码,因此将引入一个新的 API 微版本。
如果驱动程序不支持救援状态下实例的实时迁移,则将返回 400 响应,并附带一条消息,指示驱动程序不支持救援实例的实时迁移。响应消息将标识不支持实时迁移救援实例的计算节点,即源节点或目标节点以及计算节点名称。这在升级期间很有用,因为一些计算节点可能尚未升级到支持救援实例迁移的版本。
实时迁移已经保留了当前实例状态,无论迁移成功还是回滚。
备选方案¶
另一种选择是不这样做,而是让操作员要求用户取消救援他们的实例,以便可以进行迁移。
另一个选项是在救援操作期间将原始实例状态写入数据库,以便目标计算节点在取消救援期间可以检索它。然而,这是不必要的,并且需要更改数据库模式以添加一个表来存储此信息。
数据模型影响¶
无。
REST API 影响¶
将在新的微版本中添加。
这是必需的,因为对处于救援状态的实例执行实时迁移操作将返回 202 而不是当前的 409 响应。
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
用户尝试在迁移进行中时取消救援实例将被阻止,直到迁移完成为止。
性能影响¶
无
其他部署者影响¶
在升级期间,由于源节点或目标节点尚未升级,救援实例的实时迁移可能会以 400 响应失败。
开发人员影响¶
无
实现¶
负责人¶
主要负责人:Paul Carlton (irc: paul-carlton2)
其他分配人:无
工作项¶
更改计算 API 实时迁移方法以允许迁移救援实例。
升级 python-novaclient API 版本。
更改 libvirt 驱动程序的救援和取消救援函数。
更改计算管理器取消救援,以将上下文对象传递给 virt/driver 取消救援方法,并更改 virt/driver 取消救援的实现以接受上下文参数(这需要 libvirt 驱动程序取消救援才能利用驱动程序的 hard_reboot 方法)
更改 XenAPI 驱动程序的救援和取消救援方法以删除对计算节点上本地信息的使用。
实现一个驱动程序功能检查,以确定驱动程序是否支持救援实例的实时迁移。
依赖项¶
无
测试¶
将根据需要添加单元测试。此外,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
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Newton |
引入 |