Xenapi-sm-volume-driver
- Launchpad 入口: NovaSpec:xenapi-sm-support
- 创建时间: 2011年2月1日
- 贡献者: Renuka Apte, Armando Migliaccio
目录
总结
设计并实现一个新的 Nova-Volume 驱动程序,基于 XenAPI 存储管理器。这将提供基本的存储功能(如卷创建和销毁)在多种不同的存储后端上,但它将能够使用更复杂的存储后端进行操作,例如克隆/快照等。为了了解使用 XenAPI SM 提供后端存储服务的优势,下面的列表显示了一些已经在 XenServer/XCP 中支持的存储插件
- NFS VHD: SR 插件,将磁盘存储为远程 NFS 文件系统上的 VHD 文件
- 本地 LVM 上的 VHD: SR 插件,将磁盘表示为本地连接的卷组内的 VHD 磁盘上的逻辑卷
- HBA LUN-per-VDI 驱动程序: SR 插件,将 LUN 表示为由硬件 HBA 适配器提供的 VDI,例如基于硬件的 iSCSI 或 FC 支持
- NetApp: SR 驱动程序,用于将 LUN 映射到 NETAPP 服务器上的 VDI,提供在文件服务器上使用快速快照和克隆功能
- 基于 FC 的 LVHD: SR 插件,将磁盘表示为在 HBA LUN 上创建的卷组内的 VHD,例如基于硬件的 iSCSI 或 FC 支持
- iSCSI: 基本 ISCSI SR 驱动程序,提供每个 VDI 的 LUN。不支持创建 VDI,但访问目标上的现有 LUN。
- 基于 iSCSI 的 LVHD: SR 插件,将磁盘表示为在 iSCSI LUN 上创建的卷组内的逻辑卷
- EqualLogic: SR 驱动程序,用于将 LUN 映射到 EQUALLOGIC 阵列组上的 VDI,提供在阵列上使用快速快照和克隆功能
术语表
- XenServer: Citrix 的商业支持产品
- Xen Cloud Platform (XCP): XenServer 的开源等效产品(以及该工具堆栈的开发项目)。关于 XenServer 下面的所有内容同样适用于 XCP
- XenAPI: XenServer 和 XCP 暴露的管理 API
- xapi: XenServer 和 Xen Cloud Platform 上的主守护进程;暴露 XenAPI 的守护进程
发布说明
对使用外部 HTTP API 服务的用户没有直接影响。该蓝图通过编写单个 nova-volume 驱动程序来启用多个存储后端的使用,而不是多个驱动程序,只要需要支持的特定存储后端数量即可。在适当的时候,利用特定后端的capabilities,将能够通过官方 API 暴露诸如卷快照、克隆等操作。
原理
这个新的驱动程序将与已经开发的驱动程序(如 AoE、iSCSI 和 SAN(都在运行 Linux 的通用服务器上))并排存在。但是,后者略有不同,因为它仍然将在通用硬件上运行,但它将通过 SSH、CLI 或自定义 API 等协议访问 SAN 硬件上的远程控制器。这显然是不希望的,因为每次需要支持新硬件时,都必须设计和开发新的驱动程序。采用 XenAPI SM 将能够抽象化通过通用 API 的许多存储后端。此外,这对于服务提供商的客户来说具有溢价价值,并且可能成为企业私有云的差异化因素。
用户故事
一家中型公司的系统管理员部署了一个基于 OpenStack 的私有云。他之前已经购买并部署了一个 NetApp 文件服务器,为员工的虚拟机提供后端存储。现在他使用 XenAPISM 卷驱动程序为使用 OpenStack 私有云创建的虚拟机提供块存储。
服务提供商希望为其客户提供优质存储。可以使用 XenAPISM 卷驱动程序轻松支持诸如 NetApp 或 EqualLogic 等存储后端。
前提条件
为了设计和实现新的 Nova-Volume 驱动程序,将使用 XenAPI for XenServer/XCP。
设计
定义
- 后端:特定存储后端的术语。这可以是 iSCSI、NFS、Netapp 等。
- 后端配置:连接到特定后端所需的所有参数。例如,对于 NFS,这将是服务器、路径等。
- Flavor(风味):指定某种服务质量等级的便于用户使用的术语。例如,“gold”可能意味着卷将使用可以进行备份的后端。
Flavor(风味)的概念是与 LUNR 工作保持一致而引入的。没有引入 API 变更来允许创建特定 flavor(风味)的卷。这将推迟到 LUNR 代码可用为止。
可以将多个后端与一个 flavor(风味)关联。某种策略将决定使用哪个后端来创建特定 flavor(风味)的卷。在没有选择 flavor(风味)的方法之前,我们将使用简单的“先适应”策略,即成功创建该卷的第一个后端将是使用的后端。
下面的实体关系图
操作
使用在实现中详细描述的 nova-manage 命令,管理员可以添加 flavor(风味)和后端。
每个可用性区域将部署一个或多个 nova-volume 服务实例。当启动实例时,它将创建存储库 (SR) 以连接到该区域内可用的后端。同一区域内的所有 nova-volume 实例都可以看到所有可用的后端。这些实例是完全对称的,因此应该能够服务该区域内的任何 create_volume 请求。
实现
命令
已在 nova-manage 的类 StorageManagerCommands 中添加了一个名为“sm”的类别
将添加以下操作
- flavor_list
- flavor_create
- flavor_delete
- backend_list
- backend_add
- backend_remove
用法
nova-manage sm flavor_create <label> <description>
nova-manage sm flavor_delete<label>
nova-manage sm backend_add <flavor label> <SR type> [config connection parameters]
注意:SR 类型和 config connection 参数与 Xen 命令行界面保持一致。 http://support.citrix.com/article/CTX124887
nova-manage sm backend_delete <backend-id>
示例
nova-manage sm flavor_create gold "Not all that glitters"
nova-manage sm flavor_delete gold
nova-manage sm backend_add gold nfs name_label=toybox-renuka server=myserver serverpath=/local/scratch/myname
nova-manage sm backend_remove 1
API 变更
如上所述,创建/删除特定 flavor(风味)的卷所需的 API 变更将推迟到 LUNR 代码可用为止。因此,虽然代码/设计存在,但目前无法为特定 flavor(风味)创建卷。
应使用现有的 euca-create-volume 和 euca-delete-volume 命令。
新表格
SM Flavor
| 字段 | 类型 | Null | 键 | 默认 |
| created_at | datetime | 是 | NULL | |
| updated_at | datetime | 是 | NULL | |
| deleted_at | datetime | 是 | NULL | |
| deleted | tinyint(1) | 是 | NULL | |
| id | int(11) | NO | PRI | NULL |
| label | varchar(255) | 是 | NULL | |
| description | varchar(255) | 是 | NULL |
Backend-config
| 字段 | 类型 | Null | 键 | 默认 |
| created_at | datetime | 是 | NULL | |
| updated_at | datetime | 是 | NULL | |
| deleted_at | datetime | 是 | NULL | |
| deleted | tinyint(1) | 是 | NULL | |
| id | int(11) | NO | PRI | NULL |
| flavor_id | int(11) | NO | MUL | NULL |
| sr_uuid | varchar(255) | 是 | NULL | |
| sr_type | varchar(255) | 是 | NULL | |
| config_params | varchar(2047) | 是 | NULL |
SM Volume
| 字段 | 类型 | Null | 键 | 默认 |
| created_at | datetime | 是 | NULL | |
| updated_at | datetime | 是 | NULL | |
| deleted_at | datetime | 是 | NULL | |
| deleted | tinyint(1) | 是 | NULL | |
| id | int(11) | NO | PRI | NULL |
| backend_id | int(11) | NO | MUL | NULL |
| vdi_uuid | varchar(255) | 是 | NULL |
代码变更
已在 nova/volume 中添加了一个名为 XenSMDriver 的新卷驱动程序。它利用 xenapi 存储管理器来控制可用的后端。已暴露函数以创建/忘记存储库并连接到它们。
为了在服务启动时执行初始化(包括创建后端存储库),已向卷驱动程序添加了一个 do_setup 函数。
测试/演示计划
在开发代码时将提供单元测试。
未解决的问题
撰写时没有
BoF 议程和讨论
相关主题
- 让 VM 的根设备在块存储上运行
- 稀疏配置
- 快速克隆
- 高级卷 API(卷即服务)
- 光纤通道和 StorageLink
- 数据去重
