跳转到: 导航, 搜索

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 卷驱动程序轻松支持诸如 NetAppEqualLogic 等存储后端。

前提条件

为了设计和实现新的 Nova-Volume 驱动程序,将使用 XenAPI for XenServer/XCP。

设计

定义

  • 后端:特定存储后端的术语。这可以是 iSCSI、NFS、Netapp 等。
  • 后端配置:连接到特定后端所需的所有参数。例如,对于 NFS,这将是服务器、路径等。
  • Flavor(风味):指定某种服务质量等级的便于用户使用的术语。例如,“gold”可能意味着卷将使用可以进行备份的后端。

Flavor(风味)的概念是与 LUNR 工作保持一致而引入的。没有引入 API 变更来允许创建特定 flavor(风味)的卷。这将推迟到 LUNR 代码可用为止。

可以将多个后端与一个 flavor(风味)关联。某种策略将决定使用哪个后端来创建特定 flavor(风味)的卷。在没有选择 flavor(风味)的方法之前,我们将使用简单的“先适应”策略,即成功创建该卷的第一个后端将是使用的后端。

下面的实体关系图

Erd-xenapi-sm.png

操作

使用在实现中详细描述的 nova-manage 命令,管理员可以添加 flavor(风味)和后端。

每个可用性区域将部署一个或多个 nova-volume 服务实例。当启动实例时,它将创建存储库 (SR) 以连接到该区域内可用的后端。同一区域内的所有 nova-volume 实例都可以看到所有可用的后端。这些实例是完全对称的,因此应该能够服务该区域内的任何 create_volume 请求。

实现

命令

已在 nova-manage 的类 StorageManagerCommands 中添加了一个名为“sm”的类别

将添加以下操作

  1. flavor_list
  2. flavor_create
  3. flavor_delete
  4. backend_list
  5. backend_add
  6. 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
  • 数据去重