资源虚拟化
计算虚拟化
概述
计算虚拟化是将物理服务器资源通过虚拟化技术抽象成逻辑资源,让一台物理服务器变成多台相互隔离的虚拟服务器,CPU、内存、磁盘、I/O设备等硬件资源变成虚拟化资源池进行统一动态管理,从而提高资源利用率,降低系统管理成本,让IT对业务变化更具适应力。

ZStack ZSphere支持采用基于KVM的硬件虚拟化技术。KVM是一个Linux内核模块,将Linux内核变成一个Hypervisor。KVM在Linux系统内以进程形式出现,由标准Linux调度程序进行调度,因此KVM能够使用Linux内核已有功能,例如:内存管理、CPU调度等。但是,KVM本身仅提供CPU与内存虚拟化,I/O设备虚拟化需结合Qemu才能完成。Qemu是一个用户态的设备模拟器,为虚拟机提供虚拟设备模型,负责各种虚拟设备的创建、调用及管理。

技术特性
CPU虚拟化
在x86体系架构上,CPU一般有4个特权级别:RING0~RING3,用于给操作系统和应用程序访问硬件。在Linux中,仅使用其中2个特权级别:RING0(内核态)、RING3(用户态)。
关于VMX根模式与VMX非根模式。对于硬件辅助虚拟化而言,为能在不对操作系统做任何修改的前提下使用虚拟机,CPU引入2种运行模式:VMX根模式、VMX非根模式。宿主机运行在根模式下,宿主机内核处于RING0,用户态程序处于RING3。虚拟机运行在非根模式下,虚拟机内核处于RING0,用户态程序处于RING3。
关于VM Exit与VM Entry。处于非根模式的虚拟机,当外部中断或缺页异常,或主动调用VMCALL指令来调用VMM服务时,CPU会从非根模式切换至根模式,整个过程称为VM Exit。相反,当VMM通过显式调用VMLAUNCH或VMRESUME指令切换至非根模式时,硬件自动加载虚拟机上下文,运行虚拟机指令,这一转换称为VM Entry。

当虚拟机通过VM Exit从非根模式退出至根模式后,KVM会根据退出原因执行进一步操作,若是I/O操作则交由QEMU处理,若是非I/O操作则由KVM自行处理,处理完成后通过VM Entry再次切入非根模式运行。

内存虚拟化
虚拟机管理器(VMM)负责管理和分配每个虚拟机的物理内存。虚拟机操作系统看到的是一个虚构的虚拟机物理地址空间。操作系统的内存管理模块负责将虚拟机虚拟地址(GVA)映射到虚拟机物理地址(GPA),其指令目标地址也是一个虚拟机物理地址。这样的地址在无虚拟化情况下,其实是实际物理地址。但在有虚拟化情况下,这样的地址不能被直接处理使用,需VMM先将虚拟机物理地址转换成一个主机物理地址(HPA),再交由物理处理器执行。
- 维护虚拟机物理地址到宿主机物理地址之间的映射关系。
- 当虚拟机访问虚拟机物理地址时,根据映射关系,将其转换成宿主机物理地址。

内存的硬件辅助虚拟化使用扩展页表(EPT)技术,通过硬件完成虚拟机虚拟地址到主机物理地址的转换。

设备虚拟化
设备虚拟化方式主要有三种:设备模拟、半虚拟化设备、设备直通。
设备模拟
设备模拟通过QEMU提供的设备模型,可完全模拟出与物理设备一样的接口。因此,在虚拟机操作系统中,使用原生驱动即可使用设备。设备模拟只能模拟出具有基本功能的设备,不支持复杂功能和模型的设备。完全模拟的设备兼容性好,但由于是纯软件模拟,性能相对较低。

半虚拟化设备
半虚拟化设备实现前后端驱动。利用虚拟机中的前端驱动,通过基于事务的通信机制,将请求直接发给宿主机端的后端驱动,从而很大程度上减少上下文切换的开销,性能相比完全设备模拟有较大提升。然而,Virtio后端驱动仍在QEMU中实现,在IO处理过程中会经过用户态与内核态之间的多次切换。为进一步提升性能,可将Virtio后端驱动的功能放至内核态实现,称为Vhost-kernel后端,于是数据仅需经过从用户态到内核态的一次切换,就可完成数据传输,实现性能提升。
随着技术发展,将数据放入用户态处理可得到更灵活的形式。因此,在原有Vhost架构中进行改动,增加Vhost-user后端,搭配DPDK、SPDK中相关用户态函数库,性能进一步提升。

设备直通
设备透传基于硬件的设备虚拟化技术,支持将PCI/PCIe物理设备直接映射到虚拟机的地址空间,在虚拟机中,使用原生设备驱动就可直接使用设备,达到近乎物理设备的性能。物理设备被透传后由虚拟机独享,其它虚拟机无法共享使用该设备。

SR-IOV是由PCI-SIG组织定义的PCIe规范的扩展规范,目的是通过提供一种标准规范,为虚拟机提供独立的内存空间、中断、DMA数据流。 SR-IOV支持单个物理PCIe设备(PF)虚拟出多个虚拟PCIe设备(VF),然后通过设备透传技术将虚拟PCIe设备直通到各虚拟机,以实现单个物理PCIe设备支撑多虚拟机的应用场景。

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

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

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

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

数据存储
缓存加速方案
缓存加速方案一般是指使用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界面使对应数据盘进入维护模式,该模式下的数据盘将停止服务和数据访问,其上的数据不会进行重平衡。
自动故障检测和报警
自研分布式存储支持自动故障监测和报警机制。该机制监控存储平台系统和各个存储服务器,检测到故障时将自动向平台发送告警消息。用户可另外添加邮箱报警器接收告警消息,以及时采取措施进行故障修复。
同时,检测到故障发生时,支持自动服务重启和数据迁移,最大程度上保障了数据的可靠、可用,从而形成高可靠、高可用的分布式存储系统。
数据重平衡
自研分布式存储支持数据重平衡,即使存储集群中的数据均衡分布在各个存储服务器下的数据盘上,从而提高存储系统的性能和可靠性。
- 能根据存储池设置和存储服务器的负载情况,自动有将数据从负载较高的节点转移到负载较低的节点上,以达到负载均衡的效果。
- 存储集群中有服务器发生故障,或有新服务器加入集群时,将自动进行数据迁移,从而保证数据一致性和可靠性。
手动数据重平衡:
同时支持手动数据重平衡功能,用户可根据实际的数据分布情况,手动进行数据重平衡操作。
网络虚拟化
概述
网络虚拟化是一种通过软件技术将网络资源进行抽象及重组的虚拟网络方法。 底层硬件仅需提供基础的数据包转发服务,网络虚拟化可提供多种网络服务,包括数据交换、路由和安全组等,使网络体验同物理网络一样。
ZStack ZSphere将网络模型抽象为分布式交换机和分布式端口组。分布式交换机在数据中心中横跨多台主机,在整个数据中心范围内提供部署,管理和监控虚拟网络的能力。分布式端口组是分布式交换机上的一组虚拟端口的集合,同一端口组下的虚拟机具有统一的网络配置,以满足虚拟机可以在不同主机间迁移。另外平台在分布式端口组上还提供分布式DHCP服务,同时支持为虚拟机配置DNS,以满足数据中心中不同网络场景的需求。
技术特性
分布式交换机
交换机通过主机的MAC地址或IP地址标识主机,以实现主机之间、主机与外部网络之间的网络流量转发和流量控制。在传统数据中心中,主机位置是固定的,交换机和主机的位置关系也是固定的,这意味着交换机的配置不需要经常变化。
- 虚拟机MAC地址或IP地址不能提前预知。
- 虚拟机迁移场景下,虚拟机在物理交换机端口上的配置也需要迁移,可能导致迁移失败。
- 网络流量的源虚拟机和目的虚拟机在同一个主机上时,流量可能不经过交换机,交换机就无法进行流量控制。
ZStack ZSphere引入分布式交换机,提供虚拟机之间、虚拟机和外部网络之间的流量转发和流量控制功能,为用户提供方便灵活、功能丰富的网络功能。
- 虚拟交换机根据MAC地址转发网络流量。
- 虚拟机网卡连接虚拟机和虚拟交换机,为虚拟机流量提供数据通道。
- 主机网卡是虚拟交换机的上行端口,将跨主机的虚拟机流量转发至物理交换机。
安全组
在传统数据中心,网络可分为:信任区域、DMZ区域、非信任区域,通过边界防火墙进行流量控制,保障网络安全。在虚拟化数据中心,边界防火墙可能力不从心,例如:不同用户之间需要实现网络隔离,同一用户的不同业务之间需要访问控制,边界防火墙很难灵活处理这些场景。因此,ZStack ZSphere引入新组件:安全组。安全组是一种分布式防火墙,专注东西向流量管控,支持虚拟机网卡级别的出入流量控制。
- 安全组规则的集合,支持添加、删除、修改规则,实现规则动作的管控。
- 已绑定网卡的集合,支持绑定虚拟机网卡,将安全组规则应用到虚拟机网卡上。
- 安全组未添加任何规则时,除组内成员可互通外,入方向默认拒绝所有流量,出方向允许所有流量。
- 安全组规则支持按需修改,包括:源IP、目标IP、目标端口、协议类型、优先级等。
- 安全组规则支持动态调整优先级,添加规则时可将规则插入到指定优先级,删除规则时优先级会自动调整,规则优先级始终保持连续。
- 虚拟机网卡支持挂载多个安全组,且安全组之间可动态调整优先级,默认情况下先挂载的安全组规则先生效。
技术原理
- 安全组规则组成
- 源:支持源数据(入方向)和目标数据(出方向)。
- 源类型:支持IPv4和IPv6类型。
- 协议类型和端口:支持ICMP、TCP、UDP等。
- 策略:拒绝或允许。
- 安全组规则优先级
- 安全组规则优先级是连续且不重复的(默认规则优先级为0,表示最高优先级),优先级数字越小,表示优先级越高。
- 默认情况下,添加的规则优先级最低。当从指定优先级插入时,后续规则优先级跟随自动调整,保证优先级不重复。
- 当有流量经过虚拟机网卡时,将从最高优先级的规则开始匹配,如果匹配成功则执行规则动作,否则再匹配后续规则。
- 安全组规则导入导出
- 对于已有的安全组内规则,支持一键导出。
- 支持将已导出的安全组规则再重新导入其它安全组,导入时提供规则校验。
- 网卡加载多个安全组
- 一个虚拟机网卡可挂载多个安全组,已挂载的安全组之间支持优先级排序,优先级数字越小,表示优先级越高。
- 当有流量经过虚拟机网卡时,将从最高优先级的安全组开始匹配,如果安全组内规则匹配成功则执行规则动作,否则再进入下一个安全组进行匹配。
- 网卡默认策略
- 默认情况下,网卡的入方向默认策略是允许,出方向默认策略是拒绝。默认策略支持修改。
- 当流量没有匹配到安全组规则时,会执行网卡的默认策略。
应用场景
- 不同业务访问控制以典型的Web应用为例。假定:
- Web虚拟机的TCP 80和443端口允许任意IP地址访问。
- App虚拟机的TCP 8080端口允许来自Web虚拟机的访问。
- DB虚拟机的TCP 3306端口允许来自App虚拟机的访问。
分别为三类业务虚拟机创建安全组,并配置相应规则,可实现不同业务之间的访问控制。
如图 1所示:图 1. 不同业务访问控制 
- 多业务共存上述业务虚拟机除提供业务能力外,还需允许运维控制(假定使用SSH协议),有两种实现方案:
- 方案1:为上述三个安全组分别新增一条规则。
- 方案2:创建一个新安全组,并挂载到上述所有业务虚拟机网卡上。
虚拟机网卡支持挂载多个安全组,且方案2更灵活可控,首选方案2。可为上述每台业务虚拟机网卡配置两个安全组,且支持按需调整安全组优先级以及默认规则。
- 组内虚拟机禁止互访
默认情况下,安全组内的虚拟机之间可互相访问,无任何规则限制。在某些场景下,要求同一安全组内的虚拟机之间不可互相访问,此时可将允许组内互通的默认规则停用。该条默认规则不支持删除。
虚拟资源管理
虚拟机管理
虚拟机调度策略
虚拟机调度策略可为虚拟机分配主机资源编排策略,用于保障业务高性能和高可用。支持将虚拟机加入一个虚拟机调度组,通过为该虚拟机调度组绑定调度策略实现虚拟机调度。
功能原理
- 若绑定互斥虚拟机或聚集虚拟机策略,无需指定主机调度组,虚拟机按照策略及其执行机制分配主机。
- 若绑定虚拟机亲和主机或虚拟机互斥主机调度策略,需指定对应的主机调度组,虚拟机按照策略及其执行机制分配主机。
下文通过四个场景说明四类调度策略的工作原理:
- 强制机制下,虚拟机VM3遵循与组内其他虚拟机强制互斥原则:
- 若主机Host3资源充足,可正常在Host3上启动并运行。
- 若主机Host3资源不足,无法在Host3上启动。
- 优先机制下,虚拟机VM3遵循与组内其他虚拟机尽量互斥原则,优先在Host3上启动:
- 若主机Host3资源充足,可正常在Host3上启动并运行。
- 若主机Host3资源不足,VM3可尝试在其他资源充足的主机上启动。在该场景下,VM3在Host2上启动并运行。

- 强制机制下,虚拟机VM3遵循与组内其他虚拟机强制聚集原则:
- 若主机Host1资源充足,可正常在Host1上启动并运行。
- 若主机Host1资源不足,无法在Host1上启动。
- 优先机制下,虚拟机VM3遵循与组内其他虚拟机尽量聚集原则,优先在Host1上启动:
- 若主机Host1资源充足,可正常在Host1上启动并运行。
- 若主机Host1资源不足,VM3可尝试在其他资源充足的主机上启动。在该场景下,VM3在Host2上启动并运行。

- 强制机制下,虚拟机VM3遵循与主机调度组A内的主机强制互斥原则:
- 若主机Host1资源充足,可正常在Host1上启动并运行。
- 若主机Host1资源不足,无法在Host1上启动。
- 优先机制下,虚拟机VM3遵循与主机调度组A内的主机尽量互斥原则,优先在Host1上启动:
- 若主机Host1资源充足,可正常在Host1上启动并运行。
- 若主机Host1资源不足,VM3可尝试在其他资源充足的主机上启动。在该场景下,VM3在Host2上启动并运行。

- 强制机制下,虚拟机VM3遵循与主机调度组A内的主机强制聚集原则:
- 若主机Host2或Host3资源充足,可正常在Host2或Host3上启动并运行。
- 若主机Host2和Host3资源不足,无法在Host2或Host3上启动。
- 优先机制下,虚拟机VM3遵循与主机调度组A内的主机尽量聚集原则,优先在Host2或Host3上启动:
- 若主机Host2或Host3资源充足,可正常在Host2或Host3上启动并运行。
- 若主机Host2和Host3资源不足,VM6可尝试在其他资源充足的主机上启动。在该场景下,VM3在Host1上启动并运行。

虚拟机克隆
ZStack ZSphere提供两种虚拟机克隆方式以满足不同业务场景需求:全量克隆、快速全量克隆。
全量克隆
全量克隆不与源虚拟机共享数据,而将源虚拟机做成镜像文件后创建新的虚拟机。该源虚拟机镜像是一个完整的镜像文件,包含虚拟机所需所有文件和配置,并保存在镜像存储中,随后将镜像文件推送到数据存储作为克隆虚拟机的镜像缓存,以此来克隆出全新虚拟机。全量克隆的虚拟机不受数据存储限制,克隆出的虚拟机可指定与源虚拟机不同的数据存储来启动。
全量克隆创建的虚拟机是完全隔离且独立的,与源虚拟机没有依赖关系,虚拟机性能完全不受影响。全量克隆通常需要更多存储空间,但在批量全量克隆多台虚拟机时,ZStack ZSphere已做存储优化,新虚拟机镜像缓存仅在数据存储上存储一份,从而避免消耗更多数据存储资源,也加快了批量克隆的虚拟机启动速度。
快速全量克隆
在执行快速全量克隆时,在克隆初始利用链接克隆技术创建出依赖源虚拟机的新虚拟机,以此来满足快速虚拟机启动,随后后台会启动出一个任务来做快照合并,最终会把克隆虚拟机的数据完全独立出来,不依赖于源虚拟机,因此通过快速全量克隆的虚拟机具有启动速度快,数据最终独立的特点,并且克隆完成后虚拟机性能不受影响。
裸金属管理
- 管理网络:用于管理平台相关硬件资源。
- 分布式端口组:用于裸金属主机的业务网络,对外提供应用服务。
- IPMI网络:用于管理节点对裸金属设备与裸金属主机远程开关机、重启、获取硬件信息等操作。
- 部署网络:用于 PXE 服务器通过 DHCP 服务下发 IP 地址,以及通过 TFTP 服务传输镜像。

裸金属管理核心:硬件信息获取、裸金属设备无人值守部署。
- 管理节点通过 PXE 服务器指定裸金属设备通过 PXE 启动。
- PXE 服务器封装 DHCP、TFTP 和镜像存储服务。裸金属设备 PXE 启动后,通过 DHCP 获得 IP 地址,随后从 TFTP 服务器下载pxelinux.0和引导文件,并将内核加载至内存中执行,引导进 LiveCD 系统。
- 在 LiveCD 系统中执行检测脚本,将裸金属设备的硬件信息回传至管理节点。
- 根据回传的硬件信息,对裸金属设备设置预配置模板,包括:分区信息、设置网卡 Bond、IP 地址等。
- 选择一个待安装的操作系统 ISO,即可部署裸金属主机。
- 重启裸金属设备至 PXE 启动,PXE 服务器会预先下载待安装操作系统 ISO,裸金属设备根据预设好的配置模板实行无人值守部署,部署完毕后会自动根据预配置模板配置网卡等信息,至此裸金属主机配置完毕。
- 为更好地运维裸金属主机,PXE 服务器支持下发裸金属监控服务,实现裸金属主机内部数据的实时监控,包括:CPU、内存、磁盘容量、磁盘 I/O、网卡等信息。











