存储虚拟化
概述
存储虚拟化是将服务器存储资源池化,实现服务器存储资源的统一整合、管理及调度,并向上层提供多种存储接口,供业务云主机根据自身的存储需求灵活分配使用资源池中的存储空间。云平台支持对接集中式存储和分布式存储。
技术特性
集中式存储
集中式存储是指将数据存储在一台或多台服务器组成的中心节点上。集中式存储所有业务均集中部署在中心节点,中心节点统一管理各分部节点数据,数据访问仅需经过一个控制器即可实现。集中式存储分为DAS、NAS、SAN三类,用户可根据不同数据存储需求选择不同存储类型。
- 高性能与高可靠性:集中式存储将数据存储在一台或多台服务器组成的中心节点上,有效避免数据分散风险,提高存储系统的性能与可靠性。
- 可扩展性:集中式存储可通过网络扩展来存储更多数据,存储系统可适应业务规模增长而扩展。
- 安全性:集中式存储可通过访问控制和数据加密等安全措施保障数据的安全性和完整性。
关于集中式存储架构的说明。在集中式存储架构中,机头是最核心部件。通常机头包含两个控制器,互为备用, 避免硬件故障导致整个存储系统不可用。此外,机头包含前端端口和后端端口,前端端口用于为服务器提供存储服务,后端端口用于扩充存储系统容量。通过后端端口,机头可连接更多存储设备,从而形成一个庞大的存储资源池。

Shared Block
云平台支持对接多种集中式存储。这里主要介绍通过Shared Block主存储连接方式对接SAN存储。该方式可将用户在SAN存储上划分的LUN设备直接作为存储池,再提供给业务云主机使用。与云平台提供的另一种基于文件系统的主存储类型Shared Mount Point(SMP)不同,Shared Block具备便捷部署、灵活扩展、性能优异等优势。据实测数据显示,Shared Block可完全发挥物理磁盘的性能。目前Shared Block支持iSCSI、FC、NVMe-oF共享访问协议。
- 块级访问:Shared Block可将数据分成块,每个块都有唯一标识符。服务器通过这些标识符来读取或写入特定的数据块。
- 并行访问:多个节点可同时访问Shared Block中的不同块,从而实现并行读写操作。
- 共享性:Shared Block可被多个节点共享,使得它们可以同时访问相同的数据块。这对于分布式系统中需要共享数据的场景非常重要。
- 容错性:Shared Block通常会提供数据冗余和故障恢复机制,以确保数据的安全性和可靠性。
- 扩展性:Shared Block可通过添加更多存储节点来扩展容量和性能。
- 性能优化:Shared Block通常会采取各种技术来优化性能,例如缓存、负载均衡等。
关于Shared Block架构的说明。在集中式存储上映射一个卷到物理机上,根据存储控制器的连接方式,在物理机上多路径服务会自动把多个具有相同WWID的SCSI设备聚合成多路径设备。云平台会去检测集群内所有物理机上拥有相同WWID的多路径设备,然后针对用户选定的卷创建出集群内的共享卷组(VG)。云平台基于卷组创建逻辑卷(LV),逻辑卷实际上对应了云平台中的云盘、快照等资源。同时为维护存储集群的一致性,云平台也提供共享存储锁管理机制(Sanlock),用于维护存储心跳、节点管理、元数据管理等功能。

Sanlock + Lvmlockd
Sanlock(Shared storage lock manager),共享存储锁管理机制。实际上,它是基于Lamport的几个算法:Delta Paxos、Disk Paxos,而形成的一套租约管理机制,并且在这几个租约管理机制上实现了集群成员管理、心跳维护、仲裁和信息传递,下一步则是将这里的租约机制转换为能让LVM使用的锁:Lvmlockd。
引入Sanlock + Lvmlockd后,服务器执行的大部分LVM命令,均会先将请求送到Lvmlockd。Lvmlockd会将LVM的操作翻译为Sanlock所能识别的锁操作。
针对不同资源的操作需获取不同的锁权限,只有在获取锁权限后,才能对相应资源执行操作,从而确保元数据和数据的安全性。此外,整个过程无需任何中间节点协调或集中操作,是一个全分布式架构。

分布式存储
云平台支持对接多种分布式存储。这里主要介绍自研分布式存储。该存储支持丰富的资源管理功能,包括对服务器、硬盘、数据盘、块存储卷、存储池、存储桶等多种资源的管理。用户可通过这些功能实现拥有不同数据冗余类型的存储池、指定存储策略和访问权限的存储桶,从而快速、低成本地构建简单、稳定、安全高效的存储基础设施。
- 弹性伸缩:支持横向扩展存储资源。在互联网+的大背景下,新兴业务蓬勃发展,数据呈现几何倍数增加,传统集中式存储应对大规模数据增长面临严峻挑战。分布式存储可通过简单添加节点来增加整个存储集群的容量和处理能力。
- 高可用性:支持多种数据冗余策略,包括副本、EC纠删码等。副本策略支持在线调整存储池副本数,将数据在多个节点上进行复制,当某个或某几个节点出现故障时,数据仍可从其他节点上获取,从而保障存储集群的可用性。结合灵活的故障域策略,即使在面临硬件故障、网络中断等不可预见的情况时,也能保证存储服务的正常运行。
- 性能优化:通过自研缓存加速技术优化数据处理性能。通过企业级NVMe SSD、SATA SSD对后端HDD设备进行读写加速,有效较低延迟,提高存储集群的I/O性能。此外,支持通过负载均衡技术将存储I/O负载均匀地分配到各个节点,确保系统资源的充分利用。
- 易于管理:提供统一便捷的管理界面和标准的RESTful API接口,帮助管理员轻松进行物理资源基本生命周期管理和维护,以及数据的运维和恢复等操作。
- 成本效益高:支持基于通用硬件部署,大大降低硬件成本。另外,由于其弹性伸缩的特性,用户可以根据业务需求动态调整存储资源,避免资源浪费,进一步降低产品使用成本。
- 硬件设备层:支持标准x86服务器、信创服务器作为底层硬件平台,同时支持利旧共池,保护既有IT资产。
- 平台层:通过故障域算法解决存储服务中的一致性哈希问题。简单而言,故障域算法在原来的哈希算法之上增加了物理部署逻辑和集群状态参数,使得在发生集群数据迁移变化时,根据物理部署情况最小化数据迁移量。比如根据输入的物理逻辑拓扑,故障域算法可以选择性地进行服务器内部迁移,或者在同一个机架/核心交换机内迁移,明显减小迁移造成的资源损耗。同时根据集群状态进行数据分布,能够充分兼容不同的存储设备。
- 数据层:采用自研缓存技术,支持使用企业级NVMe SSD、SATA SSD对后端HDD设备进行读写缓存,将高频访问的热数据存储在高速SSD设备,将冷数据通过智能刷盘策略动态调整到低速HDD设备。既提升了存储集群的整体性能,又为上层业务提供了海量存储空间。
- 接口层:支持通过RBD接口,向操作系统、云平台、数据库提供虚拟卷设备。
- 业务层:支持对接业务云平台,提供云基座。

数据存储
缓存加速方案
缓存加速方案一般是指使用SSD类的缓存设备,为数据盘的核心设备HDD进行加速的方案。自研分布式存储通过ZAS缓存模块,使用高速SSD设备为传统HDD设备进行I/O缓存,将经常访问的热数据缓存到高速SSD设备中并返回给应用程序,可以显著提升I/O性能,尤其是在具有热数据访问特征的场景下尤为明显。
ZAS缓存模块支持写透(Writethrough)和写回(Writeback)两种缓存策略。在写透模式下,数据同时写入缓存和后端存储设备,确保数据一致性;而在写回模式下,会将大部分缓存用于缓冲写入的数据,确保将脏数据顺序写入后端存储设备。系统默认关闭写回策略,支持在运行时切换缓存策略。
- 灵活缓存数据迁移
ZAS缓存模块会根据数据的访问频率和热度自动将数据从慢速磁盘迁移到SSD缓存中,以提高对这些数据的访问速度。同时,缓存模块还会根据缓存的使用情况和空间限制,自动将不常用的数据从SSD缓存迁移到慢速磁盘红,以释放缓存空间。
- 数据保护
在闪存上发生数据I/O错误时,ZAS缓存模块首先会尝试从磁盘读取以恢复数据,或将该缓存项置为无效。对于不可恢复的错误,例如元数据或脏数据,缓存模块将自动关闭缓存。
自动精简配置
在数据写入逻辑卷之前,即可为上层应用程序提供比实际物理存储设备更多的虚拟存储空间,具有方便的可伸缩性,可有效利用存储空间。
存储池恢复QoS
QoS (Quality of Service) 是用于解决I/O资源分配问题的一种技术,可以用来帮助用户对I/O读写进行限速,帮助实现资源的合理分配。
在数据节点中,存在op_shardedwq队列处理各种来自上级的I/O,并且这是一个复合队列,通常包含若干子队列。I/O请求从队列出列后,通过ObjectStore接口与磁盘交互。I/O类型主要包括两大类,一类是来自客户端的业务读写I/O请求,一类是存储系统内部活动产生的I/O,包括数据节点之间的I/O请求,SnapTrim,Scrub和Recovery等。
自研分布式存储采用基于权重的优先级队列 (wpq),按照上述的I/O分类,分别存入子队列,每个prior队列在其第一个请求入队时被创建。出队时,采用权重概率的方式确定prior级别,每个队列的优先级prior作为其权重,该prior队列被选中的概率即为其权重占总权重的比例。被选中的prior队列也并不一定能出队请求,还需要根据将要出队的请求大小来确定。
- 低速恢复:低速恢复优先保证业务带宽,恢复所需时间较长。恢复过程中如再次出现硬件故障可能会降低数据安全级别。生产环境下建议选择低速恢复。
- 中速恢复:中速恢复保证业务带宽和恢复带宽同等优先级,恢复所需时间中等,性能饱和情况下可能会增加I/O延时。
- 高速恢复:高速恢复优先保证恢复带宽,恢复所需时间较短,性能饱和情况下可能会影响业务性能。
卷业务QoS
自研分布式存储支持为块存储卷设置业务QoS,包括最大IOPS、最大读写带宽。用户可通过设置业务QoS,对不同块存储卷的性能进行管控,进而满足多样化的业务性能需求。
- 系统以固定速率生成令牌放入桶中,每一个I/O请求都必须在桶中获取令牌。
- 未获取到令牌的请求需排队获取令牌,以此限制流入系统的平均数据流速。
- 当令牌分发速度小于令牌生成速度时,令牌桶内可积累一些令牌,当短时间内出现突发流量时,允许直接取用桶中令牌。

数据保护
卷快照保护
快照是自研分布式存储中一种重要的数据保护机制,允许用户在特定时间点创建块存储卷的完整状态副本,而无需中断服务或影响生产环境。
快照创建
自研分布式存储采用COW (Copy-On-Write) 快照技术。当创建COW快照后,系统会在存储集群中创建一个原始块设备的只读副本,只有在原始块设备或快照中的数据发生变化时,才会复制被修改的数据块,这样既保留了原始数据在快照中的状态,又避免了不必要的数据冗余。同时,系统会记录原始块设备和快照之间的关系,以及每个快照的元数据信息,包括创建时间、大小、父快照等。记录这些元数据使得系统在恢复数据时可以准确定位到特定的快照状态。

数据回滚与恢复
自研分布式存储支持基于快照创建新的块存储卷,即克隆,这样新卷开始时便是基于某个快照点的状态。此外,在灾难恢复或数据回滚场景中,用户也可以将块存储卷回滚至指定快照点的状态。
数据冗余技术
概述
数据冗余技术是存储系统实现高可用性、数据保护和业务连续性的基石。在面对日益增长的数据量、复杂的应用场景以及潜在的硬件故障、网络中断、人为误操作等多种威胁时,恰当的数据冗余策略能够为用户提供强有力的数据保护屏障,确保业务连续性和数据价值的最大化。本章节将简要对比集中式存储与分布式存储的冗余技术特点,随后详细阐述自研分布式存储采用两种核心数据安全策略——副本与纠删码(EC)。
集中式存储与分布式存储对比
集中式存储
传统集中式存储使用控制器和硬盘柜来提供数据管理和读写能力,通常采用双控制器进行冗余,也有高端存储使用多控制器。存储空间可以通过控制器自带的硬盘槽位或外接扩展硬盘柜提供。传统集中式存储通常使用RAID技术,比如RAID5、RAID6、RAID10等,来保护数据。

分布式存储
分布式存储采用无中心的组网方式,每个存储节点都可以提供计算和存储资源,以实现更灵活的扩展性和更大的存储规模。存储节点通过通用以太网交换机互联起来,并基于分布式存储软件向上层业务提供统一的存储资源池。此外,分布式存储支持横向扩展,单集群可扩展到上千节点提供EB级别容量,适合海量数据的存储场景。

集中式存储 VS 分布式存储
- 跨节点冗余:分布式存储支持跨节点冗余,例如3副本允许2个节点同时故障而不丢失数据,而RAID技术局限于单节点内磁盘冗余。
- 全局热备与数据恢复:分布式存储无需单独热备盘,所有硬盘参与数据恢复,效率显著高于RAID模式(仅一块热备盘)。同时,分布式存储无需额外硬件支持,而RAID模式需要独立的RAID卡。
副本技术
定义
副本是一种数据保护技术,通过在不同的节点上复制相同的数据来实现数据冗余和高可用性。当一个节点发生故障时,可以使用其他节点上的副本来恢复数据。支持用户设置2~6副本,在生产环境中推荐使用3副本。
纠删码技术
概述
- 标准EC(K+M):K指数据的切片数量,M指校验数据的数量,表示冗余能力为允许M个故障域同时坏掉,而数据正常使用。
- 折叠EC(K+M:B):K指数据的切片数量,M:B指校验数据的数量,表示冗余能力为允许M个硬盘或B个故障域同时坏掉,而数据正常使用。
策略类型
| EC策略 | 得盘率 | |
|---|---|---|
| 推荐值 | 2+1 | 66.67% |
| 4+2 | 66.67% | |
| 8+3 | 72.73% | |
| 4+2:1 | 66.67% | |
| 8+2:1 | 80.00% | |
| 16+2:1 | 88.89% | |
| 自定义 | K/(K+M) | |
标准EC
- 正常场景读写
标准EC (K+M):以故障域为服务器级别的4+2 EC策略为例,写入数据时,系统将数据切分为4个相同大小的数据分片,同时通过校验算法生成2个同样大小的校验分片,系统将这6个数据分片随机存入6台服务器中。当任意2台服务器发生故障时,数据仍可正常使用。读取数据时,系统从4台服务器上的不同数据盘中读取数据块,将4个数据块拼装成完整数据后返回给用户。
- 故障场景读写
标准EC (K+M):以故障域为服务器级别的4+2 EC策略为例,当故障后的剩余服务器数量小于K+M时,在故障恢复前系统会将新写入的数据存放在剩余的服务器上,保证I/O不中断的同时,可靠性级别也不降低,待故障恢复后,数据冗余策略重新恢复为K+M。读取数据时,系统会从其它正常服务器中读取数据,通过校验算法恢复数据返回给用户。
折叠EC
折叠EC,也可以称之为亚节点EC,也是一种常见的数据冗余技术。区别于标准EC的K+M,折叠EC通常的配比形式为K+M:B,其中B通常为1。折叠EC在保证数据复制的高可靠性的同时,仍可以保持较高的硬盘利用率。
例如:标准EC最小故障域是存储节点,因此普通EC最小模式也至少需要6个节点。而折叠EC的4+2:1配比,最少仅需3个存储节点即可满足数据冗余要求。
此外,支持折叠EC和标准EC一样可以进行扩容和缩容,也可以在满足故障域要求的前提下,将折叠EC转化为标准EC。
- 正常场景读写
折叠EC (K+M:B):以故障域为服务器级别的4+2:1 EC策略为例,写入数据时,系统将数据切分为4个相同大小的数据分片,同时通过校验算法生成2个同样大小的校验分片,系统将这6个数据分片随机存入5台服务器中。当任意1台服务器发生故障时,数据仍可正常使用。读取数据时,系统从3台服务器上的不同数据盘中读取数据块,将4个数据块拼装成完整数据后返回给用户。
- 故障场景读写
折叠EC (K+M:B):以故障域为服务器级别的4+2:1 EC策略为例,当故障1台服务器或M块硬盘后,系统仍将按照K+M个数据块和校验块写入剩余正常服务器中。读取数据时,系统会从其它正常服务器中读取数据,通过校验算法恢复数据返回给用户。
如图 11所示:图 11. EC (4+2:1)故障场景读数据 
副本和纠删码对比
- 空间利用率:纠删码的优势较大,以4+2的EC策略为例,其得盘率约为66%,而3副本的空间利用率仅为33.3%。
- 读写性能:副本和纠删码的读写性能在小块读写场景下有较大差异,在大块场景下,两者性能差距会逐渐缩小。纠删码在数据写入时涉及数据校验,且可能产生写惩罚,在数据读取时,因横跨多个节点,任何一个节点时延过高都可能对读写性能造成很大影响。而副本在数据读取时只需要读取1个完整分片即可,不涉及节点数据拼接。
- 重构性能:副本的优势往往更大,因为不涉及数据校验,只是单纯的数据拷贝,所以速度较快。而纠删码的重构涉及反向校验的计算过程,所需的读写数据量和CPU计算消耗都会更大。
- 容错性能:两种策略各有优劣势。副本方面,多副本技术可以允许(副本数-1)个非监控节点同时故障而不丢失数据;纠删码方面,以4+2的EC策略为例,可以允许2个非监控节点发生故障而不丢失数据。
故障域隔离技术
- 服务器级别:集群内每台服务器为一个故障域,一份数据的不同副本或分片分别存储在不同服务器中。
- 机架级别:集群内每个机架为一个故障域,一份数据的不同副本或分片分别存储在不同机架中。推荐集群规模较大、机架数量较多的情况选择此级别。
- 机房级别:集群内每个机房为一个故障域,一份数据的不同副本或分片分别存储在不同机房中。推荐集群规模大、机房数量较多的情况选择此级别。
通过故障域隔离技术,可将故障对业务的影响限制在某个范围内,避免出现“牵一发而动全身”的情况发生,从而提高业务连续性。
通过基于故障域的扩容技术,配合合理的存储策略,可以将新扩容的节点独立成一个硬盘池,避免了数据的迁移。这种方式能够实现业务的无感扩容,向应用屏蔽了底层存储的变更细节,避免了传统存储变更时需要业务系统同时变更的情况。这样一来,运维人员及业务人员的工作量大大减少,同时也能提高系统的可靠性和性能。
数据一致性检查
- Scrub检查:针对元数据,其特点是执行时间短且执行周期频繁,建议每天执行数据一致性检查。支持自定义Scrub时间。
- Deep-Scrub检查:针对数据,其特点是执行时间较长且对I/O有一定压力,建议在业务量低谷时进行。若超过30天未完成一次Deep-Scrub检查,将发出告警提示。
集群硬件拓扑
集群拓扑是对集群物理资源实际部署方式的可视化展示,其中包含了数据中心、机房、机架、服务器等对象的逻辑实体,通过树状图的方式逐层放置,从而描述出从机房到服务器的分布关系。其中每一个树状图都有一个根节点,同时集群拓扑允许多个根节点存在。用户可在拓扑规划完成后,在创建存储池时选择对应级别的数据冗余策略。

| 拓扑对象 | 数量范围 |
|---|---|
| 数据中心 | 0~2 |
| 机房 | 0~100(单个数据中心下) |
| 机架 | 0~100(单个机房下) |
| 服务器 | 0~20(单个机架下) |
便捷运维
多资源池
自研分布式存储支持多资源池特性,帮助用户实现不同性能存储介质的使用和故障隔离。
每个资源池可以具有不同的属性和性能,包括副本数、数据冗余级别、存储介质等。用户可根据实际需求灵活进行资源划分和管理,提高存储效率和存储性能。
各资源池之间相互隔离,用户可基于多个资源池实现数据隔离管理。同时,单一资源池故障不会对其他资源池产生影响,有效保障数据安全和存储可靠性。
硬盘点灯
自研分布式存储支持可视化界面点灯和硬盘快速定位。当用户需对某块硬盘进行维护或更换时,可在UI上点击硬盘点灯,物理环境中该硬盘的LED灯就会亮起,指引用户快速、准确进行设备定位,提高运维效率。
硬盘S.M.A.R.T.检测
自研分布式存储支持S.M.A.R.T.检测技术,监测硬盘的健康状态、温度、固件,和硬盘写入量总计。上层业务会根据Smart Data返回的相关I/O错误和磁盘状态信息,触发相应的告警。
数据盘维护模式
自研分布式存储支持数据盘维护模式,进行服务器或硬盘维护时,可先在UI界面使对应数据盘进入维护模式,该模式下的数据盘将停止服务和数据访问,其上的数据不会进行重平衡。
自动故障检测和报警
自研分布式存储支持自动故障监测和报警机制。该机制监控存储平台系统和各个存储服务器,检测到故障时将自动向平台发送告警消息。用户可另外添加邮箱报警器接收告警消息,以及时采取措施进行故障修复。
同时,检测到故障发生时,支持自动服务重启和数据迁移,最大程度上保障了数据的可靠、可用,从而形成高可靠、高可用的分布式存储系统。
数据重平衡
自研分布式存储支持数据重平衡,即使存储集群中的数据均衡分布在各个存储服务器下的数据盘上,从而提高存储系统的性能和可靠性。
- 能根据存储池设置和存储服务器的负载情况,自动有将数据从负载较高的节点转移到负载较低的节点上,以达到负载均衡的效果。
- 存储集群中有服务器发生故障,或有新服务器加入集群时,将自动进行数据迁移,从而保证数据一致性和可靠性。
手动数据重平衡:
同时支持手动数据重平衡功能,用户可根据实际的数据分布情况,手动进行数据重平衡操作。











