文件存储:是最易于理解的存储类型,有传统的
目录结构
,抽象文件语义 。
块存储:对外提供块存储语义,挂载在操作系统上就像一个块设备,在云上的产品形态是
云硬盘
。
对象存储:本质就是是
kv存储
,无目录结构。
一句话:块存储--裸盘读写。文件存储--文件读写。对象存储--键值对存储。
相比SAN(块)和NAS(文件存储),对象存储有哪些优势?
不难看出对象存储的核心优势所在:对象存储直接提供API给应用使用,采用扁平化的结构管理所有桶(Bucket)和对象。每个桶和对象都有一个全局唯一的ID,根据ID可快速实现对象的查找和数据的访问。
通过本文你将了解:
块、文件、对象存储概述_哔哩哔哩_bilibili
存储发展史
(
Ceph分布式存储详述 - 知乎
)
企业中使用存储按照其功能,使用场景,一直在持续发展和迭代,大体上可以分为四个阶段:
-
DAS:
Direct Attached Storage,即直连存储,第一代存储系统,通过SCSI总线扩展至一个外部的存储,磁带整列,作为服务器扩展的一部分;
-
NAS:
Network Attached Storage,即网络附加存储,通过网络协议如NFS远程获取后端文件服务器共享的存储空间,将文件存储单独分离出来;
-
SAN:
Storage Area Network,即存储区域网络,分为IP-SAN和FC-SAN,即通过TCP/IP协议和FC(Fiber Channel)光纤协议连接到存储服务器;
-
Object Storage:
即对象存储,随着大数据的发展,越来越多的图片,视频,音频静态文件存储需求,动则PB以上的存储空间,需无限扩展。
DAS、NAS(nfs,cifs)、SAN,Samba(cifs)介绍和区别:
https://blog.csdn.net/bandaoyu/article/details/122543752
存储的发展,根据不同的阶段诞生了不同的存储解决方案,每一种存储都有它当时的历史诞生的环境以及应用场景,解决的问题和优缺点。
综上、企业中不同场景使用的存储,使用表现形式无非是这三种:磁盘(块存储设备),挂载至目录像本地文件一样使用(文件共享存储),通过API向存储系统中上传PUT和下载GET文件(对象存储)。
存储的三种使用表现形式
块存储:(
提供虚拟磁盘,
ceph 虚拟成一个磁盘,文件系统在上层服务器上把ceph集群当成一个磁盘用)
文件存储:(ceph 虚拟成一个文件系统,可以在服务器上挂载成一个目录(文件夹),用户可以直接在文件夹里面创建和删改数据)
对象存储:
01 块存储(提供虚拟磁盘)
1.1 概述
块存储是将裸磁盘空间整个映射给主机使用的,比如磁阵中有3块1T硬盘,可以选择直接将裸设备给操作系统使用(此时识别出3个1T的硬盘),也可以划分经过RAID、逻辑卷等方式划分出多个逻辑的磁盘供系统使用(比如划分为6个500G的磁盘),主机层面操作系统识别出硬盘,但是操作系统无法区分这些映射上来的磁盘到底是真正的物理磁盘还是二次划分的逻辑磁盘,操作系统接着对磁盘进行分区、格式化,与我们服务器内置的硬盘没有什么差异。
块存储不仅仅是直接使用物理设备,间接使用物理设备的也叫块设备,比如虚机创建虚拟磁盘。VMware、VirtualBox都可以创建虚拟磁盘,虚机创建的磁盘格式包括raw、qcow2等,这与主机使用的裸设备不一样,且有不同的应用场景。
1.2 特点
1、通过RAID与LVM等手段,对数据提供了保护(RAID可实现磁盘的备份和校验,LVM可以做快照);
2、RAID将多块廉价的硬盘组合起来,构建大容量的逻辑盘对外提供服务,性价比高;
3、写数据时,由于是多块磁盘组合成的逻辑盘,可以并行写入,提升了读写效率;
4、很多时候块存储采用SAN架构组网,传输速率以及封装协议的原因,使得传输速度与读写速率得到提升。
1、采用SAN架构组网时,需要额外为主机购买光纤通道卡,还要买光纤交换机,造价成本高;
2、不利于不同操作系统主机间的数据共享,因为操作系统使用不同的文件系统,格式化完成后,不同文件系统间的数据是无法共享的。
1.3 典型设备
磁盘,磁盘阵列
1.4 应用场景
一般用于主机的直接存储空间和数据库应用的存储分两种形式:
DAS:一台服务器一个存储,多机无法直接共享,需要借助操作系统的功能,如共享文件夹;
SAN:金融电信级别,成本较高,但是可提供高性能和高可靠服务。
云存储的块存储:具备SAN的优势,成本低,可提供弹性拓容,存储介质可选普通硬盘和SSD。
1.5 主流技术
Microsoft:Azure Block Storage
Google:Google Block Storage
Amazon:Elastic Block Storag(EBS)
OpenStack:Cinder
其他:Ceph RBD、sheepdog
02 文件存储
2.1 概述
为了克服块存储无法共享的问题,所以就有了文件存储。
文件存储也有软硬一体化的设备,用一台普通服务器/笔记本,只要安装上合适的操作系统与软件,就可以对外提供FTP与NFS服务。
2.2 特点
1、造价较低:只需要普通机器和普通网络即可满足需求,不需要专用的SAN网络;
2、方便文件共享。
1、读写速率低,传输速率慢:以太网,上传下载速度较慢,另外读写操作都分布到单台服务器,与磁阵的并行写相比性能差距较大。
2.3 典型设备
FTP、NFS服务器
2.4 应用场景
与偏向底层的块存储不同,文件存储上升到了应用层,一般指的是NAS。
一套网络存储设备,通过TCP/IP进行访问,协议为NFSv3/v4由于通过网络,且采用上层协议,因此开销大,延时肯定比块存储高,一般用于多个云服务器共享数据,如存放共享文件等。
2.5 主流技术
Microsoft;Windows Azure文件共享存储
Google:Google FileStorage(GFS)
Amazon:Elastic File Storage(EFS)
OpenStack:Swift
其他:CephFS、HDFS、NFS、CIFS、Samba、FTP
03 对象存储
3.1 概述
之所以出现对象存储,是为了克服块存储与文件存储的缺点,发扬他俩各自的优点。简单地说,块存储读写块,不利于共享,文件存储读写慢,利于共享。
为什么对象存储兼具块存储与文件存储的好处,还要使用块存储或文件存储呢?
1、有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据库需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化,所以是不能够采用其他已经被格式化为某种文件系统的存储的。数据库更适合使用块存储。
2、对象存储的成本比普通的文件存储高,需要购买专门的对象存储软件以及大容量硬盘。
3.2 特点
1、结合了块存储与文件存储的优点。
1、数据库等追求高性能的应用更适合采用块存储。
2、对象存储的成本比普通的文件存储还是较高。
3.3 典型设备
内置大容量硬盘的分布式服务器
3.4 应用场景
对象具备块存储的高速以及文件存储的共享等特性,有自己的CPU、内存、网络和磁盘,比块存储和文件存储更上层。云服务商一般提供用户文件上传下载读取的REST API,方便应用集成此类服务。
3.5 主流技术
Microsoft:Azure Storage
Google:Google Cloud Storage
Amazon:Simple Storage Service(S3)
OpenStack:Swift
其他:Ceph OSD
04 三种存储的区别和对比
这三者的本质差别是使用数据的“用户”不同:块存储的用户是可以读写块设备的软件系统,例如传统的文件系统、数据库;文件存储的用户是自然人;对象存储的用户则是其它计算机软件。
块存储、文件存储、对象存储这三者的本质差别是什么? https://www.zhihu.com/question/21536660/answer/1159036357
4.1 块存储 vs 文件存储
物理块与文件系统之间的关系图:映射关系:扇区->物理块->逻辑块->文件系统
块级备份:块级备份是指物理块复制,效率高,实时性强,备份时间短,且增量备份时,只备份修改过的物理块。
文件级备份:文件级备份是指在指定某些文件进行备份时,首先会查找每个文件逻辑块,其次物理块,由于逻辑块是分散在物理块上,而物理块也是分散在不同扇区上。需要一层一层往下查找,最后才完成整个文件复制。文件级备份比较费时间,效率不高,实时性不强,备份时间长,且增量备份时,单文件某一小部分修改,不会只备份修改部分,而是整个文件都备份。
4.2 文件存储 vs 对象存储
对象存储:
1、大多数对象存储的实现本质是键值对存储系统;
2、采用扁平化的管理方式(根据键找到值);
3、值可以是任何东西,可以是小文件(小二进制片段),可以是大文件;
4、对象存储一般不支持追加写和更新,面向的是一次写入,多次读取的需求场景;
5、多采用Restful API。
文件存储:
1、不考虑底层到底是怎么实现的;
2、采用目录结构管理数据;
3、一般要尽可能兼容Posix文件系统API。
详解块存储、文件存储、对象存储区别 - 知乎
分布式块存储、文件存储、对象存储的区别
(摘自:
带你读《存储漫谈Ceph原理与实践》第一章分布式存储概述1.2各主流分布式方案对比(一)-https://developer.aliyun.com/article/794617?spm=a2c6h.13262185.profile.35.8ef36645gCBEVX
)
分布式存储系统种类繁多,通常按照使用场景,可将分布式存储系统划分为分布式块存储、分布式文件存储以及分布式对象存储3类,如图 1-6所示。
图 1-6分布式存储系统分类
块存储将裸磁盘空间直接映射给主机使用,主机层面操作系统识别出磁盘后,可对磁盘进行分区、格式化文件系统或者直接进行裸设备读写。块存储使用线性地址空间,不关心数据的组织方式以及结构,读写速度更快,但共享性较差。
文件存储将文件系统直接挂载给主机使用,主机层面操作系统可对挂载后的文件系统 直接进行读写,读写操作遵循POSIX(PortableOperatingSystemInterfaceofUNIX)语义,类似操作本地文件系统。文件存储使用树状结构以及路径访问方式,更方便理解、记忆,更适合结构化数据的存取,共享性更好,但读写性能较差。
对象存储介于块存储与文件存储之间,以restfulapi或者客户端 sdk的形式供用户使用,更适合非结构化数据的存取。对象存储使用统一的底层存储系统,管理文件以及底层介质的组织结构,然后为每个文件分配一个唯一的标识,用户需要访问某个文件,直接提供文件的标识即可。
理解Ceph的三种存储接口:块设备、文件系统、对象存储
一. Ceph的块设备存储接口
首先,什么是块设备?
块设备是i/o设备中的一类,是将信息存储在固定大小的块中,每个块都有自己的地址,还可以在设备的任意位置读取一定长度的数据。
看不懂?那就暂且认为块设备就是硬盘或虚拟磁盘。
查看下Linux环境中的设备:
# lsblk
上面的/dev/sda、/dev/sdb和/dev/hda都是块设备文件,这些文件是怎么出现的呢?
当给计算机连接块设备(硬盘)后,系统检测的有新的块设备,该类型块设备的驱动程序就在/dev/下创建个对应的块设备设备文件,用户就可以通过设备文件使用该块设备了。
它们怎么有的叫 sda?有的叫 sdb?有的叫 hda?
以sd开头的块设备文件对应的是SATA接口的硬盘,而以hd开头的块设备文件对应的是IDE接口的硬盘。
那SATA接口的硬盘跟IDE接口的硬盘有啥区别?你只需要知道,IDE接口硬盘已经很少见到了,逐渐被淘汰中,而SATA接口的硬盘是目前的主流。而sda和sdb的区别呢?当系统检测到多个SATA硬盘时,会根据检测到的顺序对硬盘设备进行字母顺序的命名。
怎么还有的叫 rbd1 和 rbd2 呢?
被你发现了,rbd
就是我们压轴主角了。
rbd
就是由Ceph集群提供出来的块设备。
可以这样理解,
sda和hda都是通过数据线连接到了真实的硬盘,而rbd是通过网络连接到了Ceph集群中的一块存储区域
,往rbd设备文件写入数据,最终会被存储到Ceph集群的这块区域中。
那么块设备怎么用呢?
我们打个比方,一个块设备是一个粮仓,数据就是粮食。农民伯伯可以存粮食(写数据)了,需要存100斤玉米,粮仓(块设备)这么大放哪里呢,就挨着放(顺序写),又需要存1000斤花生,还是挨着放。又需要存……后来,农民伯伯来提粮食(读数据)了,他当时存了1000斤小麦,哎呀妈呀,粮仓这么大,小麦在哪里啊?仓库管理员找啊找,然后哭晕在了厕所!
新管理员到任后,想了个法子来解决这个问题,用油漆把仓库划分成了方格状,并且编了号,在仓库门口的方格那挂了个黑板,当农民伯伯来存粮食时,管理员在黑板记录,张三存了1000斤小麦在xx方格处。后来,农民伯伯张三来取粮食时,仓库管理员根据小黑板的记录很快提取了粮食。
故事到此为止了,没有方格和黑板的仓库(块设备)称为
裸设备
。由上例可见,裸设备对于用户使用是很不友好的,直接导致了旧仓库管理员的狗带。例子中划分方格和挂黑板的过程其实是在块设备上构建文件系统的过程,文件系统可以帮助块设备对存储空间进行条理的组织和管理,于是新管理员通过文件系统(格子和黑板)迅速找到了用户(农民伯伯张三)存储的数据(1000斤小麦)。
针对多种多样的使用场景,衍生出了很多的文件系统,有的文件系统能够提供更好的读性能,有的文件系统能提供更好的写性能。我们平时常用的文件系统如xfs、ext4是读写性能等各方面比较均衡的通用文件系统。
能否直接使用不含有文件系统块设备呢?
可以的,xfs和ext4等通用的文件系统旨在满足大多数用户的存储需求,所以在数据存储的各方面的性能比较均衡。然而,很多应用往往并不需要这种均衡,而需要突出某一方面的性能,如小文件的存储性能。此时,xfs、ext4等通用文件系统如果不能满足应用的需求,应用往往会在裸设备上实现自己的数据组织和管理方式。
简单的说,就是应用为了强化某种存储特性而实现自己定制的数据组织和管理方式,而不使用通用的文件系统。
Ceph块设备接口怎么使用?
在Ceph集群中创建块设备:
总结一下,
块设备可理解成一块硬盘
,用户可以直接使用不含文件系统的块设备,也可以将其格式化成特定的文件系统,由文件系统来组织管理存储空间,从而为用户提供丰富而友好的数据操作支持。
二. Ceph的文件系统存储接口
什么是Ceph的文件系统接口?
还记得上面说的块设备上的文件系统吗,用户可以在块设备上创建xfs文件系统,也可以创建ext4等其他文件系统。
如图1,Ceph集群实现了自己的文件系统来组织管理集群的存储空间,用户可以直接将Ceph集群的文件系统挂载到用户机上使用。
Ceph有了块设备接口,在块设备上完全可以构建一个文件系统,那么Ceph为什么还需要文件系统接口呢?(
Ceph
块设备接口读写性能好,但不具备共享性。
Ceph的文件系统接口读写性能差,但具有共享性
)
主要是因为应用场景的不同,Ceph的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在OpenStack上作为虚拟磁盘,而Ceph的文件系统接口读写性能较块设备接口差,但具有优异的共享性。
想了解更多?快去查查
SAN
和
NAS
。
一文看懂:NAS网络存储与SAN、DAS的区别
https://news.mydrivers.com/1/534/534373.htm
What is a SAN and how does it differ from NAS?
https://www.networkworld.com/article/3256312/what-is-a-san-and-how-does-it-differ-from-nas.html
为什么Ceph的块设备接口不具有共享性,而Ceph的文件系统接口具有呢?
对于Ceph的块设备接口,如图2,文件系统的结构状态是维护在各用户机内存中的,假设Ceph块设备同时挂载到了用户机1和用户机2,当在用户机1上的文件系统中写入数据后,更新了用户机1的内存中文件系统状态,最终数据存储到了Ceph集群中,但是此时用户机2内存中的文件系统并不能得知底层Ceph集群数据已经变化而维持数据结构不变,因此用户无法从用户机2上读取用户机1上新写入的数据。
对于Ceph的文件系统接口,如图3,文件系统的结构状态是维护在远端Ceph集群中的,Ceph文件系统同时挂载到了用户机1和用户机2,当往用户机1的挂载点写入数据后,远端Ceph集群中的文件系统状态结构随之更新,当从用户机2的挂载点访问数据时会去远端Ceph集群取数据,由于远端Ceph集群已更新,所有用户机2能够获取最新的数据。
Ceph的文件系统接口使用方式?
将Ceph的文件系统挂载到用户机目录
总结一下,Ceph的文件系统接口弥补了Ceph的块设备接口在共享性方面的不足,Ceph的文件系统接口符合POSIX标准,用户可以像使用本地存储目录一样使用Ceph的文件系统的挂载目录。还是不懂?
这样理解吧,无需修改你的程序,就可以将程序的底层存储换成空间无限并可多处共享读写的Ceph集群文件系统。
三. Ceph的对象存储接口
首先,通过图4来看下对象存储接口是怎么用的?
简单了说,使用方式就是通过http协议上传下载删除对象(文件即对象)。
老问题来了,有了块设备接口存储和文件系统接口存储,为什么还整个对象存储呢?(对象存储平衡了读写性能和共享性)
往简单了说,Ceph的块设备存储具有优异的存储性能但不具有共享性,而Ceph的文件系统具有共享性然而性能较块设备存储差,为什么不权衡一下存储性能和共享性,整个具有共享性而存储性能好于文件系统存储的存储呢,对象存储就这样出现了。
对象存储为什么性能会比文件系统好?
原因是多方面的,主要原因是
对象存储组织数据的方式相对简单
,只有bucket和对象两个层次(对象存储在bucket中),对对象的操作也相对简单。而文件系统存储具有复杂的数据组织方式,目录和文件层次可具有无限深度,对目录和文件的操作也复杂的多,因此
文件系统存储在维护文件系统的结构数据时会更加繁杂
,从而导致文件系统的存储性能偏低。
Ceph的对象存储接口怎么用呢?
Ceph的对象接口符合亚马逊S3接口标准和OpenStack的Swift接口标准,可以自行学习这两种接口。
Amazon S3 简介
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/Introduction.html
Openstack Swift 原理、架构与 API 介绍
https://www.ibm.com/developerworks/cn/cloud/library/1310_zhanghua_openstackswift/index.html
总结一下,
文件系统存储具有复杂的数据组织结构,能够提供给用户更加丰富的数据操作接口,而对象存储精简了数据组织结构,提供给用户有限的数据操作接口,以换取更好的存储性能。
对象接口提供了REST API,非常适用于作为web应用的存储。
四. 总结
概括一下,块设备速度快,对存储的数据没有进行组织管理,但在大多数场景下,用户数据读写不方便(以块设备
位置offset + 数据的length
来记录数据位置,读写数据)。而在块设备上构建了文件系统后,文件系统帮助块设备组织管理数据,数据存储对用户更加友好(以
文件名
来读写数据)。Ceph文件系统接口解决了“Ceph块设备+本地文件系统”不支持多客户端共享读写的问题,但由于文件系统结构的复杂性导致了存储性能较Ceph块设备差。对象存储接口是一种折中,保证一定的存储性能,同时支持多客户端共享读写。
理解Ceph的三种存储接口
https://www.jianshu.com/p/2246464306b2
虚拟座谈会:有关分布式存储的三个基本问题
https://www.infoq.cn/article/virtual-forum-three-basic-issues-about-distributed-storage
玩转 Ceph 的正确姿势
https://www.cnblogs.com/me115/p/6366374.html