主机恢复的虚拟机迁移

https://blueprints.launchpad.net/masakari/+spec/vm-evacuations-for-host-recovery

问题描述

如果一个计算节点发生故障,Masakari 将从故障主机迁移实例。

如果同时发生大量主机故障,计算节点的资源将急剧减少。可能没有足够的资源来恢复所有实例。因此,优先迁移重要的实例是合理的,并且一旦云环境遇到不可逆转的情况,可以中止迁移。

当故障主机恢复后,恢复的资源可能会处于空闲状态。为了充分利用恢复的资源,需要将实例迁移到恢复的主机。有时可能会有有意的分布。例如,DRS 或手动迁移可能会扰乱分布。因此,在主机发生故障时保存迁移信息,并在主机恢复时根据之前的迁移信息将实例迁移回去是一个好主意。

提议的变更

本规范主要记录虚拟机迁移信息到数据库,主要包括 instance_uuid、notification_uuid、source_host、dest_host、type、status、start_time 和 end_time。

用户可以通过 vmove API 获取 ‘COMPUTE_HOST’ 类型通知的虚拟机迁移信息。

备选方案

数据模型影响

将在 Masakari 数据库中添加表 vmoves

  • created_at: 日期时间。

  • updated_at: 日期时间。

  • deleted_at: 日期时间。

  • deleted: 布尔值。

  • uuid: UUID。迁移的 UUID。

  • notification_uuid: UUID。迁移所属通知的 UUID。

  • instance_uuid: UUID。实例的 UUID。

  • instance_uuid: 字符串。实例的名称。

  • source_host: 字符串。迁移的源主机名称。

  • dest_host: 字符串。迁移的目标主机名称。

  • start_time: 日期时间。迁移的开始时间。

  • end_time: 日期时间。迁移的结束时间。

  • type: 字符串。表示迁移的可能类型,例如 migration、live_migration 或 evacuation。

  • status: 字符串。表示迁移的可能状态,例如 pending、ongoing、ignored、failed 或 succeeded。

  • message: 字符串。如果迁移失败或被忽略,则显示一些有意义的信息。

REST API 影响

以下 vmove API 将在新的 API 微版本中引入。

  • GET /notifications/<notification_id>/vmoves

    响应示例

    {
        "vmoves": [
            {
                "uuid": "239f95ca-fd46-44d2-8ff8-35e8a9c94f69",
                "instance_uuid": "33826ebd-af0f-445d-833f-e06340f7ae1c",
                "instance_name": "vm-1",
                "notification_uuid": "c0fa1a39-c150-4b86-ae97-8fae31700c67",
                "source_host": "node01",
                "dest_host": "node02",
                "start_time": "2022-11-22 14:50:22",
                "end_time": "2022-11-22 14:50:35",
                "type": "evacuation",
                "status": "succeeded",
                "message": null
            },
            {
                "uuid": "65a5da84-5819-4aea-8278-a28d2b489028",
                "instance_uuid": "e1a5a45b-f251-47cf-9c5f-fa1e66e1286a",
                "instance_name": "vm-2",
                "notification_uuid": "c0fa1a39-c150-4b86-ae97-8fae31700c67",
                "source_host": "node01",
                "dest_host": "node02",
                "start_time": "2022-11-22 14:50:23",
                "end_time": "2022-11-22 14:50:38",
                "type": "evacuation",
                "status": "succeeded",
                "message": null
            }
        ]
    }
    
  • GET /notifications/<notification_id>/vmoves/<vmove_id>

    响应示例

    {
         "vmove":
             {
                 "uuid": "239f95ca-fd46-44d2-8ff8-35e8a9c94f69",
                 "instance_uuid": "33826ebd-af0f-445d-833f-e06340f7ae1c",
                 "instance_name": "vm-1",
                 "notification_uuid": "c0fa1a39-c150-4b86-ae97-8fae31700c67",
                 "source_host": "node01",
                 "dest_host": "node02",
                 "start_time": "2022-11-22 14:50:22",
                 "end_time": "2022-11-22 14:50:38",
                 "type": "evacuation",
                 "status": "succeeded",
                 "message": null
             }
     }
    

安全影响

通知影响

其他最终用户影响

masakari-dashboard 和 openstacksdk 将更新以支持新的微版本中主机类型通知的虚拟机迁移。

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

工作项

  • 创建对象定义、数据库模式,更新引擎以处理此功能。

  • 创建一个新的 API 微版本,以获取所有迁移信息并获取特定迁移的详细信息。

  • 更新关于主机恢复虚拟机迁移的文档

  • 更新 masakari-dashboard 和 openstacksdk 以管理虚拟机迁移。

  • 添加单元和功能测试。

依赖项

测试

需要单元测试和功能测试。

添加必要的单元测试和功能测试,这些测试将在 gate 中运行。

文档影响

更新 Masakari API 参考文档。

参考资料

历史

修订版

发布名称

描述

Xena

引入

瑜伽

重新提出