存储概念¶
存储存在于 OpenStack 云环境的许多部分。理解 临时 存储和 持久 存储之间的区别非常重要
临时存储 - 如果您仅部署 OpenStack 计算服务 (nova),默认情况下您的用户无法访问任何形式的持久存储。与虚拟机关联的磁盘是临时的,这意味着从用户的角度来看,当虚拟机终止时它们会消失。
持久存储 - 持久存储意味着存储资源比任何其他资源都长寿,并且始终可用,无论运行实例的状态如何。
OpenStack 云显式支持三种类型的持久存储:对象存储、块存储和基于文件的存储。
对象存储¶
对象存储在 OpenStack 中由对象存储服务 (swift) 实现。用户通过 REST API 访问二进制对象。如果您的目标用户需要归档或管理大型数据集,您应该为他们提供对象存储服务。其他好处包括
OpenStack 可以将您的虚拟机 (VM) 镜像存储在对象存储系统中,作为将镜像存储在文件系统的一种替代方案。
与 OpenStack Identity 集成,并与 OpenStack Dashboard 协同工作。
通过支持异步最终一致性复制,更好地支持跨多个数据中心的分布式部署。
如果您最终计划在多个数据中心之间分发您的存储集群,如果需要为您的用户提供计算和对象存储的统一帐户,或者如果您想使用 OpenStack Dashboard 控制您的对象存储,则应考虑使用 OpenStack 对象存储服务。有关更多信息,请参见 Swift 项目页面。
块存储¶
块存储在 OpenStack 中由块存储服务 (cinder) 实现。由于这些卷是持久的,因此可以将其从一个实例分离并重新附加到另一个实例,并且数据保持不变。
块存储服务以驱动程序的形式支持多种后端。您对存储后端的选择必须由块存储驱动程序支持。
大多数块存储驱动程序允许实例直接访问底层存储硬件的块设备。这有助于提高整体读/写 IO。但是,也很好地支持使用文件作为卷,完全支持 NFS、GlusterFS 等。
这些驱动程序的工作方式与传统的块存储驱动程序略有不同。在 NFS 或 GlusterFS 文件系统上,会创建一个文件,然后将其映射为虚拟卷到实例中。这种映射和转换类似于 OpenStack 利用 QEMU 的基于文件的虚拟机存储在 /var/lib/nova/instances 中的方式。
基于文件的存储¶
在多租户 OpenStack 云环境中,共享文件系统服务 (manila) 提供了一组用于管理共享文件系统的服务。共享文件系统服务以驱动程序的形式支持多种后端,并可以配置为从一个或多个后端配置共享。共享服务器是导出使用不同文件系统协议(如 NFS、CIFS、GlusterFS 或 HDFS)的文件共享的虚拟机。
共享文件系统服务是持久存储,可以挂载到任何数量的客户端机器。它也可以从一个实例分离并附加到另一个实例,而不会丢失数据。在此过程中,除非共享文件系统服务本身被更改或删除,否则数据是安全的。
用户通过在实例上挂载远程文件系统与共享文件系统服务交互,从而使用这些系统进行文件存储和交换。共享文件系统服务提供共享,即远程可挂载的文件系统。您可以挂载共享并从多个主机由多个用户同时访问共享。使用共享,您还可以
指定大小、共享文件系统协议和可见性级别的创建共享。
根据所选的后端模式,有或没有使用共享网络,在共享服务器或独立模式下创建共享。
指定现有共享的访问规则和安全服务。
将多个共享组合到组中,以在组内保持数据一致性,以进行以下安全组操作。
创建所选共享或共享组的快照,以一致地存储现有共享或以一致的方式从该快照创建新的共享。
从快照创建共享。
为特定的共享和快照设置速率限制和配额。
查看共享资源的使用情况。
删除共享。
存储类型之间的差异¶
表. OpenStack 存储 解释了 Openstack 存储类型之间的差异。
临时存储 |
块存储 |
对象存储 |
共享文件系统存储 |
|
|---|---|---|---|---|
应用程序 |
运行操作系统和抓取空间 |
将额外的持久存储添加到虚拟机 (VM) |
存储数据,包括 VM 镜像 |
将额外的持久存储添加到虚拟机 |
通过…访问 |
文件系统 |
可以分区、格式化和挂载的块设备(例如,/dev/vdc) |
REST API |
可以分区、格式化和挂载的共享文件系统服务共享(无论是 manila 管理的还是在 manila 中注册的外部共享)(例如 /dev/vdc) |
可从…访问 |
在 VM 内部 |
在 VM 内部 |
任何地方 |
在 VM 内部 |
由…管理 |
OpenStack Compute (nova) |
OpenStack 块存储 (cinder) |
OpenStack 对象存储 (swift) |
OpenStack 共享文件系统存储 (manila) |
持续到… |
VM 终止 |
用户删除 |
用户删除 |
用户删除 |
大小由… |
管理员配置的大小设置,称为风味 |
用户在初始请求中指定 |
可用物理存储量 |
|
加密配置 |
参数在 |
管理员建立 加密卷类型,然后用户选择加密卷 |
尚未可用 |
共享文件系统服务不应用共享的后端存储提供的任何额外加密。 |
典型用法的示例… |
10 GB 第一个磁盘,30 GB 第二个磁盘 |
1 TB 磁盘 |
10s of TBs 的数据集存储 |
完全取决于创建共享时指定的后端存储的大小。在采用精简配置的情况下,它可以是部分空间预留(有关更多详细信息,请参见 功能和额外规格 规范) |
注意
用于实时迁移的文件级存储
使用文件级存储,用户使用操作系统的文件系统接口访问存储的数据。大多数使用过网络存储解决方案的用户都遇到过这种形式的网络存储。Unix 最常用的文件系统协议是 NFS,对于 Windows,是 CIFS(以前称为 SMB)。
OpenStack 云不会向最终用户呈现文件级存储。但是,在设计您的云时,考虑文件级存储以存储位于 /var/lib/nova/instances 下的实例非常重要,因为如果您想支持实时迁移,则必须拥有共享文件系统。
通用存储技术¶
有各种通用的存储后端技术可用。根据您的云用户的需求,您可以在不同的组合中实现这些技术中的一种或多种。
Ceph¶
Ceph 是一种可扩展的存储解决方案,它在通用的存储节点上复制数据。
Ceph 利用对象存储机制来存储数据,并通过不同的存储类型接口向最终用户公开数据,它支持接口:- 对象存储 - 块存储 - 文件系统接口
Ceph 支持与 swift 相同的对象存储 API,可以用作块存储服务 (cinder) 的后端,以及 glance 镜像的后端存储。
Ceph 支持使用写时复制实现的精简配置。这在从卷启动时非常有用,因为可以非常快速地配置新卷。Ceph 还支持基于 keystone 的身份验证(从版本 0.56 开始),因此它可以无缝地替代默认的 OpenStack swift 实现。
Ceph 的优势包括
管理员可以更精细地控制数据分布和复制策略。
对象存储和块存储的整合。
使用精简配置快速配置从卷启动的实例。
支持分布式文件系统接口 CephFS。
如果您想在单个系统中管理对象和块存储,或者如果您想支持快速从卷启动,则应考虑 Ceph。
Gluster¶
一个分布式共享文件系统。从 Gluster 版本 3.3 开始,您可以使用 Gluster 将对象存储和文件存储整合到一个统一的文件和对象存储解决方案中,该解决方案称为 Gluster For OpenStack (GFO)。GFO 使用定制版本的 swift,使 Gluster 能够用作后端存储。
使用 GFO 而不是 swift 的主要原因是,如果您还想支持分布式文件系统,无论是支持共享存储实时迁移还是将其作为单独的服务提供给您的最终用户。如果您想在单个系统中管理对象和文件存储,则应考虑 GFO。
LVM¶
逻辑卷管理器 (LVM) 是一个基于 Linux 的系统,它在物理磁盘之上提供抽象层,以向操作系统公开逻辑卷。LVM 后端将块存储实现为 LVM 逻辑分区。
在将容纳块存储的每个主机上,管理员必须首先创建一个专门用于块存储卷的卷组。块是从 LVM 逻辑卷创建的。
注意
LVM 不提供任何复制。通常,管理员在对使用 LVM 作为块存储的主机配置 RAID 以防止单个硬盘驱动器发生故障。但是,RAID 无法防止整个主机发生故障。
iSCSI¶
互联网小型计算机系统接口 (iSCSI) 是一种网络协议,它在传输控制协议 (TCP) 之上运行,用于连接数据存储设备。它在服务器上的 iSCSI 发起程序和存储设备上的 iSCSI 目标之间传输数据。
iSCSI 适用于具有块存储服务的云环境,以支持应用程序或用于文件共享系统。与其他存储后端技术相比,由于 iSCSI 不需要主机总线适配器 (HBA) 或特定于存储的网络设备,因此可以以更低的成本实现网络连接。
NFS¶
网络文件系统 (NFS) 是一种文件系统协议,它允许用户或管理员在服务器上挂载文件系统。文件客户端可以通过远程过程调用 (RPC) 访问挂载的文件系统。
NFS 的好处是由于共享 NIC 和传统的网络组件而降低的实施成本,以及更简单的配置和设置过程。
有关配置块存储以使用 NFS 存储的更多信息,请参见 OpenStack 管理员指南中的 配置 NFS 存储后端。
Sheepdog¶
Sheepdog 是一个用户空间分布式存储系统。Sheepdog 可以扩展到数百个节点,并具有强大的虚拟磁盘管理功能,例如快照、克隆、回滚和精简配置。
它本质上是一个对象存储系统,用于管理磁盘并以智能的方式线性地聚合磁盘的空间和性能。在它的对象存储之上,Sheepdog 提供弹性卷服务和 http 服务。Sheepdog 需要特定的内核版本,并且可以很好地与支持 xattr 的文件系统配合使用。
ZFS¶
OpenStack 块存储的 Solaris iSCSI 驱动程序将块作为 ZFS 实体实现。ZFS 是一个文件系统,它还具有卷管理器的功能。这与 Linux 系统不同,在 Linux 系统中,卷管理器(LVM)和文件系统(例如,ext3、ext4、xfs 和 btrfs)是分开的。ZFS 具有许多优于 ext4 的优点,包括改进的数据完整性检查。
OpenStack 块存储的 ZFS 后端仅支持基于 Solaris 的系统,例如 Illumos。虽然 ZFS 有一个 Linux 移植版本,但它未包含在任何标准的 Linux 发行版中,并且尚未与 OpenStack 块存储一起测试。与 LVM 一样,ZFS 本身不提供跨主机的复制,如果您的云需要能够处理存储节点故障,则需要在 ZFS 之上添加复制解决方案。