允许迁移 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。
工作流¶
冷迁移或调整实例的工作流程如下
prep_resize 验证是否有可用的 pmem 设备并将其作为 move_claim 过程的一部分声明。声明的设备存储在 instance.migration_context 中,稍后可以检索到。
resize_instance 操作在 source_compute 上,释放网络卷等资源。我们可以从 migration 获取源计算节点和目标计算节点,并从 instance.migration_context 获取新的 PMEM 设备和旧的 PMEM 设备。在 migtate_disk_and_power_off 时,将 PMEM 数据从旧的 PMEM 设备复制到新的 PMEM 设备。如果复制操作失败,则清理目标计算节点上的 PMEM 数据,并在源计算节点上使实例恢复到 ACTIVE 状态。复制 PMEM 数据可以使用“daxio”和“ssh”。
finish_resize 操作在 dest_compute 上,启动具有步骤 1 中资源的新的实例。如果启动新实例失败,将终止操作,清理 dest_compute 上的 PMEM 数据,并在源计算节点上使实例恢复到 ACTIVE 状态。
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 |
重新提出 |