NexentaVolumeDriver
| |
旧设计页面
此页面曾用于帮助设计 OpenStack 早期版本的一个特性。该特性可能已经或尚未实现。因此,此页面可能不会更新,并且可能包含过时的信息。上次更新时间为 2014-05-15 |
- Launchpad 入口: nexenta-volume-driver
- 创建时间: 2011年11月11日
- 贡献者: Yuriy Taraday
目录
总结
我们希望引入 NexentaStor 对 nova-volume 服务的支持。此蓝图提出基于已经集成到 OpenStack nova-volume 服务中的 iSCSI 驱动程序,具有创建、导出和删除 volumes 和 snapshots 的基本功能。
该驱动程序可以使用其 REST API 或使用 DBus API 与 NexentaStor 设备交互。默认 API 是 REST,而 DBus 需要修补 libdbus 才能正常工作。
提议是将 NexentaStor 驱动程序添加到 nova-volume 服务。
发布说明
NexentaStor 设备是一种 NAS/SAN 软件平台,专为构建可靠且快速的网络存储阵列而设计。 NexentaStor 基于 OpenSolaris 并使用 ZFS 作为磁盘管理系统。 NexentaStor 可以作为 OpenStack 的存储节点,并通过 iSCSI 协议为虚拟机提供块级 volumes。
需求
- 已安装 Openstack nova-volume 服务
- NexentaStor 设备已安装并配置
- 在设备上创建了专用的 ‘volume’ 对象
原理
NexentaStor 设备提供可靠的块级 volumes,这些 volumes 易于通过简单的 REST 接口进行管理。它自动化了许多常见的存储管理任务。它旨在与通用硬件一起使用,基本上是与供应商无关的。这使得 NexentaStor 设备软件用作 IaaS 云中存储节点的良好基础。
用户故事
用户在 Openstack 节点上安装 nova-volume 服务并配置 volume_driver,指定与 NexentaStor 设备通信的传输方式和 IP 地址。可以在标志文件中指定 volumes 的其他参数,例如块大小。用户然后可以使用标准的 Nova API 调用创建 volumes。
Nexenta 设备配置
为了将 volumes 存储到 Nexenta 设备,必须对其进行适当的配置。设备的配置包括以下步骤
- 通过管理控制台和 Web 界面使用初始配置向导安装和配置 NexentaStor 软件;
- 使用管理控制台或 Web 界面创建 ZFS volume,例如 ‘nova-volumes’;
- 在 Openstack 节点上的 nova.conf 中指定基本 volume 名称。
示例配置
例如,我们有一个配备 8 个磁盘的设备,其中两个磁盘用于系统池 'syspool'。这给我们留下了 6 个磁盘来创建存储池
nmc@nexentastor:/$ show lun disk LUN ID Device Type Size Volume Mounted Attach GUID c1t0d0 sd0 disk 147GB syspool no mpt 00825b934e690f9000059a03000b c1t1d0 sd2 disk 500GB no mpt 00c469d24e68c469000b4c830006 c1t2d0 sd3 disk 500GB no mpt 00c469d24e6a0070000e519b0011 c1t3d0 sd4 disk 500GB no mpt 00c469d24e6a053400070c500012 c1t4d0 sd5 disk 500GB no mpt 00c469d24e6f25ab000bb7770008 c1t5d0 sd6 disk 500GB no mpt 00c469d24e6f25ab000bcd6d0009 c1t6d0 sd7 disk 500GB no mpt 00c469d24e6f514500045e94000c c1t9d0 sd9 disk 147GB syspool no mpt 00c469d24e79b0ca0007a8000004
我们希望从这些磁盘创建 'nova-volumes' volume 作为 2 个三向镜像,以提高数据保护。可以通过以下命令创建池
nmc@nexentastor:/$ create volume nova-volumes mirror c1t1d0 c1t2d0 c1t3d0 mirror c1t4d0 c1t5d0 c1t6d0 -y
这将非交互式地创建 volume 'nova-volumes'。我们可以使用以下命令查看其属性
nmc@nexentastor:/$ show volume nova status
volume: nova
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
nova ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
c1t1d0 ONLINE 0 0 0
c1t2d0 ONLINE 0 0 0
c1t3d0 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
c1t4d0 ONLINE 0 0 0
c1t5d0 ONLINE 0 0 0
c1t6d0 ONLINE 0 0 0
errors: No known data errors
OpenStack Nova 配置
可以通过在 nova.conf 中设置以下标志来设置驱动程序
- volume_driver - 应设置为 nexenta.volume.NexentaDriver;
- nouse_local_volumes - 这对于所有 SAN 驱动程序都是必需的;
- nexenta_host - 应为 Nexenta 设备的 hostname 或 IP 地址;
- nexenta_volume - 应设置为应包含所有 Nova volumes 的 ZFS volume 的名称;
- nexenta_user - Nexenta 设备上具有 REST API 访问权限的用户的名称(例如 admin);
- nexenta_password - 该用户的密码。
示例配置如下
--volume_driver=nexenta.volume.NexentaDriver --nouse_local_volumes --nexenta_host=172.16.1.10 --nexenta_volume=nova --nexenta_user=admin --nexenta_password=secrete
用户体验
使用 SAS 磁盘驱动器的 NexentaStor 设备通过 1Gbps 以太网连接到计算节点,提供以下输入和输出速率
- 顺序写入高达 60 Mbytes 每秒
- 随机读取高达 132 Mbytes 每秒
- 经过测试,每个设备最多可支持 1000 个 volumes
前提条件
此驱动程序假定用户已在至少一个设备上安装 NexentaStor 软件,并将其配置为具有专用于 Openstack volumes 的逻辑 volume。
设计
驱动程序以与所有 SAN 驱动程序相同的方式扩展 iSCSI 驱动程序。所有操作都使用以下两种传输模块之一执行:JSON RPC 或支持的 D-Bus 传输。
Volumes 后端
ZFS zvols 用作导出的 volumes 的基础。Zvol 是一种 ZFS 实体,本质上是一种虚拟块设备。其灵活的配置允许从 512 字节到 128 Kbytes 的块大小,并使用 ZFS 特定的高级功能,如内置完整性控制、重复数据删除和缓存。Zvols 可以是稀疏的,并且仅消耗实际写入数据的大小那么多磁盘空间。
该驱动程序支持底层 ZFS zvols 的以下功能
- 可以使用 --nexenta_blocksize 标志以字节或 Kbytes 为单位指定块大小;
- 可以使用 --nexenta_sparse 标志配置稀疏 volumes 的使用;
Volumes 导出
常用的 iSCSI 发起者-目标方案用于导出。每个 volume 通过专用的目标导出,该目标放置在单独的目标组中,以确保正确的 iSCSI LUN 编号。
实现
驱动程序功能分为三个模块。两个模块实现传输:nexenta.jsonrpc 用于 JSON RPC 和 nexenta.NZA 用于 D-Bus。后者需要安装已修补的 libdbus 才能在系统中工作。nexenta.volume 模块包含驱动程序代码。
为了增强驱动程序的行为,nova 主代码中修复了一个小的异常处理问题。
代码变更
Nexenta 驱动程序代码应作为 nova.volume 包下的包包含在内。
测试/演示计划
您可以在此视频中看到此驱动程序的演示:http://www.youtube.com/watch?v=q76OONdWo8I
未解决的问题
- 由于 Nexenta 的限制,目前无法删除从其创建的 volume 的 snapshot。
外部链接
- http://www.nexenta.com/ -- 官方 Nexenta Systems Inc. 网站。 NexentaStor 软件的文档和下载。
- http://www.nexentastor.org/ -- NexentaStor 社区网站。开源项目、讨论论坛和社区下载。
- [1]] -- 驱动程序的下载页面,您可以在此处找到 [驱动程序本身 和 libdbus 的补丁。