Labs 导读
分布式存储基于通用的x86服务器,通过分布式的存储软件来构建存储系统,开放丰富灵活的软件策略和接口,允许管理员和租户进行自动化的系统管理和资源调度发放。业界的分布式存储,有多种形态,包括分布式块存储、分布式文件存储、分布式对象存储。各大存储厂商都有自己的解决方案,而开源的代表的就是ceph。考虑到电信云NFV领域的应用特性和相关设备商分布,我们这里主要介绍华为的分布式存储系统FusionStorage。
1、传统SAN架构
在传统的IT行业和电信云早期时候,计算和存储是分离的,计算由各种x86服务器组成计算集群,存储由各种SAN/NAS组成存储集群,这种分离架构虽然通过多个计算实例共享相同存储,在计算节点发生故障后,无须耗时的外存 数据迁移,即可快速在其他计算节点上恢复故障应用。但是,这种传统存储资源缺乏共享。因为,传统存储设备和资源往往由不同厂家提供,之间无法进行资源共享,数据中心看到的是一个个孤立的存储资源。如下图所示。
而且,SAN机头成为制约系统扩展的单点瓶颈。因为,随着计算集群规模的不断扩展,由于存储资源池集中式控制机头的存在,使得共享存储系统的扩展性、性能加速、可靠性受到制约。比如:采用多个SAN系统,单个SAN系统的机头最多由双控扩展到16控,不同的SAN系统独立管理无法组成集群。各计算节点只能依赖于集中式机头内的缓存实现I/O加速,但由于各节点cache有限,且不共享导致cache的I/O缓存加速只能达到GB级别。尽管SAN控制机头自身具有主备机制,但依然存在异常条下主备同时故障的可能性。
在传统SAN存储系统中,一般采用集中式元数据管理方式,元数据中会记录所有LUN中不同偏移量的数据在硬盘中的分布,例如LUN1+LBA1地址起始的4KB长度的数据分布在第32块硬盘的LBA2上。每次I/O操作都需要去查询元数据服务,随着系统规模逐渐变大,元数据的容量也会越来越大,系统所能提供的并发操作能力将受限于元数据服务所在服务器的能力,元数据服务将会成为系统的性能瓶颈。
2、什么是Server SAN?
为了解决上述问题,业界针对大多数企业事务型IT应用而言,提出信息数据的“ 即时处理” 理念,通过计算和存储融合,引入scale-out存储机制,也就出现了Server SAN的概念。所谓Server SAN就是由多个独立服务器自带的存储组成一个存储资源池,同时融合了计算和存储资源。scale-out的存储架构示意图如下:
以数据中心级资源共享为例,一个数据中心内可以构建一个很大的存储资源池,如下图所示,满足数据中心内各类应用对存储容量,性能和可靠性的需求,实现资源共享和统一管理。
通过在各个计算节点引入分布式控制器VBS,这是一种软件控制机头,线性扩展能力最大到4096个节点。而且,利用各个计算节点的cache组成分布式cache集群,满配情况下可达到TB级别的cache缓存能力。同时,各计算节点存储平面的存储网卡可采用专用IB接口卡,可以实现P2P的无阻赛传输网络,可达到100Gbps的数据传输能力。
最重要的是,采用分布式软件存储方式属于软件定义存储SDS的范畴,通过将控制面数据抽象和解耦,可与厂商的专有存储硬件解耦,底层的专有存储设备变为通用设备,实现简单统一管理和线性扩展。以华为FusionStorage为例,由于其采用的DHT算法(分布式哈希表结构,后面会详细讲),不仅数据能够尽可能分布到所有的节点中,可以使得所有节点负载均衡,现有节点上的数据不需要做很大调整实现数据均衡性,而且当有新节点加入系统中,系统会重新做数据分配,数据迁移仅涉及新增节点,从而实现数据修改的单调性。
3、分布式存储池的概念
分布式存储系统把所有服务器的本地硬盘组织成若干个资源池,基于资源池提供创建/删除应用卷(Volume)、创建/删除快照等接口,为上层软件提供卷设备功能。分布式存储系统资源池示意图如下,具有以下特点。
每块硬盘分为若干个数据分片(Partition),每个Partition只属于一个资源池,Partition是数据多副本的基本单位,也就是说多个数据副本指的是多个Partition,如上图中的Pn色块。系统自动保证多个数据副本尽可能分布在不同的服务器上(服务器数大于数据副本数时)。系统自动保证多个数据副本间 的数据强一致性(所谓强一致性是指无论读还是写I/O,都要进行数据一致性检查)。Partition中的数据以Key-Value的方式存储。对上层应用呈现并提供卷设备(Volume),没有LUN的概念,使用简单。系统自动保证每个硬盘上的主用Partition和备用Partition数量相当,避免出现集中的热点。所有硬盘都可以用做资源池的热备盘,单个资源池最大支持数百上千块硬盘。
分布式存储系统采用分布式集群控制技术和分布式Hash数据路由技术,提供分布式存储功能特性。这里的概念比价抽象,所以下面结合华为FusionStorage的具体情况进行介绍。
4、华为FusionStorage分布式存储概述
FusionStorage通过创新的架构把分散的、低速的SATA/SAS机械硬盘组织成一个高效的类SAN存储池设备,提供比SAN设备更高的I/O,如下图所示:
集群内各服务器节点的硬盘使用独立的I/O带宽,不存在独立存储系统中大量磁盘共享计算设备和存储设备之间有限带宽的问题。其将服务器部分内存用做读缓存,NVDIMM用做写缓存,数据缓存均匀分布到各个节点 上,所有服务器的缓存总容量远大于 采用外置独立存储的方案。即使采用大容量低成本的SATA硬盘,分布式存储系统仍然可以发挥很高的I/O性能,整体性能提升1~3倍,同时提供更大的有效容量。
由于其采用无状态的分布式软件机头,机头部署在各个服务器上,无集中式机头的性能瓶颈。单个服务器上软件机头只占用较少的CPU资源,提供比集中式机头更高的IOPS和吞吐量。例如:假设系统中有20台服务器需要访问FusionStorage提供的存储资源,每台服务器提供给存储平面的带宽为2*10Gb,我们在每台服务器中部署1个VBS模块(相当于在每台服务器中部署1个存储机头),20台服务器意味着可部署20个存储机头,所能获取到的总吞吐量最高可达20*2*10Gb=400Gb,随着集群规模的不断扩大,可以线性增加的存储机头,突破了传统的双控或者多控存储系统集中式机头的性能瓶颈。
华为FusionStorage是一种软件定义存储SDS技术,将通用X86服务器的本地HDD、SSD等介质通过分布式技术组织成大规模存储资源池。同时,以开放API的方式对非虚拟化环境的上层应用和虚拟机提供工业界标准的SCSI和iSCSI接口。关键一点是,华为官方自己吹牛逼的的口号----FusionStorage是目前唯一商用支持PB级数据吞吐/存储能力的Server SAN产品。
华为FusionStorage主要应用于两种场景,如下图所示,而中国移动的电信云NFV领域的应用属于第一种场景。
场景一:与主流云平台的集成,构建云资源池中的存储资源池。可以和各种云平台集成,如华为FusionSphere、VMware、开源Openstack等,按需分配存储资源。
场景二:提供传统的存储应用,如各种业务应用(如SQL、Oracle RAC、Web、行业应用等等)。
因此,华为FusionStorage是一种开发兼容的系统,可以兼容各种主流数据库、各种主流虚拟化平台以及各种主流服务器。同时,支持虚拟化平台和数据库资源池融合部署,即共用一个数据中心内的FusionStorage存储资源池。华为FusionStorage的软硬件兼容性总结如下:
硬件兼容性主要包括:服务器、各种HDD盘,SSD盘,PCIE SSD卡/盘以及各种RAID卡,以太网卡, Infiniband卡等。
软件兼容性主要包括:各种虚拟化平台、各种操作系统以及各种数据库软件。
而且,FusionStorage支持使用SSD替代HDD作为高速存储设备,支持使用Infiniband网络替代GE/10GE网络提供更高的带宽,为对性能要求极高的大数据量实时处理场景提供完美的支持千万级IOPS。InfiniBand(直译为“无限带宽”技术,缩写为IB)是一个用于高性能计算的计算机网络通信标准,它具有极高的吞吐量和极低的延迟,用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系统之间的直接或交换互连,以及存储系统之间的互连。硬件接口图如下:
Inifiniband接口可以实现链路可聚合:大多数系统使用一个4X聚合。12X链路通常用于计算机集群和超级计算机互连,以及用于内部网络交换器连接。而且,InfiniBand也提供远程直接内存访问(RDMA)能力以降低CPU负载。除了板式连接,它还支持有源和无源铜缆(最多30米)和光缆(最多10公里)。通过Inifiniband Association可以指定CXP铜连接器系统,用于通过铜缆或有源光缆达到高达传输速率120Gbps的能力。
FusionStorage的技术规格参数表如下:
5、FusionStorage逻辑架构
在中国移动电信云NFV中,主要使用分布式块存储,华为FusionStorage Block的解决方案将通用X86存储服务器池化,建立大规模块存储资源池,提供标准的块存储数据访问接口(SCSI和iSCSI等)。支持各种虚拟化Hypervisor平台和各种业务应用(如SQL、Web、行业应用等等),可以和各种云平台集成,如华为FusionSphere、VMware、开源Openstack等,按需分配存储资源。如下图所示:
同时,FusionStorage Block通过及SSD做Cache,构建内存---缓存(SSD)---主存(HDD/SAS/SATA)三级存储等关键技术,将存储系统的性能和可靠性得到极大的提高。
如下图所示,华为FusionStorage的逻辑架构中,按照管理角色和代理角色分为FSM和FSA两类进程,在代理进程内部按照数据管理、I/O控制和数据读写进一步细分为MDC、VBS和OSD三个子进程,各类软件逻辑模块的功能解释如下:
FSM(FusionStorage Manager)
FusionStorage管理模块,提供告警、监控、日志、配置等操作维护功能。一般情况下FSM通过管理虚机主备节点部署,不考虑资源利用率的场景下,也可以使用物理服务器主备部署。
FSA(FusionStorage Agent)
代理进程,部署在各节点上,实现各节点与FSM通信。FSA包含MDC、VBS和OSD三类不同的子进程。根据系统不同配置要求,分别在不同的节点上启用不同的进程组合来完成特定的功能。比如:单纯存储节点只需要部署OSD子进程,用于构建虚拟存储池。计算和存储融合节点,不仅需要部署OSD进程,还需部署VBS进程,用于控制数据读写I/O。
MDC(MetaData Controller)
负责整个分布式存储集群的的元数据控制,实现对分布式集群的状态控制,以及控制数据分布式规则、数据重建规则等。MDC是整个分布式存储集群的核心,通过MDC模块才能找到数据的具体存储位置,知悉存储副本的数量,分布和大小。因此,MDC子进程必须采用高可用HA的方式部署,默认情况下,是部署在3个节点的ZK(Zookeeper)盘上,形成MDC集群。
VBS(Virtual Block System)
虚拟块存储管理组件,负责卷元数据的管理,也就是我们俗称的”软件机头“。VBS子进程提供分布式集群接入点服务,使计算资源能够通过VBS访问分布式存储资源。VBS上存储的是虚拟机虚拟磁盘卷的元数据,用于描述虚拟卷在OSD的位置,分布和大小等。凡是融合计算资源的节点,每个节点上默认部署一个VBS进程,形成VBS集群,由于VBS从OSD读取数据时可以并发,所以节点上也可以通过部署多个VBS来提升IO性能。
OSD(Object Storage Device)
对象存储设备服务子进程,执行具体的I/O操作。在每个存储节点服务器上可以部署多个OSD进程。一般情况下,存储服务器上的一块本地磁盘默认对应部署一个OSD进程。如果使用大容量SSD卡作主存,为了充分发挥SSD卡的性能,可以在1张SSD卡上部署多个OSD进程进行管理,例如2.4TB的SSD卡可以部署6个OSD进程,每个OSD进程负责管理400GB存储空间。
6、FusionStorage部署方式
在中国移动电信云NFV解决方案中,无论软件由哪家厂商提供,虚拟化Hypervisor都是采用KVM来实现,区别只是不同厂商在开源KVM中私有增强或加固。华为FusionStorage Block支持XEN/KVM之类的Linux开放体系的Hypervisor场景,包括华为基于XEN/KVM增强的FusionSphere UVP虚拟化平台,和非华为的XEN/KVM虚拟化平台。在XEN/KVM的虚拟化场景下,FusionStorage Block既支持计算存储融合的部署模式,又支持计算存储分离的部署模式。
6.1 融合部署
就是指计算与存储的融合部署方式,也就是说将应用或虚拟机与存储在集群范围内部署在同一台服务器上。如下图所示:
融合部署对应到FusionStorage的逻辑架构中,就是指的是将VBS和OSD部署在同一台服务器中。这种部署方式提升了资源利用率,虽然一定意义上增加了计算节点服务器的CPU开销,但是通过分布式存储软件策略,可以满足数据就近读写,提升I/O转发性能,同时数据副本异地存放,满足数据存储可靠性。在电信云NFV中,对时延较敏感的业务控制数据应用虚机推荐采用融合部署的方式部署。
6.2 分离部署
顾名思义就是将计算与存储的分开部署,也就是将业务虚拟机与存储部署在不同的服务器上。如下图所示:
分离部署对应到FusionStorage的逻辑架构中,就是将VBS和OSD分别部署在不同的服务器中,其中存储节点服务器只部署OSD子进程,计算节点服务器只部署VBS子进程。计算节点通过存储网络完成存储节点上数据的I/O读写,一般高性能数据库应用因为需要对数据进行计算,推荐采用分离部署的方式。但是,这种部署方式在I/O转发性能略差于融合部署。采用分离部署时,存储节点服务器Host OS可以采用通用的Linux OS操作系统,这就为后续分布式存储解耦提供了基础。
7、FusionStorage数据可靠性
7.1 集群管理
华为分布式存储FusionStorage的分布式存储软件采用集群管理方式,规避单点故障,一个节点或者一块硬盘故障自动从集群内隔离出来,不影响整个系统业务的使用。集群内选举进程Leader,Leader负责数据存储逻辑的处理,当Leader出现故障,系统自动选举其他进程成为新的Leader。
7.2 多数据副本
华为分布式存储FusionStorage中没有使用传统的RAID模式来保证数据的可靠性(实际采用的RAID2.0+技术),而是采用了多副本备份机制,即同一份数据可以复制保存多个副本。在数据存储前,对数据打散进行分片,分片后的数据按照一定的规则保存集群节点上。如下图所,FusionStorage采用数据多副本备份机制来保证数据的可靠性,即同一份数据可以复制保存为2~3个副本。
FusionStorage针对系统中的每个卷,默认按照1MB进行分片,分片后的数据按照DHT算法保存集群节点上。如上图所示,对于服务器Server1的 磁盘Disk1上的数据块P1,它的数据备份为服务器Server2的磁盘Disk2上P1’,P1和P1’构成了同一个数据块的两个副本。当P1所在的硬盘故障时,P1’可以继续提供存储服务。
数据分片分配算法保证了主用副本和备用副本在不同服务器和不同硬盘上的均匀分布,换句话说,每块硬盘上的主用副本和备副本数量是均匀的。扩容节点或者故障减容节点时,数据恢复重建算法保证了重建后系统中各节点负载的均衡性。
7.3 数据一致性和弹性扩展
数据一致性的要求是:当应用程序成功写入一份数据时,后端的几个数据副本必然是一致的,当应用程序再次读取时,无论在哪个副本上读取,都是之前写入的数据,这种方式也是绝大部分应用程序希望的。保证多个数据副本之间的数据一致性是分布式存储系统的重要技术点。华为分布式存储FusionStorage采用强一致性复制技术确保各个数据副本的一致性,一个副本写入,多个副本读取。 如下图所示,
存储资源池支持多种安全级别,采用强一致性复制协议,冗余策略按需灵活配置、部署。当采用机柜级冗余时,能同时容忍2或3个机柜失效;当采用节点级冗余时,能同时容忍2或3个节点失效。
FusionStorage还支持Read Repair机制。Read Repair机制是指在读数据失败时,会判断错误类型,如果是磁盘扇区读取错误,可以通过从其他副本读取数据,然后重新写入该副本的方法进行恢复,从而保证数据副本总数不减少。
同时,FusionStorage的分布式架构具有良好的可扩展性,支持超大容量的存储。如下图所示,扩容存储节点后不需要做大量的数据搬迁,系统可快速达到负载均衡状态。
FusionStorage支持灵活扩容方式,不仅支持计算节点、硬盘、存储节点单类性扩容,而且支持同时进行扩容。由于软件机头、存储带宽和Cache都均匀分布到各个节点上,系统IOPS、吞吐量和Cache随着节点扩容线性增加,理论上计算节点和存储节点越多,FusionStorage的性能越强。
7.4 快速数据重建
分布式存储系统内部需要具备强大的数据保护机制。数据存储时被分片打散到多个节点上,这些分片数据支持分布在不同的存储节点、不同的机柜之间,同时数据存储时采用多副本技术,数据会自动存多份,每一个分片的不同副本也被分散保存到不同的存储节点上。在硬件发生故障导致数据不一致时,分布式存储系统通过内部的自检机制,通过比较不同节点上的副本分片,自动发现数据故障。发现故障后启动数据修复机制,在后台修复数据。如下图所示为华为FusionStorage的数据重建过程示意图。
FusionStorage中的每个硬盘都保存了多个DHT分区(Partition),这些分区的副本按照策略分散在系统中的其他节点。当FusionStorage检测到硬盘或者节点硬件发生故障时,自动在后台启动数据修复。
由于分区的副本被分散到多个不同的存储节点上,数据修复时,将会在不同的节点上同时启动数据重建,每个节点上只需重建一小部分数据,多个节点并行工作,有效避免单个节点重建大量数据所产生的性能瓶颈,对上层业务的影响做到最小化。
7.5 掉电保护
分布式存储系统运行过程中可能会出现服务器突然下电的情况,此时在内存中的元数据和写缓存数据会随着掉电而丢失,需要使用非易失存储介质来保存和恢复元数据和缓存数据。华为FusionStorage支持的保电介质为NVDIMM内存条或SSD。如下图所示,程序运行过程中会把元数据和缓存数据写入保电介质中,节点异常掉电并重启后,系统自动恢复保电介质中的元数据和缓存数据。
部署FusionStorage时,要求每一台服务器配备NVDIMM内存条或SSD盘,服务器掉电时会把元数据和缓存数据写入NVDIMM的Flash或SSD盘中,上电后又会把Flash中的数据还原到内存中。FusionStorage能够自动识别出系统中的NVDIMM内存,并把需要保护的数据按照内部规则存放在NVDIMM中,用于提供掉电保护功能。
8、FusionStorage的特性
FusionStorage分布式存储软件总体框架如下所示,由存储管理模块、存储接口层、存储服务层和存储引擎层4类组成。
8.1 FusionStorage块存储功能 - SCSI/iSCSI块接口
FusionStorage通过VBS以SCSI或iSCSI方式提供块接口。当采用SCSI方式时,安装VBS的物理服务器、FusionSphere或KVM等采用SCSI接口(带内方式);当采用iSCSI方式时,安装VBS以外的虚拟机或主机提供存储访问,VMware、MS SQL Server集群采用iSCSI模式(带外方式)。
使用SCSI存储接口时,支持快照、快照备份、链接克隆功能,iSCSI暂不支持前述特性。对于iSCSI协议的支持是通过VBS提供iSCSI Target,块存储使用方通过本机的Initiator与iSCSI Target联接来访问存储。FusionStorage支持以下两种安全访问的标准:CHAP身份验证和LUN MASKING给Host对Lun的访问进行授权。
8.2 FusionStorage精简配置功能
相比传统方式分配物理存储资源,精简配置可显著提高存储空间利用率。FusionStorage天然支持自动精简配置,和传统SAN相比不会带来性能下降。
当用户对卷进行写操作时,系统才分配实际物理空间,FusionStorage Block仅处理虚拟卷空间和实际物理空间之前的映射关系,对性能无影响。
8.3 FusionStorage快照功能
FusionStorage快照机制,将用户卷数据在某个时间点的状态保存下来,可用作导出数据、恢复数据之用。FusionStorage Block快照数据基于DHT机制,数据在存储时采用ROW(Redirect-On-Write)机制,快照不会引起原卷性能下降。比如:针对一块容量为2TB的硬盘,完全在内存中构建索引需要24MB空间,通过一次Hash查找即可判断有没有做过快照,以及最新快照的存储位置,效率很高。
无限次快照:快照元数据分布式存储,水平扩展,无集中式瓶颈,理论上可支持无限次快照。
卷恢复速度快:无需数据搬迁,从快照恢复卷1S内完成(传统SAN在几小时级别)。
8.4 FusionStorage链接克隆功能
FusionStorage支持一个卷快照创建多个克隆卷,对克隆卷修改不影响原始快照和其它克隆卷。克隆卷继承普通卷所有功能,即克隆卷可支持创建快照、从快照恢复及作为母卷再次克隆操作。
- 支持批量进行虚拟机卷部署,在1秒时间内创建上百个虚拟机卷。
- 支持1:2048的链接克隆比,提升存储空间利用率。
8.5 FusionStorage Block卷迁移
为了存储池之间的容量平衡,FusionStorage支持将容量满的池迁移到一个空闲的池。或者,为了改变卷的性能,FusionStorage支持卷在不同性能的池之间的迁移,从低性能的池向高性能的池迁移。这就是卷迁移使用的场景,在FusionStorage中,由于迁移过程中,源卷不能有写数据的操作,所以这种迁移属于冷迁移。
步骤:
【创建目标卷】>>>【卷数据复制】>>>【删除源卷】>>>【目标卷改名】>>>【完成】
8.6 FusionStorage Block双活
基于AB两个数据中心的两套FusionStorage Block集群构建双活容灾关系,基于两套FusionStorage的卷虚拟出一个双活卷,两数据中心业务的主机能同时进行读写服务。任意数据中心故障,数据零丢失,业务能迅速切换到另外一个站点运行,保证业务连续型。
在原有基础服务基础上,引入复制集群,按服务化的架构提供双活业务。支持物理部署和虚拟机部署,可以做到独立安装和升级,独立扩展,按卷粒度提供双活服务。
支持优先站点仲裁和第三方仲裁的双仲裁模式,故障自动倒换,无需人工介入。能跟上层Oracle RAC、VMWare等应用形成端到端双活容灾解决方案。