原文:http://www.hengtianyun.com/download-show-id-101.html
块存储,简单来说就是提供了块设备存储的接口。用户需要把块存储卷附加到虚拟机(或者裸机)上后才可以与其交互。这些卷都是持久的,它们可以被从运行实例上解除或者重新附加而数据保持完整不变。OpenStack 中的实例是不能持久化的,需要挂载 volume,在 volume 中实现持久化。Cinder 就是提供对 volume 实际需要的存储块单元的实现管理功能。
LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelsha- gen在Linux 2.4内核上实现。LVM将一个或多个硬盘的分区在逻辑上集合,相当于一个大硬盘来使用,当硬盘的空间不够使用的时候,可以继续将其它的硬盘的分区加入其中,这样可以实现磁盘空间的动态管理,相对于普通的磁盘分区有很大的灵活性。
与传统的磁盘与分区相比,LVM为计算机提供了更高层次的磁盘存储。它使系统管理员可以更方便的为应用与用户分配存储空间。在LVM管理下的存储卷可以按需要随时改变大小与移除(可能需对文件系统工具进行升级)。LVM也允许按用户组对存储卷进行管理,允许管理员用更直观的名称(如“sales”、 “development”)代替物理磁盘名(如“sda”、“sdb”)来标识存储卷。
Device-mapper是一种支持逻辑卷管理的通用设备映射机制,为存储资源管理的块设备驱动提供了一个高度模块化的内核架构。LVM是基于Device-mapper的用户程序实现。
Device-mapper在内核中它通过一个模块化的Target Driver插件实现对IO请求的过滤或者重定向工作,当前已经实现的Target Driver插件包括软Raid、软加密、逻辑卷条带、多路径、镜像、快照等。整个 device mapper 机制由两部分组成–内核空间的 device mapper 驱动、用户空间的device mapper 库以及它提供的 dmsetup 工具。内核中主要提供完成这些策略所需要的机制。Device-mapper 用户空间相关部分主要负责配置具体的策略和控制逻辑,比如逻辑设备和哪些物理设备建立映射,怎么建立这些映射关系等等,而具体过滤和重定向 IO 请求的工作由内核中相关代码完成。
LVM使得文件系统可以跨多个磁盘,因此大小不会受物理磁盘的限制。可以在系统运行状态下动态地扩展文件系统大小。可以增加新磁盘到 LVM 的存储池中。可以镜像的方式冗余重要数据到多个物理磁盘上。还能很方便地导出整个卷组,并导入到另外一台机器上。
然而LVM缺点也是明显的,当卷组中的一个磁盘损坏时,整个卷组都会受影响。仅支持有限个文件系统类型的减小操作(ext3不支持减少文件系统大小的操作)。因为加入了额外的操作,存储性能会受影响。
存储区域网络(SAN)是一种高速网络或子网络,提供在计算机与存储系统之间的数据传输。存储设备是指一张或多张用以存储计算机数据的磁盘设备。一个 SAN 网络由负责网络连接的通信结构、负责组织连接的管理层、存储部件以及计算机系统构成,从而保证数据传输的安全性和力度。
大部分SAN使用SCSI协议在服务器和存储设备之间传输和沟通,通过在SCSI之上建立不同镜像层,可以实现存储网络的连接。常见的有iSCSI,FCP,Fibre Channel over Ethernet等。
SAN通常需要在专用存储设备中建立,而iSCSI是基于TCP/IP的SCSI映射,通过iSCSI协议和Linux iSCSI项目我们可以在常见的PC机上建立SAN存储。
SAN有两个较大的缺陷:成本和复杂性,特别是在光纤信道中这些缺陷尤其明显。使用光纤信道的情况下,合理的成本大约是1千兆或者两千兆大概需要五万到六万美金。从另一个角度来看,虽然新推出的基于iSCSI的SAN解决方案大约只需要两万到三万美金,但是其性能却无法和光纤信道相比较。在价格上的差别主要是由于iSCSI技术使用的是现在已经大量生产的吉比特以太网硬件,而光纤通道技术要求特定的价格昂贵的设备。
在面对极具弹性的存储需求和性能要求下,单机或者独立的SAN越来越不能满足企业的需要。分布式块存储可以为任何物理机或者虚拟机提供持久化的块存储设备,管理块设备的创建、删除和attach/deattach。支持强大的快照功能,快照可以用来恢复或者创建新的块设备。分布式存储系统能够提供不同IO性能要求的块设备。能够满足动态扩展的要求。
目前,开源的分布式块存储有Ceph,GlusterFS,Sheepdog等。与Ceph相比,最大优势就是代码短小好维护和hack的成本很小。Sheepdog也有很多Ceph不支持的特性,比如说Multi-Disk, Cluster-wide Snapshot等。
在文中,日本NTT的研究人员对比了sheepdog,glusterfs以及ceph在各种情况下的读写性能,这份测试在今年的5月份的日本openstack大会上公布。在大部分情况下,sheepdog的读写速度都比glusterfs以及ceph表现的出色。
Cinder是OpenStack中提供块存储服务的API框架。它并没有实现对块设备的管理和实际服务,而是为后端不同的存储结构提供了统一的接口[2],不同的块设备服务厂商在Cinder中实现其驱动支持以与OpenStack进行整合。后端的存储可以是DAS、NAS、SAN,对象存储或者分布式文件系统。Cinder的块存储数据完整性、可用性保障是由后端存储提供的。