存储虚拟化
概述
存储虚拟化是将服务器存储资源池化,实现服务器存储资源的统一整合、管理及调度,并向上层提供多种存储接口,供业务云主机根据自身的存储需求灵活分配使用资源池中的存储空间。云平台支持对接集中式存储和分布式存储。
技术特性
集中式存储
集中式存储是指将数据存储在一台或多台服务器组成的中心节点上。集中式存储所有业务均集中部署在中心节点,中心节点统一管理各分部节点数据,按需分配,数据访问仅需经过一个控制器即可实现。集中式存储分为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架构的说明。在集中式存储上映射一个卷到物理机上,根据存储控制器的连接方式,在物理机上Multipath服务会自动把多个具有相同WWID的SCSI设备聚合成多路径块设备。云平台会去检测集群内所有物理机上拥有相同WWID的多路径设备,然后针对用户选定的卷创建出集群内的共享VG。云平台基于VG创建LV,LV实际上对应了云平台中的云盘、快照等资源。同时为了维护存储集群的一致性,云平台也提供了共享存储锁管理机制,用于维护存储心跳、节点管理、元数据管理等功能。

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进行加速的方案。通过自研缓存加速技术,在优化数据处理性能、提供加速能力的同时,有着较低的资源消耗。
- 低资源消耗:
- 内存:RAM要求大约为1GiB+(2%×4KiB/+0.05%)×缓存设备容量。例如,当使用4KiB(默认)缓存线大小时,RAM要求约为1GiB+2.05%×缓存设备容量。
- CPU:大多数情况下低于10%。
- 自动分区映射:
支持自动隐藏操作系统中现有的核心装备分区,如/dev/sdc1等,提高平台兼容性。
- 多级缓存:
支持将热数据从慢速的HDD设备缓存到更快的SSD设备,然后将热数据从SSD缓存到更快的RAMdisk。在这种情况下,DRAM的固定部分被分配用于缓冲,而SSD将保留为完整的缓存数据,因此DRAM数据将始终在SSD上可用。
- 支持Trim:
允许操作系统通知缓存哪些块数据不再被考虑使用,可以在内部擦除数据,并释放与该数据关联的缓存行,节省了数据刷新到后端存储所需的时间。
- 支持I/O分类:
支持基于分类粒度控制数据缓存,可动态分析每个I/O,同时确定目标文件大小。支持根据不同工作负载,匹配最佳I/O配置。
- 多缓存刷新策略:
支持3种缓存刷新策略,包括ACP (Active Cleaning Policy)、ALRU (Approximate LRU)、NOP。
自动精简配置
在数据写入逻辑卷之前,即可为上层应用程序提供比实际物理存储设备更多的虚拟存储空间,具有方便的可伸缩性,可有效利用存储空间。
存储池恢复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延时。
- 高速恢复:高速恢复优先保证恢复带宽,恢复所需时间较短,性能饱和情况下可能会影响业务性能。
COW快照
自研分布式存储采用COW (Copy-On-Write) 快照技术。当启动COW快照后,系统会创建和源卷对应的快照空间,在创建COW快照后,系统会跟踪源卷的数据变化,一旦源卷数据块发生写入操作,则先将源卷数据读出并写入快照卷,然后用新数据覆盖原始数据。
COW快照原理
假设一个卷包含6个数据切片,编号分别为1~6,在某一时间点对该卷进行快照操作,生成新的快照卷。快照卷也有6个数据块,且和源卷一样指向相同的数据块物理空间。
- 首先会分配一个新的物理块,编号为7。
- 读取编号为6的物理块中的数据。
- 将读出的编号6的物理块数据写入到新分配的编号7的物理块中。
- 更新快照卷map信息,指向编号7的物理块空间。
- 更新源卷的编号6的物理块空间内的数据。

数据保护
数据冗余技术
概述
传统集中式存储使用控制器和硬盘柜来提供数据管理和读写能力,通常采用双控制器进行冗余,也有高端存储使用多控制器。存储空间可以通过控制器自带的硬盘槽位或外接扩展硬盘柜提供。传统集中式存储通常使用Raid技术,比如RAID5、RAID6、RAID10等,来保护数据。

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

- 分布式存储的数据冗余技术是跨节点的,例如3副本允许2个节点同时故障而不丢失数据。RAID技术一般由单节点内的若干块容量一致的磁盘组成RAID组,只能容忍磁盘故障,不能容忍节点故障。
- 分布式存储的数据冗余技术采用全局热备的方式,不需要单独的热备盘,所有硬盘都可参与数据读写与数据重构,只要系统中有剩余空间,就可以恢复故障数据。RAID技术一般单节点至少需要准备一块热备盘以应对硬盘故障。
- 当出现硬盘故障时,分布式存储会有多块盘参与数据恢复。RAID模式只有1块热备盘能够写数据。因此分布式存储的数据恢复效率是RAID模式的几十倍,大大减少了数据恢复期间硬盘再次故障的可能性,进一步提升系统安全性。
- 分布式存储不需要额外的硬件支持,RAID模式需要独立的RAID卡。
副本
副本是一种数据保护技术,通过在不同的节点上复制相同的数据来实现数据冗余和高可用性。当一个节点发生故障时,可以使用其他节点上的副本来恢复数据。支持用户设置2~6副本,在生产环境中推荐使用3副本。
纠删码
纠删码 (Erasure Coding,简称EC) 是一种数据保护技术,通过将数据切分为K个数据块,并通过校验算法生成M个校验块,以实现数据的纠错和恢复。与传统的副本技术相比,纠删码可以在保证数据可靠性的同时,节约存储空间和网络带宽。提供三种EC推荐配置:2+1、4+2、8+3,并支持用户自定义EC策略。综合考虑可靠性和性能,推荐用户使用4+2的EC策略。
- 正常场景读写
以服务器级别的4+2 EC策略为例,写入数据时,系统将数据切分为4个相同大小的数据分片,同时通过校验算法生成2个同样大小的校验分片,系统将这6个数据分片随机存入6台服务器中。当任意2台服务器发生故障时,数据仍可正常使用。读取数据时,系统从4台服务器上的不同数据盘中读取数据块,将4个数据块拼装成完整数据后返回给用户。
- 故障场景读写
以服务器级别的4+2 EC策略为例,当故障后的剩余服务器数量小于K+M时,在故障恢复前系统会将新写入的数据存放在剩余的服务器上,保证I/O不中断的同时,可靠性级别也不降低,待故障恢复后,数据冗余策略重新恢复为K+M。读取数据时,系统会从其它正常节点读取数据,通过校验算法恢复数据返回给用户。
- EC策略配置表
EC策略 得盘率 2+1 66.67% 4+2 66.67% 8+3 72.73% 自定义 K/(K+M) Note: K指数据的分片数量,即数据块数量;M指校验数据分片的数量,即校验块数量。
副本和纠删码对比
- 空间利用率:
纠删码的优势较大,以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界面使对应数据盘进入维护模式,该模式下的数据盘将停止服务和数据访问,其上的数据不会进行重平衡。
自动故障检测和报警
自研分布式存储支持自动故障监测和报警机制。该机制监控存储平台系统和各个存储服务器,检测到故障时将自动向平台发送告警消息。用户可另外添加邮箱报警器接收告警消息,以及时采取措施进行故障修复。
同时,检测到故障发生时,支持自动服务重启和数据迁移,最大程度上保障了数据的可靠、可用,从而形成高可靠、高可用的分布式存储系统。
数据重平衡
自研分布式存储支持数据重平衡,即使存储集群中的数据均衡分布在各个存储服务器下的数据盘上,从而提高存储系统的性能和可靠性。
- 能根据存储池设置和存储服务器的负载情况,自动有将数据从负载较高的节点转移到负载较低的节点上,以达到负载均衡的效果。
- 存储集群中有服务器发生故障,或有新服务器加入集群时,将自动进行数据迁移,从而保证数据一致性和可靠性。
手动数据重平衡:
同时支持手动数据重平衡功能,用户可根据实际的数据分布情况,手动进行数据重平衡操作。









