文章
服务器与存储管理
作者:Cindy Swearingen
2014 年 7 月发布
|
OpenStack 是一个提供云管理基础架构的受欢迎的开源项目,已集成到 Oracle Solaris 11.2 中。OpenStack 存储特性包括用于块存储访问的 Cinder(参见图 1)和用于对象存储的 Swift,Swift 还提供冗余和复制。
ZFS 是一个集成了卷管理特性的文件系统,它提供了一个简单的界面来管理大量数据。它有一组强健的数据服务,还支持各种存储协议。
Cinder 为项目(或租户)实例提供 ZFS 块设备,也就是卷。为每个项目实例都创建和部署一个 Oracle Solaris 内核区域或非全局区域。创建区域的可部署映像并启动区域映像的实例之后,Cinder 将分配一个 ZFS 卷(其中包含实例的映像)作为来宾的 root 设备。
Oracle Solaris 11.2 提供了其他 Cinder 驱动程序来供应以下设备:
但使用这些特性不在本文的讨论范围内。
开始使用 OpenStack 时,最好先运行一个小而全的配置,其中启用所有 OpenStack 服务及同一系统节点上的 Cinder 卷服务,并使用 ZFS 作为后端存储。
ZFS 提供了强健的冗余,无需使用任何特殊软件或硬件阵列提供数据冗余。ZFS 易于配置和管理。
本文介绍在 Oracle Solaris 上部署云基础架构环境以及使用 Cinder 在同一系统上提供块存储设备作为 ZFS 卷的的云存储实践。
本文并不介绍如何安装 OpenStack。有关如何安装 OpenStack 的信息,请参见“Oracle Solaris 11.2 上的 OpenStack 入门”。

图 1.OpenStack Cinder 块存储服务示意图
先决条件要求 Oracle Solaris 11.2 OpenStack 已经在一个 SPARC 或 x86 系统上运行,作为运行主 OpenStack 服务的计算节点,且拥有多个本地或基于 SAN 的设备。
该配置包括以下组件:
下面的一般步骤介绍如何定制一个系统,使其运行 OpenStack 服务并运行 Cinder 卷服务以部署 ZFS 卷。配置数据冗余,还可以在此配置中添加 ZFS 压缩和加密。
本文的其余部分将详细介绍这些步骤。
Oracle Solaris 在通常称为 rpool 的 ZFS 存储池上运行。这种池通常较小,不是托管云基础架构的理想环境,因为它包含运行系统的 Oracle Solaris 组件。
一般来说,建议您保持较小的根池 (rpool),将应用、用户和云数据托管在一个单独的池中。镜像池配置可以让大多数负载实现最佳性能。
以下步骤介绍了如何配置图 2 所示组件:镜像 ZFS 存储池 (tank)、主文件系统 (cinder) 和 ZFS 卷,其中将包含租户(或项目)云实例。

图 2.含文件系统组件的镜像 ZFS 存储池
以下示例创建一个名为 tank 的镜像存储池,其中包含两对镜像磁盘和两个备用磁盘:
# zpool create tank mirror c0t5000C500335F4C7Fd0 \ c0t5000C500335F7DABd0 mirror c0t5000C500335FC6F3d0 \ c0t5000C500336084C3d0 spare c0t5000C500335E2F03d0 \ c0t50015179594B6F52d0
根据您估计的云数据需求调整镜像存储池的大小。如果需要更多空间,您随时可以将其他的镜像设备对添加到镜像 ZFS 存储池。
有关 ZFS 管理语法的更多信息,请参见管理 Oracle Solaris 11.2 中的 ZFS 文件系统。
查看池的当前状态:
# zpool status tank
确定池的原始可用空间:
# zpool list tank
注:如果您要使用加密保护云数据,必须在创建 ZFS 文件系统时启用加密(如下所述)。有关 ZFS 加密和除提示输入密码短语之外的其他加密密钥方法的更多信息,请参见管理 Oracle Solaris 11.2 中的 ZFS 文件系统。
# zfs create tank/cinder
检查可用于文件系统的实际可用空间:
# zfs list -r tank/cinder
通过监视 USED 空间和 AVAIL 空间,经常查看您的 ZFS 卷的可用空间。
如果要节省磁盘空间,请在 tank/cinder 文件系统上启用压缩。将自动压缩为项目实例分配的 ZFS 卷。
# zfs set compression=on tank/cinder
如果要保护云数据,请考虑启用加密。
# zfs create -o encryption=on tank/cinder Enter passphrase for 'tank/cinder': xxxxxxxx Enter again: xxxxxxxx
/etc/cinder/cinder.conf 中的 zfs_volume_base 参数,标识备用 pool/file-system。 例如,将以下行:
# zfs_volume_base = rpool/cinder
更改为:
# zfs_volume_base = tank/cinder
# svcadm restart svc:/application/openstack/cinder/cinder-volume:setup # svcadm restart svc:/application/openstack/cinder/cinder-volume:default
Cinder 希望以下 Keystone 授权参数在命令行上以选项形式出现,您也可以将其设置为环境变量。
# export OS_AUTH_URL=http://localhost:5000/v2.0 # export OS_USERNAME=admin-user-name # export OS_PASSWORD=password # export OS_TENANT_NAME=tenant-user-name
# cinder create --display_name test 1
+---------------------+--------------------------------------+
| Property | Value |
+---------------------+--------------------------------------+
| attachments | [] |
| availability_zone | nova |
| bootable | false |
| created_at | 2014-07-17T20:19:33.423744 |
| display_description | None |
| display_name | test |
| id | 258d80e9-2ef3-eab8-fbea-96a4d176360d |
| metadata | {} |
| size | 1 |
| snapshot_id | None |
| source_volid | None |
| status | creating |
| volume_type | None |
+---------------------+--------------------------------------+
# zfs list -r tank/cinder NAME USED AVAIL REFER MOUNTPOINT tank/cinder 1.03G 547G 31K /tank/cinder tank/cinder/volume-258d80e9-... 1.03G 546G 16K -
还可以确认该卷在 OpenStack 的 Horizon 界面上可见。通过 Horizon 启动项目实例时,将自动创建一个新的 Cinder 卷,因此您可以从 Horizon->volume 菜单使用 Delete Volume 特性删除测试卷。
下面是您可以执行的其他定制:
smtp-notify 警报通知监视 ZFS 池的磁盘故障。更多信息,请参见管理 Oracle Solaris 11.2 中的 ZFS 文件系统。
为 OpenStack 提供 Cinder 卷服务的冗余 ZFS 存储池可以托管在任何本地或 SAN 存储上,为云数据提供保护。您还可以对云存储应用强健的数据服务,如通过加密确保数据安全或通过压缩来减少数据。
另请参见以下资源:
Cindy Swearingen 是 Oracle Solaris 产品经理,擅长 ZFS 和存储特性。
| 修订版 1.0,2014 年 7 月 23 日 |