资讯专栏INFORMATION COLUMN

私有云搭建-私有云搭建之存储虚拟化

ernest.wang / 728人阅读

摘要:平台采用分布式存储系统作为虚拟化存储,用于对接虚拟化计算及通用数据存储服务,消除集中式网关,使客户端直接与存储系统进行交互,并以多副本纠删码多级故障域数据重均衡故障数据重建等数据保护机制,确保数据安全性和可用性。

云计算平台通过硬件辅助的虚拟化计算技术最大程度上提高资源利用率和业务运维管理的效率,整体降低 IT 基础设施的总拥有成本,并有效提高业务服务的可用性、可靠性及稳定性。在解决计算资源的同时,企业还需考虑适用于虚拟化计算平台的数据存储,包括存储的安全性、可靠性、可扩展性、易用性、性能及成本等。

虚拟化计算 KVM 平台可对接多种类型的存储系统,如本地磁盘、商业化 SAN 存储设备、NFS 及分布式存储系统,分别解决虚拟化计算在不同应用场景下的数据存储需求。

  • 本地磁盘:服务器上的本地磁盘,通常采用 RAID 条带化保证磁盘数据安全。性能高,扩展性差,虚拟化环境下迁移较为困难,适用于高性能且基本不考虑数据安全业务场景。
  • 商业化存储:即磁盘阵列,通常为软硬一体的单一存储,采用 RAID 保证数据安全。性能高,成本高,需配合共享文件系统进行虚拟化迁移,适用于 Oracle 数据库等大型应用数据存储场景。
  • NFS 系统:共享文件系统,性能较低,易用性较好,无法保证数据安全性,适用于多台虚拟机共享读写的场景
  • 分布式存储系统:软件定义存储,采用通用分布式存储系统的标准,将大量通用 x86 廉价服务器的磁盘资源聚合在一起,提供统一存储服务。通过多副本的方式保证数据安全,高可靠 、高性能、高安全、易于扩展、易于迁移且成本较低,适用于虚拟化、云计算、大数据、企业办公及非结构化数据存储等存储场景。

每一种类型的存储系统,在不同的存储场景下均有优劣势,虚拟化计算平台需根据业务特证选择适当的存储系统,用于提供存储虚拟化功能,在某些特定的业务模式下,可能需要同时提供多种存储系统,用于不同的应用服务。

在传统的存储结构中,客户端与单一入口点的集中式存储组件进行通信,可能会限制存储系统的性能和可伸缩性,同时可能带来单点故障。UCloudStack 平台采用分布式存储系统作为虚拟化存储,用于对接 KVM 虚拟化计算及通用数据存储服务,消除集中式网关,使客户端直接与存储系统进行交互,并以多副本/纠删码、多级故障域、数据重均衡、故障数据重建等数据保护机制,确保数据安全性和可用性。

3.3.1 分布式存储

UCloudStack 云平台基于 Ceph 分布式存储系统适配优化,为虚拟化计算平台提供一套纯软件定义、可部署于 x86 通用服务器的高性能、高可靠、高扩展、高安全、易管理且较低成本的虚拟化存储解决方案,同时具有极大可伸缩性。作为云平台的核心组成部分,为用户提供多种存储服务及 PB 级数据存储能力,适用于虚拟机、数据库等应用场景,满足关键业务的存储需求,保证业务高效稳定且可靠的运行。

分布式存储服务通过将大量 x86 通用服务器的磁盘存储资源融合在一起进行【池化】,构建一个无限可伸缩的统一分布式存储集群,实现对数据中心所有存储资源的统一管理及调度,向虚拟化计算层提供【块】存储接口,供云平台虚拟机或虚拟资源根据自身需求自由分配并使用存储资源池中的存储空间。同时云平台虚拟化通过 iSCSI 协议对接 IPSAN 商业存储设备,将商业存储作为虚拟化后端存储池,提供存储池管理及逻辑卷分配,可直接作为虚拟机的系统盘及数据盘进行使用,即只要支持 iSCSI 协议的存储设备均可作为平台虚拟化的后端存储,适应多种应用场景;可利旧企业用户的集中存储设备,整体节省信息化转型的总拥有成本。

存储功能所见即所得,用户无需关注存储设备的类型和能力,即可在云平台快捷使用虚拟化存储服务,如虚拟磁盘挂载、扩容、增量快照、监控等,云平台用户像使用 x86 服务器的本地硬盘一样的方式使用虚拟磁盘,如格式化、安装操作系统、读写数据等。云平台管理和维护者可以全局统一配置并管理平台整体虚拟化存储资源,如 QoS 限制、存储池扩容、存储规格及存储策略配置。

分布式存储系统可提供块存储、文件存储及对象存储服务,适用于多种数据存储的应用场景,同时可保证数据的安全性及集群服务的可靠性。文件存储和对象存储在一个数据中心部署一套集群,支持机械盘和高性能盘混合部署且可逻辑划分多个存储池,如高性能存储池和容量型存储池。在块存储的部署上,通常推荐使用同一类型的磁盘构建存储集群,如超融合计算节点和独立存储节点自带 SSD 磁盘构建为高性能的存储集群;超融计算节点和独立存储节点自带的 SATA/SAS 磁盘构建为普通性能存储集群。

分布式存储存储系统将集群内的磁盘设备通过 OSD 内建不同的存储资源池,分别提供弹性块存储服务、对象存储及文件存储服务,其中块存储服务可供虚拟机直接挂载使用,在数据写入时通过三副本、写入确认机制及副本分布策略等措施,最大限度保障数据安全性和可用性。文件存储和对象存储可提供诸如 NFS、CIFS、S3 等多种协议接口为应用服务提供非结构化数据存储服务,同时结合多副本及纠删码数据冗余策略满足多种场景下的数据存储和处理,逻辑架构如下:

storage_arch.png

UCloudStack 分布式存储系统是整个云平台架构不可或缺的核心组件,通过分布式存储集群体系结构提供基础存储资源,并支持在线水平扩容,同时融合智能存储集群、超大规模扩展、多副本与纠删码冗余策略、数据重均衡、故障数据重建、数据清洗、自动精简配置及快照等技术,为虚拟化存储提供高性能、高可靠、高扩展、易管理及数据安全性保障,全方面提升存储虚拟化及云平台的服务质量。

3.3.2 智能存储集群

分布式存储集群可包含数千个存储节点,通常至少需要一个监视器和多个 OSD 守护进程才可正常运行及数据复制。分布式智能存储集群消除集中控制网关,使客户端直接和存储单元 OSD 守护进程交互,自动在各存储节点上创建数据副本确保数据安全性和可用性。其中包括的基础概念如下:

  • OSD:通常一个 OSD 对应物理机一块磁盘、一个 RAID Group 或者一个物理存储设备,主要负责数据存储、处理数据复制、恢复、回填及数据重均衡,并负责向监视器报告检测信息。单集群至少需要两个 OSD,并在物理架构可划分为多个故障域(机房、机架、服务器),通过策略配置使多副本位于不同的故障域中。
  • 监视器 Monitor:实现存储集群的状态监控,负责维护存储集群的 Object、PG 及 OSD 间的映射关系图,为数据存储提供强一致性决策,同时为客户端提供数据存储的映射关系。
  • 元数据服务 MDS:实现文件存储服务时,元数据服务(MDS)管理文件元数据。
  • 客户端:部署在服务器上,实现数据切片,通过 CRUSH 算法定位对象位置,并进行对象数据的读写。通常包括块设备、对象存储及文件系统客户端,读/写操作由 OSD 守护进程处理。
  • CRUSH 算法:用于保证数据均匀分布的伪随机算法,OSD 和客户端均使用 CRUSH 算法来按需计算对象的位置信息,为存储集群动态伸缩、重均衡和自修复功能提供支撑。

存储数据时,存储集群从客户端(块设备、对象存储、文件系统)接收数据,并将数据分片为存储池内的对象 Object,每个对象直接存储至 OSD 的裸存储设备上,由 OSD 进程处理裸设备上的读写操作。如下图所示:

object

客户端程序通过与 OSD 或监视器交互获取映射关系数据,在本地通过 CRUSH 算法计算得出对象存储位置后,直接与对应的 OSD 进行通信,完成数据读写操作。为实现分布式存储集群可自主、智能且自我修复的存取数据,智能存储集群通过 CURSH 算法、存储池 Pool、放置组 PG 及 OSD 等多种逻辑概念相互关联承载数据存储流程,逻辑架构图如下:

cephcluster

  • 一个集群可逻辑上划分为多个 Pool ,Pool 是一个命名空间,客户端存储数据时需指定一个 Pool;
  • 一个 Pool 包含若干个逻辑 PG(Placement Group),可定义 Pool 内的 PG 数量和对象副本数量;
  • PG 是对象和 OSD 的中间逻辑分层,写对象数据时,会根据 CRUSH 算法计算每个对象要存储的 PG ;
  • 一个物理文件会被切分为多个 Object ,每个 Object 会被映射到一个 PG ,一个 PG 包含多个 Object ;
  • 一个 PG 可映射到一组 OSD ,其中第一个 OSD 为主 ,其它 OSD 为从,Object 会被均匀分发至一组 OSD 上进行存储;
  • 承载相同 PG 的 OSD 间相互监控存活状态,支持多个 PG 同时映射到一个 OSD 。

在存储集群的机制中,承载相同 PG 的主从 OSD 间需要彼此交换信息,确保彼此的存活状态。客户端首次访问会首先从监视器获取映射关系的数据,存储数据时会与 OSD 对比映射关系数据的版本。由上图示意图得知,一个 OSD 可同时承载多个 PG ,在三副本机制下每个 PG 通常为 3 个 OSD 。如上图所示,数据寻址流程分为三个映射阶段:

  1. 将用户要操作的文件映射为存储集群可处理的 Object ,即将文件按照对象大小进行分片处理;
  2. 通过 CRUSH 算法将所有文件分片的 Object 映射到 PG ;
  3. 将 PG 映射到数据实际存储的 OSD 中 ,最后客户端直接联系主 OSD 进行对象数据存储操作。

分布式存储客户端从监视器获取集群映射关系图,并将对象写入到存储池。集群存储数据的逻辑主要取决于存储池的大小、副本数量、CRUSH 算法规则及PG 数量等。

3.3.3 超大规模扩展

在传统集中式架构中,中心集群组件作为客户端访问集群的单一入口,这将严重影响集群的性能和可扩展性,同时引入单点故障。在分存储存储集群的设计中,存储单元 OSD 和存储客户端能直接感知集群中的其它 OSD 及监视器信息,允许存储客户端直接与存储单元 OSD 交互进行数据读写,同时允许每个 OSD 与监视器及其它节点上的 OSD 直接交互进行数据读写,这种机制使得 OSD 能够充分利用每个节点的 CPU/RAM ,将中心化的任务分摊到各个节点去完成,支持超大规模集群扩展能力,提供 EB 级存储容量。

  • OSD 直接服务于客户端,存储客户端直接与 OSD 进行通信,消除中心控制器及单点故障,提升整体集群的性能及可扩展性。
  • OSD 之间相互监测彼此的健康状态,并主动更新状态给监视器,使监视器可以轻量化部署和运行。
  • OSD 使用 CRUSH 算法,用于计算数据副本的位置,包括数据重平衡。在多副本机制中,客户端将对象写入主 OSD 中后, 主 OSD 通过自身的 CRUSH 映射图识别副本 OSD 并将对象复制到副本 OSD 中;凭借执行数据副本复制的能力,OSD 进程可减轻存储客户端的负担,同时确保高数据可用性和数据安全性。

为消除中心节点,分布式存储客户端和 OSD 均使用 CRUSH 算法按需计算对象的位置信息,避免对监视器上集群映射图的中心依赖,让大部分数据管理任务可以在集群内的客户端和 OSD 上进行分布式处理,提高平台的可伸缩性。

在存储集群扩容层面,支持存储节点水平扩展、增量扩容及数据自动平衡性,同时集群的整体性能随容量的增长呈正向增长,继而保证存储系统的性能及高扩展性。

3.3.4 高可用和高可靠

为构建全平台高可用的分布式存储服务,保证虚拟化计算及应用服务数据存储的可靠性,分布式存储系统从多方面保证存储服务的稳健运行。

  • 基础设施高可用存储集群不强行绑定硬件及品牌,可采用通用服务器及网络设备,支持存储集群异构。物理网络设备支持 10GE/25GE 底层存储堆叠网络架构,同时服务器层面均采用双链路,保证数据读写的 IO 性能及可用性。
  • 存储监视器高可用集群监视器维护存储集群中 Object、PG 及 OSD 间的主映射图,包括集群成员、状态、变更、以及存储集群的整体健康状况等。OSD 和客户端均会通过监视器获取最新集群映射图,为保证平台服务的可用性,支持监视器高可用,当一个监视器因为延时或错误导致状态不一致时,存储系统会通过算法将集群内监视器状态达成一致。
  • 存储接入负载均衡对象存储和文件存储接入网关支持负载均衡服务,保证对象存储和文件存储网关高可用,同时为存储网关提供流量负载分发,提升存储的整体性能。在负载均衡的接入机制下,读写 I/O 会均衡到集群中所有网关服务上,当其中一台网关服务器出现异常时,会自动剔除异常网关节点,屏蔽底层硬件故障,提升业务的可用性。

3.3.5 多冗余策略

3.3.5.1 多副本机制

多副本机制是指将写入的数据保存多份的数据冗余技术,并由存储系统保证多副本数据的一致性。UCloudStack 分布式块存储系统默认采用多副本数据备份机制,写入数据时先向主副本写入数据,由主副本负责向其他副本同步数据,并将每一份数据的副本跨节点、跨机柜、跨数据中心分别存储于不同磁盘上,多维度保证数据安全。存储客户端在读取数据会优先读取主副本的数据,仅当主副本数据故障时,由其它副本提供数据的读取操作。

UCloudStack 分布式存储系统通过多副本、写入确认机制及副本分布策略等措施,最大限度保障数据安全性和可用性。多副本机制存储数据,将自动屏蔽软硬件故障,当磁盘损坏和软件故障导致副本数据丢失,系统自动检测到并自动进行副本数据备份和同步,不会影响业务数据的存储和读写,保证数据安全性和可用性。本章节以三副本为例,具体描述多副本的工作机制:

(1)三副本

用户通过客户端写入分布式存储的数据,会根据 Pool 设置的副本数量 3 写入三份,并按照副本分布策略,分别存储于不同物理主机的磁盘上。分布式存储保证数据安全的副本数量至少为 2 份,以便存储集群可以在降级状态下运行,保证数据安全。

duplicate

(2)写入确认机制

如上图所示,三副本在写入过程中,只有三个写入过程全部被确认,才返回写入完成,确保数据写入的强一致性。

客户端将对象写入到目标 PG 的主 OSD 中,然后主 OSD 通过 GRUSH 映射关系图定位用于存储对象副本的第二个和第三个 OSD ,并将对象数据复到 PG 所对应的两个从 OSD ,当三个对象副本数据均写入完成,最后响应客户端确认对象写入成功。

(3)副本分布策略

分布式存储支持副本数据落盘分布策略(多级故障域),使用 CRUSH 算法根据存储设备的权重值分配数据对象,尽量确保对象数据的均匀分布。平台通过定义存储桶类型,支持节点级、机柜级、数据中心级故障域,可将副本数据分布在不同主机、不同机柜及不同数据中心,避免因单主机、单机柜及单数据中心整体故障造成数据丢失或不可用的故障,保证数据的可用性和安全性。

为保证存储数据的访问时延,通常建议最多将数据副本保存至不同的机柜,若将数据三副本保存至不同的机房,由于网络延时等原因,可能会影响云硬盘的 IO 性能。

Storage_Copy

如上图所示,客户端通过分布式存储系统写入 ABC 三个对象数据,根据 CRUSH 规则定义的故障域,需要将三个对象的副本分别存储于不同的机柜。以 A 对象为例,存储系统提前设置副本分布策略,尽量保证对象副本分布在不同柜柜的服务器 OSD 中,即定义机柜和主机存储桶。当分布式存储系统计算出写入对象的 PG 及对应的 OSD 位置时,会优先将 A 写入到机柜 1 的服务器 OSD 中,同时通过主 OSD 复制副本 A 至机柜 2 的服务器 OSD 中,复制 A 至机柜 3 的服务器 OSD 中 ,数据全部复制写入成功,即返回客户端对象 A 写入成功。

recovery

在存储节点无网络中断或磁盘故障等异常情况时,对象副本数据始终保持为 3 副本。仅当节点发生异常时,副本数量少于 3 时,存储系统会自动进行数据副本重建,以保证数据副本永久为三份,为虚拟化存储数据安全保驾护航。如上图第三个节点发生故障,导致数据 D1-D5 丢失并故障,存储系统会将对象数据的 PG 自动映射一个新的 OSD,并通过其它两个副本自动同步并重建出 D1‘-D5’,以保证数据始终为三副本,保证数据安全。

3.3.5.2 纠删码策略

纠删码(Erasure Coding,EC)是一种数据保护方法,类似商业存储中的 RAID5 技术,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。UCloudStack 分布式对象存储和文件存储可采用纠删码策略进行数据冗余保护。

纠删码策略可兼备数据安全性和磁盘利用率,在分布式存储系统中,纠删码策略将写入的数据进行分片(称为数据块),基于分片编码生成备份冗余数据(称为较验块),最后将原始分片数据和备份数据分别写入不同的存储介质,以保证数据的安全性。同时数据块和校验块可通过故障域分别存储于跨节点、跨机柜、跨数据中心的不同 OSD 磁盘上,多维度保证数据安全。

通过纠删码策略将数据分段的块数称为 K,编码较验块称为 M,所有数据块个数称为 N ,即 N= K+M;基于此磁盘利用率可通过 K/N 获得,如 K=9,M=3 ,N=12 ,则磁盘总空简利用率为 9/12=75% ,即磁盘利用率为 75%。对象存储和文件存储的存储集群根据冗余策略不同,磁盘利用率不同。在三副本机制下,磁盘利用率为集群总容量的三分之一;而在纠删码策略中,利用率与 K+M 的比例值相关,即不同的 K+M 值,会有不同的磁盘利用率,可根据实际使用场景自定义纠删码策略的 K+M 值,平台默认推荐 4+2。

以 4+2 为例,在写入数据时存储系统会先将对象数据映射到一个 PG ,再由 PG 映射到一组 OSD 中(OSD 的数量取决于 K+M 的值,即 OSD 数量与 N 的值相等);同时在 OSD 中选举出主 OSD ,由主 OSD 将对象文件分片为 4 个数据块,在通过 4 个数据块编码出 2 个校验块,最后将 4 个数据块和 2 个校验块分别写入 6 个 OSD 中。在读取数据时,由主 OSD 分别从相同 PG 的其它 OSD 中读取所有需要的分片数据,最后由主 OSD 统一汇总拼拼凑出指定的对象文件,向客户端应答。

由于纠删码是将数据切片并发写入至多个 OSD 磁盘,并无多副本机制中多倍写放大的问题,因此写性能较有优势。而读数据时需要先计算数据分片,再将多个 OSD 中的数据读出来进行汇总,因此读性能相对偏低。

ec

纠删码的原理证明,存储集群中允许损坏的数据块数量小于等于 M(较验块),在存储节点或磁盘无故障或异常时,对象数据块和校验块始终不变。仅当节点发生异常时,数据块和较验块小于 N+M 值时,需要通过剩余的数据块和较验块一起进行解码计算出损坏数据,并将期恢复在正常的 OSD 设备中。如上图 5+3 的 EC 策略中,允许失败的数据为 3 ,即在实际生产环境中可允许失败 3 块磁盘;当分片数据 D1 损坏时,主 OSD 计算获取到对象文件剩余的数据块(D2-D5 )及较验块信息( P1-P3),通过 EC 对数据块和较验块的信息解码,计算出损坏的 D1 数据 D1,最后将 D1 数据恢复至正常的 OSD 设备中,完成损坏数据的恢复。

若在读取数据时正好有一个分片数据损坏,则会同步进行数据解码恢复操作,则读取该数据的时延较大,会影响整体数据的读取性能。

由于纠删码在存取数据时需要消耗更多的计算资源,因此纠删码对节点的计算要求相较多副本高,然纠删码以其灵活多变的数据备份策略、较高的存储空间利用率非常适合存储大量对时延不敏感的数据,如备份数据、办公应用数据、日志数据等。基于此,UCloudStack 的文件存储和对象存储可提供纠删码和多副本两种冗余保护策略,而块存储仅采用多副本机制进行数据安全保护。

3.3.6 数据重均衡

UCloudSack 云平台分布式存储集群在写入数据时,会通过数据分片、CRUSH 映射关系、多副本或纠删码分布策略尽量保证数据对象在存储池中的均衡。随着存储集群的长期运行及对平台的运维管理,可能会导致存储池内的数据失衡,如存储节点和磁盘扩容、存储部分数据被删除、磁盘和主机故障等。

  • 存储节点及磁盘扩容后,平台总存储容量增加,新增容量未承载数据存储,导致集群数据失衡;
  • 用户删除虚拟机或云硬盘数据,导致集群内出现大量空闲空间;
  • 磁盘和主机故障下线后,部分数据对象副本会重建至其它磁盘或主机,故障恢复后处于空闲状态。

为避免扩容及故障导致存储集群数据分布失衡,UCloudStack 分布式存储系统提供数据重均衡能力,在存储集群及磁盘数据发生变更后,通过 CRUSH 规则及时对数据的部分对象进行重新分发和均衡,使存储池中的对象数据尽量均衡,避免产生数据热点及资源浪费,提升存储系统的稳定性及资源利用率。

(1)集群扩容重均衡

平台支持水平扩展存储节点或在线向存储节点中增加磁盘的方式扩容存储集群的容量,即分布式存储集群支持在运行时增加 OSD 进行存储池扩容 。当集群容量达到阈值需要扩容时,可将新磁盘添加为集群的 OSD 并加入到集群的 CRUSH 运行图,平台会按照新 CRUSH 运行图重新均衡集群数据分布,将一些 PG 移入/移出多个 OSD 设备,使集群数据回到均衡状态。如下图所示:

addosd

在数据均衡过程中,仅会将现有 OSD 中的部分 PG 到迁移到新的 OSD 设备,不会迁移所有 PG ,尽量让所有 OSD 均腾出部分容量空间,保证所有 OSD 的对象数据分布相对均衡。如上图中新增 OSD 4 和 OSD 5 后,有三个 PG(PG #4、PG #9、PG #14) 迁移到 OSD 4 ,三个 PG (PG #5、PG #10、PG #15)迁移到 OSD 5  ,使五个 OSD 中映射的 PG 均为 3 个。为避免 PG 迁移导致集群性能整体降低,存储系统会提高用户读写请求的优先级,在系统空闲时间进行 PG 迁移操作。

PG 在迁移过程中,原 OSD 会继续提供服务,直到 PG 迁移完成才将数对象写入新 OSD 设备。

(2)集群容量缩减重均衡

存储集群在运行过程中可能需要缩减集群容量或替换硬件,平台支持在线删除 OSD 及节点下线,用于缩减集群容量或进入运维模式。当 OSD 被在集群中被删除时,存储系统会根据 CRUSH 运行图重新均衡集群数据分布,将被删除的 OSD 上的 PG 迁移至其它相对空闲的 OSD 设备上,使集群回到均衡状态。如下图所示:

delosd

在数据均衡过程中,仅会将被删除 OSD 上的 PG 迁移至相对空闲的 OSD 设备,尽量保证所有 OSD 的对象数据分布相对均衡。如上图中即将被删除的 OSD 4 和 OSD 5 上共映射 6 个 PG ,删除后分别分有 2 个 PG 会被迁移至剩余 3 个 OSD 中,使 3 个 OSD 中映射的 PG 均为 5 个。

(3)故障数据重均衡

分布式存储在长期运行中会存在磁盘、节点的物理损坏、系统崩溃及网络中断等故障,均会中断节点的存储服务。存储集群提供容错方法来管理软硬件,PG 作为对象与 OSD 的中间逻辑层,可保证数据对象不会直接绑死到一个 OSD 设备,意味着集群可在“降级”模式下继续提供服务。详见数据故障重建

通过数据重均衡机制,可支持分布式存储集群平滑扩容,包括横向扩容和纵向扩容,即可以在线添加存储节点及存储磁盘。

3.3.7 数据故障重建

根据多副本和 EC 纠删码的保护机制,存储集群在把数据对象通过 CRUSH 写入到指定 OSD 后,OSD 会通过运行图计算副本或数据块的存储位置,并将数据副本或数据块写入到指定 OSD 设备中,通常数据对象会被分配至不同故障域中,保证数据安全性和可用性。

当磁盘损坏或节点故障时,即代表节点部分/全部 OSD 设备下线或无法为 PG 内对象提供存储服务,同时也表示有部分对象数据的副本数量不完整,如 3 副本可能因为磁盘损坏变为 2 副本。故障时对象数据的 PG 被置为“降级”模式继续提供存储服务,并开始进行数据副本重建操作,按照最新 CRUSH 运行图将故障节点或磁盘上的对象数据重映射到其它 OSD 设备上,即重新复制对象数据的副本至其它 OSD 设备,保证副本数量与存储池设置一致。

在 EC 纠删码策略下,节点或磁盘设备故障时会导致部分数据块或校验块丢失,如 4+2 的纠删码数据会丢失一个数据块或校验块,此时对象数据的 PG 被置为“降级”模式继续提供存储服务,并开始进行纠删数据的解码和恢复操作,按照最新 CRUSH 运行图将故障数据块或校验块数据重新恢复至其它健康的 OSD 设备上,保证对象数据的完整性和可用性。

故障数据重建时会遵循存储集群中配置的故障域(主机级、机柜级及数据中心级),选择符合故障域定义的 OSD 作为故障数据重建的位置,让同一对象数据的多副本或 EC 数据间位置互斥,避免数据块均位于同一个故障域,保证数据安全性和可靠性。同时为提高故障数据的重建速度,多个故障数据重建任务的 I/O 会并发进行,实现故障数据的快速重建。

故障节点或磁盘恢复后,OSD 被重新加入至集群的 CRUSH 运行图,平台会按照新 CRUSH 运行图重新均衡集群数据分布,将一些 PG 移入/移出多个 OSD 设备,使集群数据回到均衡状态。为保证存储集群的运营性能,副本或纠删码 EC 数据恢复及迁移时,会限制恢复请求数、线程数、对象块尺寸,并提高用户读写请求的优先级,保证集群可用性和运行性能。

3.3.8 数据清洗

分布式存储集群在长期运行及数据重平衡的过程中,可能会产生一些脏数据、缺陷文件及系统错误数据。如一块 OSD 磁盘损坏,集群在重均衡后重建数据至其它 OSD 设备,当故障 OSD 设备恢复后可能还存储着之前数据的副本,这些副本数据在集群重新平衡时需及时进行清洗。

分布式存储的 OSD 守护进程可进行 PG 内对象的清洗,即 OSD 会比较 PG 内不同 OSD 的各对象副本元数据,如果发现有脏数据、文件系统错误及磁盘坏扇区,会对其进行深度清洗,以确保数据的完整性。

3.3.9 自动精简配置

自动精简配置(Thin Provisioning),又称【超额申请】或【运行时空间】,是一种利用虚拟化技术减少物理存储部署的技术。通过自动精简配置,可以用较小的物理容量提供较大容量的虚拟存储空间,且真实的物理容量会随着数据量的增长及时扩展,可最大限度提升存储空间的利用率,并带来更大的投资回报。

UCloudStack 云平台分布式存储系统支持自动精简配置,在创建块存储服务时,分配逻辑虚拟容量呈现给用户,当用户向逻辑存储容量中写入数据时,按照存储容量分配策略从物理空间分配实际容量。如一个用户创建的云硬盘为 1TB 容量,存储系统会为用户分配并呈现 1TB 的逻辑卷,仅当用户在云硬盘中写入数据时,才会真正的分配物理磁盘容量。若用户在云硬盘上存储的数据为 100GB ,则云硬盘仅使用存储池的 100GB 容量,剩余的 900GB 容量可以供其它用户使用。

云平台分布式存储系统支持对真实物理容量的监控,可提供真实物理已使用容量和逻辑的已分配容量。通常建议真实已使用容量超过总容量的 70% 时对存储集群进行扩容。自动精简配置类似 CPU 超分的概念,即可供租户创建使用的存储容量可大于物理总容量,自动按需分配物理存储空间给块存储设备,消除已分配但未使用的存储空间浪费。

通过自动精简配置,平台管理员无需对业务存储规模进行细化且准确预判,更不需提前为每个业务做精细的空间资源规划和准备,配合逻辑存储卷的容量分配策略,有效提升运维效率及存储空间的整体利用率。

3.3.10 存储功能简介

UCloudStack 通过软件定义的分布式存储重新定义数据存储服务,基于通用服务器构建统一存储层,为应用提供块、对象及文件存储服务,同时提供多种数据接口,用户无需关注底层存储设备及架构,即可在云平台构建并使用存储服务,适用于虚拟化、云计算、大数据、物联网及企业应用等使用场景。

3.3.10.1 块存储服务

UCloudStack 基于分布式存储系统为云平台租户提供块设备,即云硬盘服务,为计算虚拟化的虚拟机提供持久化存储空间的块设备。具有独立的生命周期,支持随意绑定/解绑至多个虚拟机使用,并能够在存储空间不足时对云硬盘进行扩容,基于网络分布式访问,为云主机提供高安全、高可靠、高性能及可扩展的数据磁盘。

云平台为租户提供普通和高性能两种架构类型的云硬盘,普通云硬盘使用 SATA/SAS 磁盘作为存储介质,性能型云硬盘使用 SSD/NVME 磁盘作为存储介质。云硬盘数据均通过 PG 映射及三副本机制进行存储,并在分布式存储系统的基础之上通过块存储系统接口为用户提供云硬盘资源及全生命周期管理。

支持组建多个存储集群,如 SATA 存储集群和 SSD 存储集群,并支持虚拟机跨集群挂载集群上的块存储服务。

  • 分布式块存储服务直接通过物理网络进行挂载,无需通过 overlay 网络进行挂载和传输。
  • 通过 libvirt 融合分布式存储 rbd 和 qemu ,qemu 通过 librbd 操作分布式存储。
  • 虚拟化进程与分布式存储进程通过本机 & 跨物理机内网进行通信。

不同存储集群间,对象数据的存储完全隔离。一个存储集群中不同块存储设备的存储策略完全隔离,互不干扰。分布式存储系统为虚拟机系统盘、镜像及云硬盘提供统一存储及管理,提高虚拟机与系统盘、云硬盘的数据传输效率,实现虚拟机快速创建及恢复,并支持系统盘和云硬盘的在线快速扩容和迁移。

在业务数据安全方面,云平台分布式存储支持磁盘快照能力,可降低因误操作、版本升级等导致的数据丢失风险,是平台保证数据安全的一个重要措施。支持对虚拟机的系统盘和数据盘进行手动或定时快照,在数据丢失或损坏时,可通过快照快速恢复本地业务的数据,实现业务分钟级恢复,包括数据库数据、应用数据及文件目录数据等。

3.3.10.2 块存储数据存储机制

私有云的块存储服务采用分布式统一存储系统,由统一存储提供 RBD 接口为虚拟机提供系统盘、镜像及云硬盘服务。本节通过块存储数据存储架构、块存储数据 IO 流程及数据落盘管理流程对数据存储及删除机制进行说明。

(1)块存储数据存储架构

虚拟机和云硬盘创建后,会在分布式存储系统中分别生成一个 RBD 块存储设备,即 KVM 引擎客户端读写数据的载体,同时针对一个块存储设备会生成 RBDID 映射对象、元数据对象及数据分片对象。

  • RBDID 映射对象:指每个 RBD 块存储设备在存储系统中映射的 ID,作为全局唯一标识符,如 RBD0 对应的标识符为 RBD00001 。
  • 元数据对象:指 RBD 块存储设备的元数据描述信息,包括块设备的创建时间、更新时间、属性、容量等。
  • 数据分片对象:RBD 块存储设备的数据分片对象文件,每个分片默认为 4MB ,分片数量取决于 RBD 设备的大小,如 400MB 的云硬盘,分片数量即为 100 个对象文件。

所有的对象文件分别会通过算法计算对象的 PG 存储放置组,三副本模式下,一个放置组通常对应三个磁盘设备,即 RBDID 对象、元数据对象及数据分片的所有对象均会对应一个放置组,同时会将对象数据写入放置组对应的三个磁盘设备中。

(2)块存储数据 IO 流程

虚拟机和云硬盘的虚拟化客户端在写数据至 RBD 块设备时,会自动对数据进行切片操作。如上图中 RBD 块设备为 RBD0,每个分片大小为 4MB ,即会动将写入的数据切分为 4M 大小的对象文件,同时包括元数据对象及 RBDID 映射对象。每个对象文件都有一个名字,即 rdb 设备+object+序号,如 rbd0.object0 。

每一个 rbd.objectn 的对象文件通过放置组进行副本位置的分配,放置组通过 Cursh 算法定位出三个磁盘设备,作为对象文件的存储位置,即数据及元数据会首先进行对象文件的拆分,并根据放置组及磁盘设备的对应关系,分别存储至存储系统中的所有磁盘中。

(3)数据落盘及管理流程

分布式存储系统使用裸盘进行磁盘管理及数据落盘操作,在进行对象文件 rbd.objectn 文件的存储和落盘时,会通过存储管理系统将每一个对象文件再次进行拆分进行存储,即通过位图的方式计算拆分后文件的在物理磁盘上的存储位置,将每个 4MB 对象文件拆分后存储至磁盘设备中,默认拆分大小为 32KB 。

在写数据时根据位图计算出 32KB 文件在磁盘介质上的存储位置,同时在位置上将占用的位置标示为 1(占用),未被占用的磁盘位置标示为 0 (空闲)。

整体存储数据的过程,会将文件拆成 4MB 大小的对象文件,对应至不同的磁盘设备;同时在落盘时再次将 4MB 文件拆分成 32KB 大小的块存储至磁盘设备中。

(4)删除数据机制

根据上面存储数据和落盘状况,存储在分布式存储系统中的文件被两次拆分成 32KB 的块文件,完全打散写入至整个存储集群的所有磁盘中,包括存储文件的元数据文件;在读取数据或找回数据时,需通过元数据计算数据是由哪些对象文件组成 ,同时需要结合磁盘位图计算对象数据中由哪些 32KB 的块数据组成,即其中一个 32KB 的数据是无法读取或恢复一个文件,必须将文件打散存储在存储集群中所有磁盘的 32KB 数据组合为一个对象文件,再通过元数据拼接对象文件,才可读取和恢复一个文件。

在平台上删除虚拟机、云硬盘或删除虚拟机中的文件时,存储系统会将文件的元数据进行删除,同时到磁盘管理的位图中将相关的 32KB 块置为 0(仅将块置为空闲,不真正清除数据),即用于恢复数据和读取数据的元数据被清除,同时 32KB 的块被置为空闲,可以被其它数据占用和写入。

  • 若 32KB 块空间被其它数据占用后,则之前的数据会被新的数据覆盖;
  • 若 32 KB 块空间未被其它数据占用,则可通过恢复软件找回的 32KB 数据,但 32KB 数据由于无元数据及位图,无法找出其它关联的 32KB 数据及相对应的对象文件,保证数据的安全性。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/125813.html

相关文章

  • 私有怎么搭建智能调度

    摘要:智能调度系统实时监测集群所有计算节点计算存储网络等负载信息,作为虚拟机调度和管理的数据依据。当有新的虚拟资源需要部署时,调度系统会优先选择低负荷节点进行部署,确保整个集群节点的负载。智能调度是 UCloudStack 平台虚拟机资源调度管理的核心,由调度模块负责调度任务的控制和管理,用于决策虚拟机运行在哪一台物理服务器上,同时管理虚拟机状态及迁移计划,保证虚拟机可用性和可靠性。智能调度系统实...

    ernest.wang 评论0 收藏0
  • 搭建私有平台(平台技术架构计算拟化)

    摘要:计算虚拟化采用和等组件及技术,将通用裸金属架构的服务器资源进行抽象,以虚拟机的方式呈现给用户。计算虚拟化是企业专有云平台的服务器虚拟化组件,是整个云平台架构的核心组件。平台默认不支持虚拟化,如需虚拟化能力,需购买虚拟化授权。UCloudStack 平台基于 UCloud 公有云平台,复用公有云核心组件,具备计算虚拟化、智能调度、存储虚拟化、网络虚拟化的基础能力,为用户提供软件定义的计算、存储...

    ernest.wang 评论0 收藏0
  • 传统自建私有有哪些痛点?UCloud企业私有UCloudStack产品优势、体系、架构&

    摘要:立即咨询产品文档优刻得上线了混合云自建机房火爆预售官方补贴活动中针对企业私有云产品作了介绍,老刘博客本篇文章分享给大家有关企业私有云产品优势体系架构超融合一体机机型和交付方式。快速了解企业私有云解决方案及应用场景。UCloudStack企业私有云平台,是基于UCloud公有云8年+的运营经验,输出的适配企业私有场景的云计算解决方案。提供虚拟化、SDN 网络、分布式存储、数据库缓存等核心服务的...

    Tecode 评论0 收藏0
  • 搭建私有存储-UCloudStack私有核心功能概念

    摘要:集群默认对所有租户开放权限,平台支持对存储集群进行权限控制,用于将部分物理存储资源独享给一个或部分租户使用,适用于专属私有云场景。支持租户将有权限的存储卷信息作为虚拟机的系统盘,使虚拟机直接运行直商业存储中,提升性能。4.1.1 地域地域 ( Region ) 指 UCloudStack 云平台物理数据中心的地理区域,如上海、北京、杭州等。不同地域间完全物理隔离,云平台资源创建后不能更换地域...

    ernest.wang 评论0 收藏0
  • Serverless系列 | 计算究竟如何进化出了Serverless?

    摘要:导读近期灵雀云技术专家邵明岐翻译了所著的一书的部分内容,可以说是对科普与观察的上佳素材。的另一半是是的另一种形式,概念上容易混淆的地方在于,有时候将自己的服务,,称为。 导读:近期灵雀云技术专家邵明岐翻译了Mike Roberts & John Chapin所著的《What is serverless》一书的部分内容,可以说是对Serverless科普与观察的上佳素材。本文为第1篇,他...

    yanbingyun1990 评论0 收藏0

发表评论

0条评论

ernest.wang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<