块存储

典型设备:磁盘阵列,硬盘

块存储主要是将裸磁盘空间整个映射给主机使用的,例如磁盘阵列里面有5块硬盘(为方便说明,假设每个硬盘1G),然后可以通过划逻辑盘、做Raid、或者LVM(逻辑卷)等种种方式逻辑划分出N个逻辑的硬盘。假设划分完的逻辑盘也是5个,每个也是1G,但是这5个1G的逻辑盘已经与原来的5个物理硬盘意义完全不同了。例如第一个逻辑硬盘A里面,可能第一个200M是来自物理硬盘1,第二个200M是来自物理硬盘2,所以逻辑硬盘A是由多个物理硬盘逻辑虚构出来的硬盘。 接着块存储会采用映射的方式将这几个逻辑盘映射给主机,主机上面的操作系统会识别到有5块硬盘,但是操作系统是区分不出到底是逻辑还是物理的,它一概就认为只是5块裸的物理硬盘而已,跟直接拿一块物理硬盘挂载到操作系统没有区别的,至少操作系统感知上没有区别。然后,操作系统还需要对挂载的裸硬盘进行分区、格式化后,才能使用,与平常主机内置硬盘的方式完全无异。

块存储有两种常见的形式,直接连接存储DAS(Direct Attached Storage)和存储区域网络SAN(Storage Area Network)

块存储是数据存储的最古老形式,数据都存储在固定长度的块或多个块中

块存储是我们最常用的一种存储模式。比如个人PC上的硬盘,服务器上的硬盘,外置设备通过SCSI或者FC接口直接连接到电脑上的。

块存储可以通过raid的方法,通过冗余备份,提高数据的安全性

应用程序不能直接使用块存储,必须先进行格式化,格式化成某种文件系统,通过文件系统使用存储设备

文件存储

典型设备:FTP、NFS服务器

好比是一个共享文件夹,自带文件系统,因此是应用程序可以直接使用的存储,比如NFS,就是直接把文件服务器的某个目录挂载到本地的某个目录,应用程序直接操作本地的这个目录,等于操作远程服务器对应的目录

实现文件存储的方式有很多,其中比较常用的有以下的几种:ftp协议、nfs协议、samba协议等。

块存储和文件存储异同

  1. 数据传输方式不同:块存储依靠SCSI或者ISCSI接口,以块方式交换数据,数据传输速度快;文件存储依靠TCP/IP协议栈进行数据传输,网络带宽是I/O的性能瓶颈
  2. 文件系统的位置:NAS和SAN最本质的区别就是文件管理系统在哪里,如图所示,SAN结构中,文件管理系统(FS)分别在每一个应用服务器上面,而NAS则是每个应用服务器通过网络共享协议,使用同一个文件管理系统。即NAS和SAN存储系统的区别就是NAS有自已的文件管理系统

存储:块存储/文件存储/对象存储_文件存储

3. 使用方式不同:块存储设备使用的时候,还需要进一步进行分区,将设备格式为某种文件系统才可以继续使用;而文件存储就相当于你多了一个共享文件夹,文件存储带着自己本身的文件系统

对象存储

对象是系统中数据存储的基本单位,一个对象实际上就是文件的数据和一组属性信息(Meta Data)的组合,这些属性信息可以定义基于文件的RAID参数、数据分布和服务质量等,而传统的存储系统中用文件或块作为基本的存储单位,在块存储系统中还需要始终追踪系统中每个块的属性。对象通过与存储系统通信维护自己的属性。在存储设备中,所有对象都有一个对象标识,通过对象标识OSD命令访问该对象。通常有多种类型的对象,存储设备上的根对象标识存储设备和该设备的各种属性,组对象是存储设备上共享资源管理策略的对象集合等。

三者之间异同比较

对象存储相比块存储、文件存储的一个最本质的区别是无层次结构。一般的存储(比如你自己的PC的文件系统)是有一个目录树概念的,要找到一个文件需要先找到这个文件所属的目录。而对象存储是没有文件目录树这个概念的,所有的数据都在同一个层次中,仅仅通过数据的唯一地址标识来识别并查找数据。

存储类型

数据传输方式

适应场景

优点

块存储

SCSI/ISCSI接口

小型机房

速度快

文件存储

NFS/FTP等

局域网环境

可扩展性高

对象存储

http协议

互联网环境,异地存储

速度快,且扩展性高,高可用

  • 块存储: 是和主机打交道的, 如插一块硬盘,应用程序必须通过文件系统来操作
  • 文件存储: NAS, 网络存储, 用于多主机共享数据
  • 对象存储: 跟你自己开发的应用程序打交道, 如网盘,应用程序可以通过http协议进行文件的读写操作等

文件系统

  • 本地文件系统:Ext4、XFS、FAT32等
  • 分布式文件系统:GlusterFS、CephFS、HDFS等 曾经使用过ceph的RADOS(Reliable Autonomic Distributed Object Store, RADOS)
  • 集群文件系统

数据库可以管理数据;文件系统也可以管理数据。比如MySQL的InnoDB引擎就可以直接管理裸盘上的数据

数据库可以使用自己文件系统,也可以使用操作系统的文件系统

有一类应用是需要存储直接裸盘映射的,例如数据库。因为数据库需要存储裸盘映射给自己后,再根据自己的数据库文件系统来对裸盘进行格式化的,所以是不能够采用其他已经被格式化为某种文件系统的存储的。此类应用更适合使用块存储。当然现在的数据库也可以使用文件系统,不直接使用裸盘。