DB 迁移工具¶
https://blueprints.launchpad.net/tacker/+spec/db-migration-tool
本文档描述了一种从 v1 API 迁移到 v2 API 的工具。
问题描述¶
Tacker 支持多版本 API:基于 SOL 003 v2.6.1 [1] 的 v1 API 和基于 v3.3.1 [2] 的 v2 API。由于 v2 API 对 v1 API 没有向后兼容性,因此想要从 v1 API 迁移到 v2 API 的 v1 API 用户必须先终止他们的 VNF,然后使用 v2 API 重新实例化它们。然而,这将导致服务中断,因此不切实际。此外,有些 VNFs 运行超过 5 年,这导致 Tacker 无法弃用旧 API 版本超过 5 年。这可能成为 Tacker 在计划实施新的 ETSI SOL 版本(例如 Rel. 4)时的未来更新路线图的障碍。这是因为,如果没有弃用旧 API,支持的版本越多,维护成本就越高。因此,需要一种在不导致 VNF 服务中断的情况下从 v1 API 迁移到 v2 API 的方法。本文档提出了一种用于 API 版本更新的 DB 迁移工具。
提议的变更¶
我们将通过向 tacker-db-manage 命令添加 DB 迁移功能来实现 DB 迁移工具。详细信息如下所述。
1) 迁移的目标表:¶
要迁移的目标表
VnfInstanceV2
VnfLcmOpOccV2
要迁移的源表
vnf
vnf_attribute
vnf_instances
vnf_instantiated_info
vnf_lcm_op_occs
2) 目标 VNFs:¶
在执行命令时,可以选择以下其中之一。
由 VNFID 指定的 VNF
所有 VNFs,其在 vnf_instances 表中的记录的“deleted”字段不为 1。
3) 工具执行方法:¶
DB 迁移通过以下命令执行。
$ tacker-db-manage migrate-to-v2 { --all | [ --mark-delete --api-ver { v1 | v2 } ] --vnf-id <vnf-id> } [--keep-orig]
选项定义如下
--all:迁移 vnf_instances 上“deleted”字段不为 1 的所有 VNFs--vnf-id <vnf-id>:将迁移特定的 VNF--keep-orig:保留 v1 记录而不擦除它们(默认情况下擦除它们)
--keep-orig 选项可以指定以保留迁移前的记录,相反,可以使用 --mark-delete --api-ver { v1 | v2 } --vnf-id <vnf-id> 选项来完成或回滚迁移
--mark-delete --api-ver v1 --vnf-id <vnf-id>:完成迁移并擦除迁移前的记录。它将 v1 记录的“deleted”字段更新为 1,并完成 DB 迁移--mark-delete --api-ver v2 --vnf-id <vnf-id>:回滚迁移并擦除迁移后的记录。它将 v2 记录的“deleted”字段更新为 1,并回滚 DB 迁移
然后可以通过执行带有 purge_deleted 子命令的 tacker-db-manage 命令来完全删除记录。
4) 工具执行顺序:¶
当命令是
$ tacker-db-manage migrate-to-v2 --all [ --keep-orig ]
当命令是
$ tacker-db-manage migrate-to-v2 --vnf-id <vnf-id> [ --keep-orig ]
当命令是
$ tacker-db-manage migrate-to-v2 --mark-delete --api-ver v1 --vnf-id <vnf-id>
当命令是
$ tacker-db-manage migrate-to-v2 --mark-delete --api-ver v2 --vnf-id <vnf-id>
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
Masaki Oyama <ma-ooyama@kddi.com>
- 其他贡献者
Kinjou Yukihiro <yu-kinjou@kddi.com>
Xu Hongjin <ho-xu@kddi.com>
工作项¶
将迁移功能实现到 tacker-db-manage 命令
添加单元测试
添加功能测试
添加用户文档
依赖项¶
无
测试¶
将添加单元测试和功能测试。
文档影响¶
将添加有关工具用法的文档。