FusionStorage Block入门(结合公有云梳理)下
继上期,这期我们把第四层详细给大家介绍下
第四层:FusionStorage Block(FSB)
FSB的前身是dsware,一些老文档还是值得参考的,这里的FSB即分布式块存储软件,支撑IaaS+ EVS服务,采用分布式集群控制技术和DHT路由技术来提供块存储功能。由于本文的目标读者为与我一样的入门新手,所以我结合自己的理解将FSB的入门分为四个等级逐步细化。
一级理解:FusionStorage Block是什么
站在用户视角来看,我们在买云主机时会考虑自己要多大的存储空间(500G、1T)、用什么存储介质(SSD?硬盘?),选好后ECS会帮我们把这些存储资源以卷的形式挂载到操作系统中(逻辑卷)。之后我们对这个卷进行读写时并不会考虑这块盘到底在哪儿、数据写到了哪儿,只会关注我读写的速度快不快(性能)、存的文件会不会丢(可靠性)。
再站在服务提供商的视角看,我有很多不同介质的物理存储资源可以提供给用户(存储池),容量可根据业务需要进行平滑扩展(VBS无状态机头),且为了数据不丢失,我会提供不同的存储策略(副本、EC)来保证可靠性。既然是外置存储,那性能优劣会依赖于网络、存储IO路径和元数据等多个方面,故我将用户的读写请求以分布式的形式打散到多台机器处理,并保证每一个逻辑卷上的块都能准确对应到底层的物理盘上(DHT路由)。最后,如果这套外置分布式存储系统发生了故障,需要确保数据可恢复且数据重建的速度很快(Catchup &Reblance),最重要的是恢复过程中不能影响正常的业务IO(Entry Log机制)。
以上,提供分布式块存储功能的软件系统就是FusionStorageBlock,它采用分布式集群控制技术和DHT路由技术,提供分布式存储功能特性。FSB会在所有磁盘中实现负载均衡,即数据打散存放、不会出现热点盘,且高效的路由算法和分布式Cache技术保证了高性能。FSB可支持融合部署(计算和存储部署在一个节点),也可支持分离部署,公有云场景选择后者。
二级理解:FSB的组件划分
先从上述功能入手,思考其应包括的组件。
首先,一个块设备的IO请求从用户侧下发,正常会经过Linux VFS、通用块层最终到SCSI中层下发SCSI命令交给底层驱动处理,由于这个IO最终会落到存储池,所以需要一个组件对IO进行处理和转发。其次,存储侧收到IO后需要有对应组件做如下三件事:第一,为保证可靠性需要将写IO以副本形式写到其他盘上提高可靠性;第二,由于传统HDD硬盘随机读写性能较差,故应提供Cache层做缓存;第三,用户的SCSI IO指令是基于逻辑卷的(LBA、Offset等),需要重定位到物理盘的对应块(LBA’、Offset’)后进行实际的读写操作。再从宏观来看,需要一个组件对全局的分布式集群状态提供管理,比如新加入或宕掉一个存储节点后如何调整路由策略使IO路由保持负载均衡等。最后,需要一个管理组件提供对整套系统进行监控、配置等维护操作。
以上四方面就分别对应着FusionStorage Block的四大组件:
1. VBS(虚拟块存储管理组件)-“客户端”:负责卷元数据的管理,提供分布式集群接入点服务,使计算资源能够通过VBS访问分布式存储资源。每个节点上默认部署一个VBS进程,形成VBS集群。节点上也可以通过部署多个VBS来提升IO性能;
2. OSD(对象存储设备服务)-“服务端”:执行具体的IO操作。在每个服务器上部署多个OSD进程,一块磁盘默认对应部署一个OSD进程;
3. MDC(元数据控制软件)/ ZK -“集群管理”:实现对分布式集群的状态控制,以及控制数据分布式规则、数据重建规则等。MDC默认部署在3个节点上,形成MDC集群;
4. FSM(FSB Manager)/FSA(FSBAgent)-“管理组件”:FSM提供告警、监控、日志、配置等操作维护功能,其代理进程FSA部署在各节点上,实现各节点与FSM通信。
下图即为FusionStorageBlock的逻辑架构图,图中体现出计算、存储融合部署和分离部署形态与各关键进程的部署位置(MDC:管理节点,VBS:计算节点,OSD:存储节点)。
1) Volume / 逻辑卷 / lun:用户看到的SCSI块设备,即Linux下看到的/dev/sdn、/dev/sdo等LBA连续线性空间。1个Volume只归属于一个存储池
2) SCSI四元组:指用户下发的SCSI IO的标识,内容为(host_id, channel_id, target_id, lun_id),配合offset和长度len可以确定IO在逻辑卷的读写范围
3) 三元组:FSB内部用于唯一标识卷或快照的标识,由SCSI四元组转换而来,内容为(tree_id, branch_id, snap_id)
4) 分片 /key-value数据块:用户对逻辑卷下发的IO会在VBS内(VBP模块)按1M大小的粒度进行切分,转为软件内部的key-value形式通过寻址(ioview)打散发送到对应OSD(主OSD)
5) 四元组 / key:在总图中用钥匙指代,是FSB内部对各1M块的标识,内容在三元组基础上加入block_no
6) Partition / Pt:数据分区,在存储底层代表了一大块数据区域,内部会有多个key-value块。VBS划分好的1M块会唯一对应到1个Pt上,1个Pt会包含多个1M块,Pt也是路由到OSD的依据。后面的所谓OSD主、备都是针对Pt来说的
7) DHT –Distributed Hash Table:即总图中那个环形路由表,是一种分布式路由算法,环上的分割单元为Pt,VBS会通过DHT环来找到其Key所对应的Pt
8) 视图 / View:FSB内主要包含IO View、Partition View和OSD View三种视图,列举区分如下:
a. IO View:记录着Pt与主OSD的对应关系,是Pt View的子集。存在于MDC、主备OSD、VBS Client。VBS通过key获取到对应Pt后,便可根据IO View查询发送数据到该Pt所对应的主OSD上
b. Partition View(Pt View):记录Pt到其多个主备副本的记录。在创存储池时会确定有多少Pt,然后生成映射关系。存在于MDC和主OSD
c. OSD View:记录OSD的状态(UP/DOWN +IN/OUT),只存在于MDC中
9) RSM / 强一致性复制协议:二者并不严格等同,RSM是OSD的入口模块,主要用于强一致性复制协议的实现,也用于实现QoS流控等操作。强一致性保证了用户写入一份数据时,如果成功,后端的一份或多份副本必然一致,且再次读时,无论从哪个副本都可读到正确的数据
10) 瘦分配:用户在实际写数据时才分配实际的存储空间,即用户看到的逻辑卷大小大于实际为其真实分配的空间
11) Snapshot(快照)、Linked Clone(LC/链接克隆):FSB的快照使用写时重定向技术ROW[7],并基于增量快照提供了链接克隆机制,可基于一个快照创建多个克隆卷。我通过抓取元数据的方式记录了打快照和链接克隆的过程,三元组变化如下:
12) 元数据:这个概念在FSB中非常重要但我认为又比较宽泛,对卷或快照来说,其属性描述的集合成为元数据,即不是记录具体数据内容而是描述了卷叫什么,有多大,四元组是什么等等,一个卷的元数据长这个样子:
但在具体写数据时,除了写实际数据外也会写记录性的信息,如Entry等也可归为元数据,它记录了数据起始位置、长度、写入的key、归属PT等等,为异常情况下的恢复提供时序上的帮助。Entry元数据长这个样子:
13)WB Cache、RW Cache:这部分是OSD Cache层Smart Cache内容,分别代表回写缓存(Write-Back Cache)和读写缓存(Read-WriteCache),这部分打算单写一篇文章详细说,所以此处不赘述;
14) VDB:Key-Value DB就是解决一个Client发来的Key与对应到物理磁盘1M块Value的关系,解决了数据在硬盘上快速存取的问题。
四级理解:IO流程
在理解了上述FSB基础后,对IO流程的梳理需细化到VBS、OSD的各个模块。这部分的参考材料非常多且很细致,在此就不赘述了。我已将大体IO流程在总图中画了出来,并可在图中看出两个组件内模块的划分和大致作用,希望能给大家在宏观IO流程的理解上提供帮助。
感谢读者也了解了这么久,小编下期给大家介绍