允许迁移 PMEM 的数据

https://blueprints.launchpad.net/nova/+spec/allow-migrate-pmem-data

本文档提出了一种在冷迁移或调整实例大小期间迁移 PMEM 命名空间的实例数据的方法。

问题描述

目前,冷迁移或调整实例大小会始终在新主机上选择一个新的 pmem 命名空间。但实例在 PMEM 设备中的数据将会丢失。为了确保实例数据的完整性,我们希望在迁移或调整实例大小时迁移 PMEM 的数据。

PMEM 设备可以用作一个大容量、低延迟、高带宽的内存池,可以在其中存储用于计算的数据。这可以提高实例的性能。

由于复制 pmem 数据需要更多的时间和网络带宽,因此添加了一个新的“copy_pmem_devices”参数来决定是否复制 pmem 数据。

用例

  • 作为用户,我希望在实例迁移或调整到另一台主机时迁移 PMEM 命名空间的数据,以确保数据完整性。

提议的变更

添加一个新的微版本迁移/调整 API,引入“copy_pmem_devices”字段。

在迁移或调整实例时,我们可以从 instance.migration_context 获取旧的 PMEM 设备和新的 PMEM 设备。因此,我们可以将数据从旧的 PMEM 设备复制到新的 PMEM 设备。

假设实例在源主机上使用 /dev/dax0.0 PMEM 命名空间,并且我们希望将其迁移或调整大小到其他主机,迁移或调整实例将使用目标主机上的 /dev/dax0.1 PMEM 命名空间。然后 nova 将使用 daxio 实用程序通过 ssh 隧道将实例的 PMEM 命名空间数据从 /dev/dax0.0 迁移到 /dev/dax0.1。

工作流

冷迁移或调整实例的工作流程如下

  1. prep_resize 验证是否有可用的 pmem 设备并将其作为 move_claim 过程的一部分声明。声明的设备存储在 instance.migration_context 中,稍后可以检索到。

  2. resize_instance 操作在 source_compute 上,释放网络卷等资源。我们可以从 migration 获取源计算节点和目标计算节点,并从 instance.migration_context 获取新的 PMEM 设备和旧的 PMEM 设备。在 migtate_disk_and_power_off 时,将 PMEM 数据从旧的 PMEM 设备复制到新的 PMEM 设备。如果复制操作失败,则清理目标计算节点上的 PMEM 数据,并在源计算节点上使实例恢复到 ACTIVE 状态。复制 PMEM 数据可以使用“daxio”和“ssh”。

  3. finish_resize 操作在 dest_compute 上,启动具有步骤 1 中资源的新的实例。如果启动新实例失败,将终止操作,清理 dest_compute 上的 PMEM 数据,并在源计算节点上使实例恢复到 ACTIVE 状态。

  4. confirm_migration 将清理源计算节点上的 PMEM 数据,或者 revert_resize 将清理目标计算节点上的 PMEM 数据,并在源计算节点上使实例恢复到 ACTIVE 状态。

备选方案

数据模型影响

REST API 影响

添加一个新的微版本迁移/调整 API,带有“copy_pmem_devices”字段。

  • POST /servers/{server_id}/action {

    “resize”{

    “flavorRef” : “2”, “OS-DCF:diskConfig”: “AUTO”, “copy_pmem_devices”: “true”

    }

    }

    {

    “migrate”: {

    “host”: “host1”, “copy_pmem_devices”: “true”

    }

    }

“copy_pmem_devices”的值默认为“false”,不复制 pmem 数据。“true”,虚拟持久内存中的数据将被复制。

如果 copy_pmem_devices=true 并且旧的微版本返回 400。跨单元格调整大小/冷迁移将返回 400。

安全影响

pmem 数据将使用 daxio 实用程序通过 ssh 传输来读取和写入数据,例如 daxio -ouput /dev/dax0.0 | ssh <dest_compute_ip> “daxio -input /dev/dax0.1”。这将重用用于实现 ssh 远程 fs 驱动程序的现有的 ssh_execute 函数。

通知影响

其他最终用户影响

在执行跨单元格调整大小/迁移时,不会复制 PMEM 数据。

其他部署者影响

开发人员影响

性能影响

由于需要复制计算主机之间的 pmem 内容,因此冷迁移/调整大小操作将比以前花费更多的时间和网络带宽。

升级影响

此更改将影响 nova-compute 服务在迁移/调整大小期间的行为,因此需要更新计算服务版本。此外,带有 pmem 复制的调整大小和迁移仅适用于足够新的计算服务,因此应为这些操作实现计算服务版本检查。

如果 copy_pmem_devices=false 或旧的微版本,我们将继续执行不复制数据的旧行为。如果 copy_pmem_devices=true 并且旧的微版本返回 400。

实现

负责人

QIU FOSSEN(qiujunting@inspur.com)

功能联络人

工作项

依赖项

测试

添加相关的单元测试,用于负面场景。添加相关的功能测试(API 示例)。

文档影响

更新相关的文档并添加有关此更改的一些描述

参考资料

[1] https://docs.openstack.org/nova/latest/admin/virtual-persistent-memory.html

历史

修订版

发布名称

描述

Xena

重新提出