从Openfiler引出的存储体系学习

刚学习与实践完企业网络不久,最近终于还是遇上了存储领域的项目,一个搭建NAS存储的项目需求。于是开始了从下而上的存储体系的学习。


一开始找了两个开源的NAS实现:FreeNASOpenFiler,都安装部署后在应用层上溜了一圈。发现主要功能和逻辑几乎都一样:对块设备池化管理,再从池中划分出逻辑卷(是不是联想到了LVM?);对外再发布文件级别的NFSSMBFTP  发布块级别的iSCSI协议接口;另外还有高可用方案和快照的实现。从活跃度来说,应该是FreeNAS更活跃,但项目里定了使用OpenFiler的基调,所以这次的学习还是以OpenFiler来展开。


首先看看OpenFiler的架构图(引用于OpenFiler官网文档http://www.openfiler.com/products/openfiler-architecture):

从Openfiler引出的存储体系学习_第1张图片

这架构图其实也代表了NAS系统的主线功能,对我而言还引出了大部分存储储存领域的内容,后续有机会我再另开文章尝试逐块详细讲解。


简单讲解一下这架构图,从下而上:


第一层


该层是块设备层,分为物理块设备和虚拟块设备。物理块设备即为存储控制器是物理存在于主机之内,如我们家用主板上的SATA控制器连接多块SATA硬盘;虚拟块设备即存储控制器为软件实现,如iSCSI,是SCSITCP/IP上的实现,控制器也是软件实现在TCP/IP上,存储实体由网络对端提供。


通过装载块设备,操作系统上现在已经能看到挂载的块设备了,如:/dev/sda,/dev/sdb

 

现在再通往上一层,这里有两个上层入口,一个是直接上达DVA层,另一个是先上达Soft RAIDReplication阁层再到DVA

从Openfiler引出的存储体系学习_第2张图片

一层阁层

“软RAID”顾名思义是软件实现的RAID(磁盘阵列),例如将两个块设备/dev/sda+/dev/sdb创建为RAID1模式的块设备/dev/raida,从而提供数据冗余功能。


“远程块复制”是提供块设备高可用的实现。意思是同步本地块设备数据到远端上的块设备,待本端发生灾难时,数据也还存在于远端,那时再起相应的应用即可恢复服务,即为主备模式。DRBD(远程块复制的一种实现)同时也支持双向同步,但要实现应用上的主主模式,还需要上层系统的支持,如文件系统必须使用集群文件系统,如GFSGlobalFileSystem),不然文件系统中的元数据(meta-data)会立即冲突,使文件系统破坏。若还使用了LVM,理应还需要使用LVM的分布式模式。该功能也是在/dev/下虚拟出一个块设备,如:/dev/drbda

 

第二层

DVA层,其实就是LVM。管理下面的所有块设备(物理块设备、虚拟块设备、软RAID块设备、远程块复制块设备)(LVM中称这为PhysicalVolume),将其集中池化,即都放进一个或多个存储池(LVM中称之为VolumeGroup),形成逻辑上灵活管理的存储池。灵活是表现在池容量的扩展只需要往池里加块设备,相应的池容量就得到了扩展,上层逻辑卷(LogicalVolumeI)向下只对接所在的池。池容量扩展了,池里也可以继续创建更多的逻辑卷,或继续扩展已有逻辑卷的容量了

 

第三层

逻辑卷和PiTC卷。也就是LVM的上层实现部分。


逻辑卷从下层的DVA存储池中根据上层应用需求划分出相应容量的存储,往上以逻辑卷形式提供给上层使用。逻辑卷表现出来的形式也是一个块设备,如:/dev/mapper/vg_app1


PiTC卷(Point-in-Time Copy Volume)就是我们常说的快照,就是对逻辑卷在一个时间点上的备份。LVM的快照实现是CoWCopyOnWrite)方式,大致原理是:创建快照时先锁定逻辑卷的使用,拷贝一份引用所有物理卷块(PhysicalExtent)的引用信息(LogicalExtent映射PE的信息),解锁定,因为只拷贝引用信息,并不拷贝实质数据,所以这过程非常快,通常是秒级;创建完快照后,后续对原数据进行写入(对PE进行写操作)前,会先拷贝一份该PE到快照空间里,快照的相应的LE改为指向刚拷贝进快照空间的那份PE,这就是为什么叫Copy on Write模式的原因了。

 

至此,系统上已经出现逻辑块设备,供上层应用使用,上层应用不需要管下面的物理块设备、虚拟块设备、软RAID块设备、远程块复制块设备了,只是这不同类的底层块设备提供不同特性的服务而已但显然我们规划者要清楚该怎么根据上层应用需求来选择使用什么类型的底层块设备来满足。逻辑块设备的好处正如前面说的,容量不够用时随时从存储池中调配更多的容量来扩展卷。


第四层

该层是对外提供块级别还是文件级别的分叉口了。


块级别(Block-Level):直接将下层暴露出来的逻辑卷,也就是逻辑上的块设备,通过块级别协议暴露到网络上。如:iSCSI,对端需要挂载该存储的主机安装iSCSI软控制器做为启动器(Initiator)通过网络连接到OpenFiler暴露的目标设备(Target),然后在对端主机上就可以当作本地的块设备进行相应的操作(直接裸设备使用或按常规建立文件系统再使用)。


文件级别(File-Level):将下层暴露出来的逻辑块设备进行格式化,建立文件系统,再通过文件级别协议将文件系统上的目录暴露到网络上。如:NFS,对端需要挂载该存储的主机安装NFS文件系统模块,然后直接将OpenFiler暴露的NFS目录mount到本地目录上使用

 

至此,这相对传统的存储应用体系的轮廓相信应该比较完整清晰的呈现到大家眼前了。“相对传统”,是相对于当今分布式存储系统而言,本文介绍的内容都属于传统的集中式存储,即使有远程块复制的功能提及,但也只是在远端的一份完全的实时同步的备份,不是分布式协同处理的形态。但集中式存储目前在广大的企业应用中仍然是占有绝对的份额。文中所提及的各知识点其实都可以断续向下细嚼,如,LVM里具体的快照实现、PiTC的其他实现方式、iSCSI+GFS实现多主机共享块设备、DRBD+GFS双主实践、理解SCSI的运作从而理解iSCSI的配置等。


最后,如有错误请不吝指正 :-)

你可能感兴趣的:(Linux/Unix,存储)