产品特性
数据存储
缓存加速方案
缓存加速方案一般是指使用SSD类的缓存设备,为数据盘的核心设备HDD进行加速的方案。ZStack ZStone通过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等。
ZStack ZStone采用基于权重的优先级队列 (wpq),按照上述的I/O分类,分别存入子队列,每个prior队列在其第一个请求入队时被创建。出队时,采用权重概率的方式确定prior级别,每个队列的优先级prior作为其权重,该prior队列被选中的概率即为其权重占总权重的比例。被选中的prior队列也并不一定能出队请求,还需要根据将要出队的请求大小来确定。
- 低速恢复:低速恢复优先保证业务带宽,恢复所需时间较长。恢复过程中如再次出现硬件故障可能会降低数据安全级别。生产环境下建议选择低速恢复。
- 中速恢复:中速恢复保证业务带宽和恢复带宽同等优先级,恢复所需时间中等,性能饱和情况下可能会增加I/O延时。
- 高速恢复:高速恢复优先保证恢复带宽,恢复所需时间较短,性能饱和情况下可能会影响业务性能。
卷业务QoS
ZStack ZStone支持为块存储卷设置业务QoS,包括最大IOPS、最大读写带宽。用户可通过设置业务QoS,对不同块存储卷的性能进行管控,进而满足多样化的业务性能需求。
- 系统以固定速率生成令牌放入桶中,每一个I/O请求都必须在桶中获取令牌。
- 未获取到令牌的请求需排队获取令牌,以此限制流入系统的平均数据流速。
- 当令牌分发速度小于令牌生成速度时,令牌桶内可积累一些令牌,当短时间内出现突发流量时,允许直接取用桶中令牌。

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

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

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

集中式存储 VS 分布式存储
- 跨节点冗余:分布式存储支持跨节点冗余,例如3副本允许2个节点同时故障而不丢失数据,而RAID技术局限于单节点内磁盘冗余。
- 全局热备与数据恢复:分布式存储无需单独热备盘,所有硬盘参与数据恢复,效率显著高于RAID模式(仅一块热备盘)。同时,分布式存储无需额外硬件支持,而RAID模式需要独立的RAID卡。
副本技术
定义
副本是一种数据保护技术,通过在不同的节点上复制相同的数据来实现数据冗余和高可用性。当一个节点发生故障时,可以使用其他节点上的副本来恢复数据。ZStack ZStone支持用户设置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个存储节点即可满足数据冗余要求。
此外,ZStack ZStone支持折叠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个非监控节点发生故障而不丢失数据。
故障域隔离技术
- 服务器级别:集群内每台服务器为一个故障域,一份数据的不同副本或分片分别存储在不同服务器中。
- 机架级别:集群内每个机架为一个故障域,一份数据的不同副本或分片分别存储在不同机架中。推荐集群规模较大、机架数量较多的情况选择此级别。
- 机房级别:集群内每个机房为一个故障域,一份数据的不同副本或分片分别存储在不同机房中。推荐集群规模大、机房数量较多的情况选择此级别。
通过故障域隔离技术,可将故障对业务的影响限制在某个范围内,避免出现“牵一发而动全身”的情况发生,从而提高业务连续性。
通过基于故障域的扩容技术,配合合理的存储策略,可以将新扩容的节点独立成一个硬盘池,避免了数据的迁移。这种方式能够实现业务的无感扩容,向应用屏蔽了底层存储的变更细节,避免了传统存储变更时需要业务系统同时变更的情况。这样一来,运维人员及业务人员的工作量大大减少,同时也能提高系统的可靠性和性能。
集群硬件拓扑
集群拓扑是对集群物理资源实际部署方式的可视化展示,其中包含了数据中心、机房、机架、服务器等对象的逻辑实体,通过树状图的方式逐层放置,从而描述出从机房到服务器的分布关系。其中每一个树状图都有一个根节点,同时集群拓扑允许多个根节点存在。用户可在拓扑规划完成后,在创建存储池时选择对应级别的数据冗余策略。

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

ZStack Edge集成
4.2.2版本开始,ZStack ZStone支持与ZStack Edge集成,实现ZStack Edge存储层面的统一监控。
集成后,用户可在ZStack Edge bootstrap或UI界面,一键免密登录ZStack ZStone,直接查看和使用ZStack ZStone提供的存储服务,并对存储资源进行实时监控和高效管理。

第三方存储平台集成
5.2.6版本开始,ZStack ZStone支持与第三方存储平台集成,为用户提供统一入口进行跨平台资源的统一管理和监控。
用户可在全局设置中开启多平台添加选项并完成信息配置。集成后,用户无需在不同平台间频繁切换,简化了存储操作流程,提高管理效率。
虚拟化、云原生平台集成
ZStack ZStone的块存储服务主要用于与虚拟化平台、云原生平台集成,为上层业务提供虚拟块设备。
虚拟化平台
- 通过内核态块存储接口对接:
内核态块存储接口运行在物理机操作系统内核态,该接口可将ZStack ZStone虚拟卷映射为物理机操作系统中的块设备,QEMU可通过该接口实现块设备访问。
内核态块存储接口支持的RBD特性有限,且与物理机操作系统内核具有较强的依赖关系,稳定性风险高,不推荐作为产品化方案。
- 通过用户态块存储接口对接:
用户态块存储接口是ZStack ZStone提供的专用于RBD块存储访问的接口,运行在物理机操作系统用户态。QEMU可通过该接口实现对ZStack ZStone块设备的直接访问。
虚拟化平台、云平台推荐使用该方案与ZStack ZStone对接。
- 通过SPDK+用户态块存储接口对接:
SPDK是一种高性能用户态存储栈开发工具库,作用在QEMU和用户态块存储接口之间,QEMU可通过SPDK提供的vhost socket文件间接与用户态块存储接口互动,从而实现对ZStack ZStone块设备的访问。
SPDK具备绕过内核、I/O轮询等技术,从而实现较高的存取速度,但同时,由于SPDK下发的I/O直达硬件,且I/O收割通过轮询硬件实现,引入了硬件资源竞争,可能导致I/O性能下降等问题。
云原生平台
ZStack ZStone支持对接以Kubernetes为核心技术的云原生平台,为上层容器实例提供块设备用作持久卷。
云原生平台集成ZStack ZStone主要基于CSI和CSI插件实现。CSI是标准容器存储接口,CSI插件即实现CSI接口的应用程序。CSI插件运行在云原生平台的多个节点,提供控制服务和卷生命周期管理,能够动态配置ZStack ZStone提供的块设备,将其映射为云原生平台上的数据卷并挂载到工作负载提供存储服务。











