《Linux开源存储全栈详解-从Ceph到容器存储》
本内容是读书笔记,仅个人使用。联系侵删
C1
在由Linux支撑的众多开源软件中,与存储相关的软件占据了很大的比例,主要包括如下部分。- 内核自带的服务模块,如iSCSI Target、NVMe-oF Target。
- 各种内核支持的文件系统,如ext2/3/4、Btrfs、XFS等。
- 基于Linux开发的分布式存储系统,如Ceph、GlusterFS、Sheepdog等。
- 基于Linux的开源云计算管理软件,如OpenStack。
1.2 Linux开源存储系统方案介绍
1.2.1 Linux单节点存储方案
Linux本地文件系统
对于Linux操作系统中基于内核文件系统的支持,其实可以分为两大块:一是内核中虚拟文件系统、具体文件系统、内核通用块设备及各个I/O子系统的支持;二是Linux用户态与文件系统相关的管理系统,以及应用程序可以用的系统调用或库文件(Glibc)的支持。Linux远程存储服务
1)块设备服务
Linux常用的块设备服务主要基于iSCSI(Internet Small Computer System Interface)和NVMe over Fabrics。iSCSI协议是SCSI(Small Computer System Interface)协议在以太网上的扩展,一台机器通过iSCSI协议即可通过传输控制协议/网际协议(Transmission Control Protocol / Internet Protocol,TCP/IP)为其他客户提供共享的存储设备。NVMe over Fabrics则是NVMe协议在Fabrics上的延伸,主要的设计目的是让客户端能够更高效地访问远端的服务器上的NVMe盘2)文件存储服务
基于网络文件系统(Network File System,NFS)协议的服务,服务器端可以直接加载支持网络文件系统协议的daemon。网络文件系统协议最早是由Sun公司在1984年开发的,目前已经发展到了NFSv4。基于CIFS(Common Internet File System)的samba服务,使用这个服务可以向Windows客户端共享文件。Linux还有其他文件服务,如基于文件传输协议(File Transfer Protocol,FTP)的服务,这里不再赘述。另外在Linux系统中,如果用户熟悉SSH(Secure Shell)的一些命令,可以使用scp命令在不同Linux客户端进行文件的复制,或使用wget命令进行文件的下载。1.2.2 存储服务的分类
按照接口,存储服务可以分为3类:块存储服务、文件存储服务,以及对象存储服务。因为在对象存储中没有目录的概念,所以文件存储与对象存储的本质区别就是有无层次结构。1.2.3 数据压缩
2.Linux下开源数据压缩软件
1)FreeArc
FreeArc是一个开源的数据压缩软件,集成了多种数据压缩算法(如gzip、Multimedia、TrueAudio、Tornado、LZMA(Lempel-Ziv-Markov chain-Algorithm)、PPMD)和过滤器(如BCJ、DICT、DELTA、REP、LZP)。另外,FreeArc会根据文件类型自动选择最优的数据压缩算法,并支持数据恢复及算法加密(如AES +Twofish + Serpent)。FreeArc是目前压缩效率较高的数据压缩软件之一。2)7-Zip
7-Zip是一款开源数据压缩软件,其特点是使用了LZMA与LZMA2算法的7z格式,具有非常高的压缩比3)Snappy
它的目标不是最大限度地兼容其他压缩格式,而是提供高速的压缩速度和合理的压缩比。1.2.4 重复数据删除
1.2.5 开源云计算数据存储平台
1.2.6 存储管理和软件定义存储
1)控制平面
- VMware SPBM(Storage Policy Base Management),基于存储策略的管理。
- OpenStack Cinder,用于提供块存储服务。
- EMC ViPR,其目标是实现EMC存储、异构存储、商用硬件本地存储资源的存储虚拟化(包括互操作性)。
2)数据平面
数据平面这一层组成比较复杂,组成部分较多,有如下几部分。- 基于商用的硬件(Based on Commodity Hardware),这一类包含两大类:超融合架构(Hyper Converged Infrastructure,HCI),如VMware VSAN、EMC ScaleIO等;非超融合架构,如DELL Fluid Cache、HP StorVirtual等。
- Traditional SANStorage Area Network Storage Area Network /NSA,传统的外置磁盘阵列,包括SAN存储和NAS(Network Attached Storage)存储
- Cloud/Object Storage,作为应用的后端存储提供相关的存储资源。
1.2.7 开源分布式存储和大数据解决方案
常见的开源分布式存储软件,其中大部分可以在不同的操作系统上运行,主要部署于Linux操作系统上。- Hadoop。Hadoop是由Apache基金会所发布的开源分布式计算平台,起源于Google Lab所开发的MapReduce和Google文件系统。Hadoop由4个模块组成,即Hadoop Common、HDFS (Hadoop Distributed File System)、Hadoop YARN及Hadoop MapReduce。
- GlusterFS。GlusterFS是一个开源分布式存储系统,具有强大的横向扩展能力,能够灵活地结合物理、虚拟的云资源实现高可用(High Availability,HA)的企业级性能存储,借助TCP/IP或InfiniBand RDMA网络将物理分布的网络存储资源聚集在一起,并使用统一的全局命名空间来管理数据。
- Ceph。Ceph是一款开源分布式存储系统,Ceph的优点在于,它充分利用了集群中各个节点的存储能力与计算能力,在存储数据时会通过哈希算法计算出该节点的存储位置,从而使集群中负载均衡
- Sheepdog。Sheepdog是一个开源的分布式存储系统,于2009年由日本NTT实验室所创建,主要用于为虚拟机提供块设备服务。
1.2.8 开源文档管理系统
- DSpace。DSpace是一款专门的数字资源管理系统。该系统开放源代码且遵循BSD 3-Clause license,可以收集、保存、存储、索引各种格式、层次结构的数据。
- Epiware。Epiware是一款开源文档管理系统,主要面向企业文档管理,使用户能够安全地分享文档、创建计划及管理任务。
- OpenKM。OpenKM是一款基于Web的多角色的开源电子文档管理系统。它基于Tomcat Java企业级服务器,采用J2EE、Jackrabbit内容管理库和GWT等技术开发,并提供强大的管理功能
1.2.9 网络功能虚拟化存储
网络功能虚拟化(Network Functions Virtualization,NFV)在维基百科的定义是“使用虚拟化技术,将各个类别的网络节点功能虚拟化为连接在一起的通信服务”。NFV主要包括3个部分:NFVI(网络功能虚拟化基础设施)、VNF(虚拟网络功能)和MANO(NFV管理与编排)。2.2 存储介质的进化
2.2.1 3D NAND
Flash芯片容量结构从大到小可以分为Device、Target、Die/LUN、Plane、Block、Page、Cell。一个Device通常包含一个或多个Target,一个Target又包含若干个Die(或LUN),每个Die/LUN包含若干个Plane,每个Plane包含若干个Block,每个Block包含若干个Page,Cell是Page中的最小操作擦写读单元。2.2.2 3D XPoint
3D XPoint的市场定位很清晰,就是一种比机械硬盘更高级的数据存储方案。3D XPoint的定位介于DRAM与3D NAND之间,它的速度与耐久性能够达到内存的水平,密度与非易失性则偏向3D NAND,成本也介于两者之间2.3 存储接口协议的演变
NVMe或称NVMHCIS ( Non-Volatile Memory Host Controller Interface Specification,非易失性存储主机控制器接口标准).简单来说,NVMe就是能够使固态硬盘与主机通信速度更快的主机控制器接口规范NVMe-oF规范与NVMe规范大约有90%的内容相同,其实NVMe-oF只是在NVMe协议中的NVMe Transport部分进行了扩展,来支持InfiniBand、以太网及光纤通道等。2.4 网络存储技术
目前网络存储技术主要有DAS(Direct Attached Storage)、NAS、SAN、iSCSI (Internet SCSI)。DAS、NAS、SAN与iSCSI的区别如图2-9所示。2)NAS
NAS是指通过某一网络协议把多个存储设备和一群计算机相连接。NAS通过网络交换机连接存储系统和服务器,用户通过TCP/IP访问专门用于数据存储的私有网络,采用网络文件系统、HTTP、CIFS等标准的文件共享来实现文件级的数据共享。NAS为那些需要共享大量文件数据的企业提供了一个高效的、高可靠的、高性价比的解决方案。NAS的局限性在于,它会受到网络带宽和网络拥堵的影响。3)SAN
SAN是一种独立于TCP/IP网络之外的专用存储网络,目前一般提供2~4Gb/s的传输速率。由于其基础是一个专用网络,SAN的扩展性很强,不管是在一个SAN系统中增加一定的存储空间,还是增加几台服务器都非常方便。SAN的维护成本高昂,需要投入很多硬件成本,如FC交换机。4)iSCSI
为了降低使用SAN的成本,可以利用普通的数据网络来传输SCSI数据,实现和SAN相似的功能,同时系统的灵活性也得到了提高。iSCSI就是这样一种技术,它利用普通的TCP/IP网络来传输SCSI数据块。在iSCSI技术出现之后,SAN也出现了两种不同的实现方式,即光纤存储网络(FC SAN)和IP存储网络(IP SAN),我们通常所说的SAN指的就是FC SAN。相对FC SAN来说,IP SAN的成本要低很多,而且随着千兆网甚至万兆网的发展,iSCSI的速度相对SAN来说并没有太大的劣势。第3章 Linux存储栈
3.7 LVM
LVM通过在操作系统与物理存储资源之间引入逻辑卷(Logical Volume)的抽象,来解决传统磁盘分区管理工具的问题。LVM将众多不同的物理存储器资源(物理卷(Physical Volume),如磁盘分区)组成卷组(Volume Group,VG),该卷组可以理解为普通系统中的物理磁盘。但是卷组上不能创建或安装文件系统,而是需要LVM先在卷组中创建一个逻辑卷,然后将ext3、ReiserFS等文件系统安装在这个逻辑卷上,我们可以在不重新引导系统的前提下通过在卷组里划分额外的空间,来为这个逻辑卷动态扩容。因此LVM的存储模型可以理解为如图3-8所示的层次结构。由4个磁盘分区所组成的逻辑卷管理系统如图3-9所示,LVM在由这4个磁盘分区组成的卷组上创建了多个逻辑卷作为逻辑分区,如果需要为一个逻辑分区扩充存储空间,那么只需从剩余空间中分配一些给该逻辑分区使用即可。3.8 bcache
3.9 DRBD
第4章 存储加速
第7章 分布式存储与Ceph
7.1 Ceph体系结构
1)Ceph存储集群
Ceph基于可靠的、自动化的、分布式的对象存储(Reliable,Autonomous,Distributed Object Storage,RADOS)提供了一个可无限扩展的存储集群2)基础库librados
Ceph客户端用一定的协议和存储集群进行交互,Ceph把此功能封装进了librados库,这样基于librados库我们就能创建自己的定制客户端了。3)高层应用接口RADOS GW、RBD与Ceph FS
4)应用层
7.1.1 对象存储
严格意义上讲,Ceph只提供对象存储接口,所谓的块存储接口和文件系统存储接口都算是对象存储接口应用程序。不同于传统文件系统提供的open/read/write/close/lseek,对象存储只提供put/get/delete,对象存储的逻辑单元就是对象而不是我们通常概念中的文件7.1.6 Monitor
Ceph客户端读或写数据前必须先连接到某个Ceph监视器上,获得最新的集群运行图副本。一个Ceph存储集群只需要单个监视器就能运行,但它就成了单一故障点(即如果此监视器宕机,Ceph客户端就不能读或写数据了)。为增强其可靠性和容错能力,Ceph支持监视器集群。在一个监视器集群内,延时及其他错误会导致一到多个监视器滞后于集群的当前状态。因此,Ceph的各监视器例程必须与集群的当前状态达成一致。7.4 Ceph可靠性
Ceph消除了这个中心化的组件使客户端可以和OSD的守护进程直接打交道。为了去中心化,Ceph使用CRUSH算法来保证数据在后端OSD上的分布式存储,Ceph客户端和OSD守护进程都使用CRUSH算法来有效地计算出对象存储的位置,而不是基于一个中心化的查找表格,而且随着OSD守护进程拓扑的变化,比如有新节点加入或旧节点退出,CRUSH算法会重新在OSD上分布数据,不会由于单个OSD的故障而影响整个集群的存储。Ceph还利用Monitor集群来保证集群结构的高可靠性,Ceph客户端在读/写数据之前,必须与Monitor通信来获得最新的集群运行图的副本。原则上来说,一个Ceph的存储集群可以只使用一个Monitor,然而这就相当于引入了单点故障,如果这个单一的Monitor宕机,则Ceph客户端将无法正常读/写数据。因此为了保证Ceph的高可靠性和容错性,Ceph支持Monitor集群来消除该单点故障,当一个Monitor失效时,由其他Monitor来接管。7.5 Ceph中的缓存
缓存技术在Ceph中也同样被广泛使用:在客户端,缓存用来暂存用户数据;在RADOS GW中,缓存用来暂存各种元数据;在BlueStore中,缓存用来暂存BlueStore中的元数据(包括地址映射等信息)及部分用户数据。由于缓存技术基本思想大致一样,所以这里只对客户端缓存进行介绍。