可靠性设计

可靠性设计用于说明 ZCF 架构中各能力域的高可用与数据保护机制。其中,云平台承载云主机和网络服务等业务负载可靠性能力,存储服务承载数据冗余和故障自愈能力,容器服务承载容器集群高可用能力,共同降低故障场景下的业务中断和数据丢失风险。

业务负载高可用

业务负载高可用覆盖云主机和容器集群两类承载对象。云主机高可用用于在物理机或云主机故障时恢复业务运行,容器集群高可用用于保障 Kubernetes 管理节点和关键组件持续可用。

云主机高可用

云主机高可用指平台检测到云主机故障后,自动在健康的物理机重新启动该云主机的机制。该机制可降低云主机宕机时间,保障业务连续性,且整个过程不依赖专有硬件。

云平台提供两种高可用模式:
  • HostFailure:当云主机所在物理机发生故障时,执行高可用。该模式默认开启,主要用于处理物理机断电等底层故障。
  • NeverStop:保证云主机永不停机(不包含手动关机场景),主要用于处理上层可见的云主机故障。该模式支持用户自定义配置。

前提条件

执行云主机高可用依赖以下前提条件:
  • 存储:云主机使用共享存储。如使用本地存储,物理机发生故障时,云主机无法高可用迁移到其他物理机。
  • 计算资源:确保计算资源充足,云主机可找到健康的物理机启动。
  • 策略设置:启用全局云主机高可用策略,并将云主机高可用模式设置为NeverStop

实现原理

云主机高可用流程由管理节点和物理机 agent 协作完成:
  • 管理节点:负责处理云主机故障信息,并调度故障检测、恢复任务。管理节点定期获取云主机状态,当云主机处于停止状态时,将尝试启动该云主机。
  • 物理机 agent:负责汇报云主机故障信息,执行故障检测和 Fencer 机制,定期检查云主机网络及存储状态,检测到故障时,物理机 agent 将强制终止当前云主机进程,并由管理节点在健康物理机上重新启动。

关于故障检测

通过网络、I/O 心跳两种机制进行物理机故障检测:
  • 网络检测:
    • 检查管理网络:通过管理网连接状态,判断物理机是否故障:
      • 检查管理节点和当前物理机间的管理网络心跳,快速发现物理机管理网络连接异常。
      • 管理节点通过其他健康的物理机检查疑似异常的物理机,判断该物理机是否彻底从管理网络断开。
    • 检查物理机与共享存储的网络连接状态。
    • 检查物理机业务网口状态。
  • I/O 心跳检测:通过存储层面的心跳记录检查物理机磁盘 I/O 是否正常。如 I/O 心跳检测与(管理)网络检测结果冲突,以 I/O 心跳检测结果为准:
    • SAN 存储:检测 sanlock 心跳记录是否按时更新。
    • Ceph 存储:检测自定义 host 心跳记录和云盘对应的 RBD Watcher。
    • 多存储场景(即云主机根云盘、数据盘使用不同主存储):以根云盘所在主存储记录为准。

关于防脑裂

为防止高可用过程中,因网络分区导致云主机脑裂(即不同物理机上同时运行同一个云主机进程),引入 Fencer 机制,当检测到故障时,将强制终止相关的云主机进程。

关于故障恢复与调度

故障恢复由 Checker 负责,云主机进程强制终止后,Checker 将在健康的物理机重新启动该云主机,与 Fencer 形成闭环,确保云主机只在一台物理机上运行。

图 1. 云主机高可用流程


容器集群高可用

容器服务底座 Kubernetes 集群的管理节点高可用采用 Kubernetes 官方推荐的高可用方案设计,由三台管理节点组成容器服务集群,每个管理节点主要包含 kube-apiserver、kube-scheduler、kube-controller-manager 三个组件。同时每个管理节点包含一个 etcd 节点,有三台 etcd 节点组成的集群作为 Kubernetes 的元数据存储,实现集群数据的高度可靠性和一致性。

图 2. Kubernetes 高可用


网络高可用

网络高可用面向物理链路、基础网络服务和网络服务实例故障场景,保障业务网络持续运行,主要包括物理机网络高可用和网络服务高可用。

物理机网络高可用

物理机网络高可用由交换机侧链路冗余和物理机侧网卡 Bonding 共同实现。交换机侧负责提供链路和设备冗余,物理机侧将多张网卡绑定为一个逻辑接口,两者配合降低单网卡、单链路或单交换机故障对业务网络的影响。

交换机侧高可用:堆叠/M-LAG

交换机侧高可用主要通过堆叠和 M-LAG 技术实现。堆叠将多台交换机虚拟化为一个逻辑设备;M-LAG 在多台独立运行的交换机之间建立跨设备链路聚合,实现链路冗余。通过堆叠或 M-LAG 可实现以下目标:

  • 交换机高可用:任一交换机故障时,流量可切换至其他交换机。
  • 链路无环路:基于 LACP 协议管理链路聚合,降低多链路转发产生环路的风险。
  • 带宽提升:聚合多条物理链路,提高网络总带宽。

物理机侧高可用:网卡 Bonding

物理机侧高可用主要通过网卡 Bonding 实现。Bonding 将物理机的多张网卡绑定为一个逻辑接口,并与交换机侧堆叠或 M-LAG 配合,提供链路冗余和带宽聚合能力。常用模式包括模式 1(active-backup)和模式 4(802.3ad)。

  • 模式 1(active-backup):同一时刻只有一张网卡处于活跃状态,其他网卡处于备用状态。主网卡或主链路故障时,流量可切换到备用链路。
  • 模式 4(802.3ad):多张网卡通过 LACP 协议形成逻辑链路组(LAG),由交换机与物理机 Bonding 协同实现链路冗余和带宽聚合。
图 3. 物理机网络高可用


网络服务高可用

网络服务包括基本网络服务(如 DHCP)和由 VPC 路由器或负载均衡实例提供的其他网络服务(如负载均衡、端口转发等)。

分布式 DHCP

云平台采用分布式 DHCP 技术,将 DHCP 服务下沉到每台物理机,消除单点故障风险。其工作流程如下:
  1. 每台物理机均运行 dnsmasq 进程,为其上云主机提供 DHCP 服务。
  2. 云主机启动后,管理节点将其 IP/MAC/DNS 等信息下发到物理机 agent。
  3. 物理机 agent 将信息写入本地 DHCP 服务端配置文件。
  4. 云主机发送 DHCP 广播请求,本地 DHCP 服务端接收并处理请求。

在该模式下,DHCP 服务不依赖中心节点,管理节点故障不影响已有云主机正常获取 IP 地址。

图 4. 分布式 DHCP 架构


图 5. 云主机地址分配过程


其他网络服务

其他网络服务主要由 VPC 路由器或负载均衡实例提供,云平台通过 VPC 路由器或负载均衡实例高可用保障网络服务高可用。

VPC 路由器高可用

VPC 路由器支持双机主备模式,即部署一对互为主备的 VPC 路由器,形成高可用组。配置变化实时同步主备路由器,确保主备路由器配置一致。当主路由器状态异常时,将自动切换至备路由器,保证业务持续运行。主备路由器建议分别部署在不同的物理机,进一步避免单点故障。

VPC 路由器高可用主要通过 Keepalived 实现。Keepalived 基于 VRRP 协议监控和维护主备路由器状态:
  • 状态监控:
    • 心跳检测:主路由器定期通过 VRRP 通告发送心跳给备路由器。
    • ZVR 监控:监控 ZVR(ZStack VPC Router)进程状态。
  • 故障检测:当出现以下任一情况时,认定主路由器故障:
    • 备路由器在指定时间内未收到心跳。
    • 主路由器 ZVR 进程异常。
    • 主路由器监控 IP 不可达。
  • 自动切换:当主路由器故障,且备路由器监控 IP 可达时,备路由器将接管 VIP,升级为新的主路由器,提供网络服务。
图 6. VPC 路由器高可用架构


负载均衡实例高可用

负载均衡实例高可用和 VPC 路由器高可用机制基本相同:部署一对互为主备的负载均衡实例,形成高可用组,并通过 Keepalived 监控主备实例状态,当主实例故障时,将自动切换至备实例,保障业务持续运行。

此外,主备负载均衡实例通过双层机制保障配置一致:
  • 配置同步:配置变化在高可用组层面触发,先同步至主实例,再异步同步至备实例,确保主备实例配置一致。
  • 一致性检查:定期检查主备实例是否与高可用组配置版本一致,自动补充未完成任务或全量下发配置,避免同步遗漏。

存储可靠性

存储可靠性围绕数据冗余、故障域隔离、一致性检查、故障检测和数据重建等能力展开,用于保障存储服务在硬件故障、节点异常和容量变化等场景下持续提供数据访问能力。本节以 ZStack ZStone 为例,介绍分布式存储在 ZCF 架构中的可靠性设计。

数据冗余

概述

数据冗余技术是存储系统实现高可用性、数据保护和业务连续性的基石。在面对日益增长的数据量、复杂的应用场景以及潜在的硬件故障、网络中断、人为误操作等多种威胁时,恰当的数据冗余策略能够为用户提供强有力的数据保护屏障,确保业务连续性和数据价值的最大化。本节将简要对比集中式存储与分布式存储的冗余技术特点,并以 ZStack ZStone 为例介绍副本与纠删码(EC)两种核心数据安全策略。

集中式存储与分布式存储对比

集中式存储

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

图 7. 集中式存储


分布式存储

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

图 8. 分布式存储


集中式存储 VS 分布式存储

  • 跨节点冗余:分布式存储支持跨节点冗余,例如 3 副本允许 2 个节点同时故障而不丢失数据,而 RAID 技术局限于单节点内磁盘冗余。
  • 全局热备与数据恢复:分布式存储无需单独热备盘,所有硬盘参与数据恢复,效率显著高于 RAID 模式(仅一块热备盘)。同时,分布式存储无需额外硬件支持,而 RAID 模式需要独立的 RAID 卡。

副本技术

定义

副本是一种数据保护技术,通过在不同的节点上复制相同的数据来实现数据冗余和高可用性。当一个节点发生故障时,可以使用其他节点上的副本来恢复数据。支持用户设置 2~6 副本,在生产环境中推荐使用 3 副本。

读写原理
  • 正常场景读写

    以服务器级别的 3 副本冗余策略为例,写入数据时,将被系统拷贝成 3 份相同的副本,分别存储于三台不同的服务器上的数据盘中。读取数据时,系统将从任意一台服务器上读取数据并返回给用户。

    图 9. 三副本正常场景读写


  • 故障场景读写

    以服务器级别的 3 副本冗余策略为例,当服务器 C 故障后,系统将在剩余的 2 台服务器中存储副本。读取数据时,当服务器 C 故障后,系统将在剩余 2 台服务器中读取 1 个副本返回给用户。

    图 10. 三副本故障场景读写


纠删码技术

概述

纠删码 (Erasure Coding,简称 EC) 是一种数据保护技术,通过将数据切分为 K 个数据块,并通过校验算法生成 M 个校验块,以实现数据的纠错和恢复。与传统的副本技术相比,纠删码可以在保证数据可靠性的同时,节约存储空间和网络带宽。
  • 标准 EC(K+M):K 指数据的切片数量,M 指校验数据的数量,表示冗余能力为允许 M 个故障域同时坏掉,而数据正常使用。
  • 折叠 EC(K+M:B):K 指数据的切片数量,M:B 指校验数据的数量,表示冗余能力为允许 M 个硬盘或 B 个故障域同时坏掉,而数据正常使用。

策略类型

分布式存储提供以下 EC 策略:
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 个数据块拼装成完整数据后返回给用户。

    图 11. EC (4+2)正常场景写数据


    图 12. EC (4+2)正常场景读数据


  • 故障场景读写

    标准 EC (K+M):以故障域为服务器级别的 4+2 EC 策略为例,当故障后的剩余服务器数量小于 K+M 时,在故障恢复前系统会将新写入的数据存放在剩余的服务器上,保证 I/O 不中断的同时,可靠性级别也不降低,待故障恢复后,数据冗余策略重新恢复为 K+M。读取数据时,系统会从其它正常服务器中读取数据,通过校验算法恢复数据返回给用户。

    图 13. EC (4+2)故障场景写数据


    图 14. EC (4+2)故障场景读数据


折叠 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 个数据块拼装成完整数据后返回给用户。

    图 15. EC (4+2:1)正常场景写数据


    图 16. EC (4+2:1) 正常场景读数据


  • 故障场景读写

    折叠 EC (K+M:B):以故障域为服务器级别的 4+2:1 EC 策略为例,当故障 1 台服务器或 M 块硬盘后,系统仍将按照 K+M 个数据块和校验块写入剩余正常服务器中。读取数据时,系统会从其它正常服务器中读取数据,通过校验算法恢复数据返回给用户。

    图 17. EC (4+2:1)故障场景读数据


副本和纠删码对比

用户可根据实际业务需求选择副本或纠删码,二者在不同场景中有各自的优势:
  • 空间利用率:纠删码的优势较大,以 4+2 的 EC 策略为例,其得盘率约为 66%,而 3 副本的空间利用率仅为 33.3%。
  • 读写性能:副本和纠删码的读写性能在小块读写场景下有较大差异,在大块场景下,两者性能差距会逐渐缩小。纠删码在数据写入时涉及数据校验,且可能产生写惩罚,在数据读取时,因横跨多个节点,任何一个节点时延过高都可能对读写性能造成很大影响。而副本在数据读取时只需要读取 1 个完整分片即可,不涉及节点数据拼接。
  • 重构性能:副本的优势往往更大,因为不涉及数据校验,只是单纯的数据拷贝,所以速度较快。而纠删码的重构涉及反向校验的计算过程,所需的读写数据量和 CPU 计算消耗都会更大。
  • 容错性能:两种策略各有优劣势。副本方面,多副本技术可以允许(副本数-1)个非监控节点同时故障而不丢失数据;纠删码方面,以 4+2 的 EC 策略为例,可以允许 2 个非监控节点发生故障而不丢失数据。

故障域隔离

故障域是集群数据分布的最小单元。存储数据时,一份数据的不同副本或分片会被分别存储在不同故障域内,根据数据冗余策略配置,允许一定数量的故障域故障而不丢失数据,从而保障数据安全。支持服务器、机架、机房三种数据冗余级别:
  • 服务器级别:集群内每台服务器为一个故障域,一份数据的不同副本或分片分别存储在不同服务器中。
  • 机架级别:集群内每个机架为一个故障域,一份数据的不同副本或分片分别存储在不同机架中。推荐集群规模较大、机架数量较多的情况选择此级别。
  • 机房级别:集群内每个机房为一个故障域,一份数据的不同副本或分片分别存储在不同机房中。推荐集群规模大、机房数量较多的情况选择此级别。
图 18. 服务器级别故障域


图 19. 机架级别故障域


图 20. 机房级别故障域


通过故障域隔离技术,可将故障对业务的影响限制在某个范围内,避免出现“牵一发而动全身”的情况发生,从而提高业务连续性。

通过基于故障域的扩容技术,配合合理的存储策略,可以将新扩容的节点独立成一个硬盘池,避免了数据的迁移。这种方式能够实现业务的无感扩容,向应用屏蔽了底层存储的变更细节,避免了传统存储变更时需要业务系统同时变更的情况。这样一来,运维人员及业务人员的工作量大大减少,同时也能提高系统的可靠性和性能。

数据一致性检查

分布式存储通过 Scrub 机制在后台扫描数据,用于发现并处理数据一致性问题。数据一致性检查是周期性行为,分为 Scrub 和 Deep-Scrub 两种类型。
  • Scrub 检查:针对元数据,其特点是执行时间短且执行周期频繁,建议每天执行数据一致性检查。支持自定义 Scrub 时间。
  • Deep-Scrub 检查:针对数据,其特点是执行时间较长且对 I/O 有一定压力,建议在业务量低谷时进行。若超过 30 天未完成一次 Deep-Scrub 检查,将发出告警提示。

故障检测与自愈

存储服务支持自动故障监测和报警机制。该机制监控存储系统和各个存储服务器,检测到故障时将自动向平台发送告警消息。用户可另外添加邮箱报警器接收告警消息,以及时采取措施进行故障修复。

同时,检测到故障发生时,支持自动服务重启和数据迁移,最大程度上保障了数据的可靠、可用,从而形成高可靠、高可用的分布式存储系统。

数据重平衡

分布式存储支持数据重平衡,使存储集群中的数据均衡分布在各个存储服务器下的数据盘上,从而提高存储系统的性能和可靠性。

自动数据重平衡:
  • 能根据存储池设置和存储服务器的负载情况,自动有将数据从负载较高的节点转移到负载较低的节点上,以达到负载均衡的效果。
  • 存储集群中有服务器发生故障,或有新服务器加入集群时,将自动进行数据迁移,从而保证数据一致性和可靠性。

手动数据重平衡:

同时支持手动数据重平衡功能,用户可根据实际的数据分布情况,手动进行数据重平衡操作。

数据保护与恢复

数据保护与恢复覆盖快照、灾备、CDP 和系统配置备份等能力,用于在误操作、系统故障或灾难场景下保留可恢复的数据状态。

快照管理

云平台支持 ROW(Redirect-On-Write,写时重定向)以及 COW(Copy-On-Write)快照机制。
  • 集中式存储快照机制:本地存储/NFS/Shared Mount Point/Shared Block 使用 QCOW2 外部快照(External Snapshot),属于 ROW 快照机制的一种。
  • 分布式存储快照机制:企业版 Ceph/Vhost/CBD 使用 ROW 快照技术。ZStack ZStone 使用 COW 快照。

集中式存储快照机制

关于 QCOW2 外部快照的说明。

  1. 快照链与快照树

    通常一块磁盘对应一条快照链,支持对一块磁盘创建一棵快照树,快照树的每一个分支都是一条快照链。

    图 21. 快照树


    快照树包括以下信息:
    • 快照链:磁盘的一组快照组成的关系链,快照树的每一个分支都是一条快照链。
    • 快照节点:快照链中的一个节点,表示磁盘的一份快照。
    • 快照容量:快照占用的存储空间。支持查看快照树中所有快照的总容量,以及单个快照节点的容量。
    注:
    • 对于非 Ceph 存储,系统默认每条快照链最多有 128 个节点,用户可在全局设置中,通过修改云盘快照增量的最大数目自行设置快照链的最大长度。对于 Ceph 存储,单盘最大快照数量为 32,包括手动创建及自动创建的快照。
    • 快照链长度达到上限后:
      • 若继续创建自动快照,系统会自动删除最早的自动快照。
      • 若继续创建手动快照,用户需手动删除不需要的快照。
    • 在生产环境中,建议单块磁盘的快照数量尽量控制在 5 以内,快照过多会影响云主机/云盘的 IO 性能、数据安全以及主存储容量。如需长期备份,建议使用灾备服务。
  2. 创建快照

    当一个外部快照被创建,实质是新建一个空白的 qcow2 文件,该空白文件的 backing file 指向旧 qcow2 文件,旧 qcow2 文件置为只读,于是旧 qcow2 文件自身成为一个快照,后续只对新 qcow2 文件写入数据。

    • 基于 backing file 创建单条快照链。
      图 22. 创建快照 单链


      假定已有一个原始镜像(Base),以该原始镜像为模板创建云主机 1,对云主机 1 依次创建快照 1A、快照 1B。
      • 原始镜像:一个已制作好的磁盘镜像文件,包含完整的操作系统以及引导程序,作为 Base(只读)。
      • 云主机 1:新建空白文件 Overlay-1,backing file 指向 Base,Base 保持为只读,于是 Base 成为一个快照,后续只对 Overlay-1 写入数据。
      • 快照 1A:新建空白文件 Overlay-1A,backing file 指向 Overlay-1,Overlay-1 置为只读,于是 Overlay-1 成为一个快照,后续只对 Overlay-1A 写入数据。
      • 快照 1B:新建空白文件 Overlay-1B,backing file 指向 Overlay-1A,Overlay-1A 置为只读,于是 Overlay-1A 成为一个快照,后续只对 Overlay-1B 写入数据。云主机 1 使用的是快照链内最后一个快照 1B 对应的磁盘文件,快照 1B 为 Active。
    • 基于 backing file 创建多条快照链。
      图 23. 创建快照 多链


      假定已有一个原始镜像(Base),以该原始镜像为模板创建云主机 1、云主机 2、云主机 3,对云主机 1 依次创建快照 1A、快照 1B,对云主机 2 创建快照 2A,对云主机 3 创建快照 3A。
      • 原始镜像:一个已制作好的磁盘镜像文件,包含完整的操作系统以及引导程序,作为 Base(只读)。
      • 快照链 1:
        • 云主机 1:新建空白文件 Overlay-1,backing file 指向 Base,Base 保持为只读,于是 Base 成为一个快照,后续只对 Overlay-1 写入数据。
        • 快照 1A:新建空白文件 Overlay-1A,backing file 指向 Overlay-1,Overlay-1 置为只读,于是 Overlay-1 成为一个快照,后续只对 Overlay-1A 写入数据。
        • 快照 1B:新建空白文件 Overlay-1B,backing file 指向 Overlay-1A,Overlay-1A 置为只读,于是 Overlay-1A 成为一个快照,后续只对 Overlay-1B 写入数据。云主机 1 使用的是快照链 1 内最后一个快照 1B 对应的磁盘文件,快照 1B 为 Active。
      • 快照链 2:
        • 云主机 2:新建空白文件 Overlay-2,backing file 指向 Base,Base 保持为只读,后续只对 Overlay-2 写入数据。
        • 快照 2A:新建空白文件 Overlay-2A,backing file 指向 Overlay-2,Overlay-2 置为只读,于是 Overlay-2 成为一个快照,后续只对 Overlay-2A 写入数据。云主机 2 使用的是快照链 2 内最后一个快照 2A 对应的磁盘文件,快照 2A 为 Active。
      • 快照链 3:
        • 云主机 3:新建空白文件 Overlay-3,backing file 指向 Base,Base 保持为只读,后续只对 Overlay-3 写入数据。
        • 快照 3A:新建空白文件 Overlay-3A,backing file 指向 Overlay-3,Overlay-3 置为只读,于是 Overlay-3 成为一个快照,后续只对 Overlay-3A 写入数据。云主机 3 使用的是快照链 3 内最后一个快照 3A 对应的磁盘文件,快照 3A 为 Active。
  3. 合并快照

    外部快照之间互相依赖(每一个 overlay 依赖它的 backing file),每个快照保存有相应数据,不可直接删除某个快照来缩短链长度。外部快照可通过向下合并(Blockcommit)或向上合并(Blockpull)两种方式来缩短链长度。

    • 向下合并(Blockcommit)

      在同一条快照链内,支持将 overlays 合并至 backing files。

      图 24. 向下合并


      假定已有一个原始镜像(Base),基于 Base 创建云主机 1,并对云主机 1 创建 3 个互相依赖的外部快照,即:快照 1A、快照 1B、快照 1C。现将快照 1A、快照 1B 向下合并至云主机 1,于是快照 1C(Active)的 backing file 直接指向云主机 1,快照链缩短。快照 1A、快照 1B 不再有用,删除即可。

    • 向上合并(Blockpull)

      在同一条快照链内,支持将 backing files 合并至 overlays。

      图 25. 向上合并


      假定已有一个原始镜像(Base),基于 Base 创建云主机 1,并对云主机 1 创建 3 个互相依赖的外部快照,即:快照 1A、快照 1B、快照 1C。现将快照 1A、快照 1B 向上合并至快照 1C(Active),于是快照 1C(Active)的 backing file 直接指向云主机 1,快照链缩短。快照 1A、快照 1B 不再有用,删除即可。

分布式存储快照机制

企业版 Ceph 使用 ROW 快照技术,ZStack ZStone 使用 COW 快照技术。

灾备服务

灾备服务以业务数据恢复为目标,融合定时全量备份、定时增量备份等机制,对云主机、云盘和管理节点数据库等数据进行备份,并在数据误删、主存储数据损坏或数据中心灾难等场景下恢复业务数据。灾备服务包括数据备份和数据恢复两类关键机制。

数据备份

灾备服务支持基于 Qemu 块设备层的数据备份,各类型主存储上的云主机均支持备份。备份类型可分为:全量备份、增量备份。全量备份包含完整的数据集合,增量备份仅包含自上一次备份后所有更新的数据集合。全量备份和增量备份均仅备份真实数据。

默认情况下,备份策略是在首次全量备份后,每 63 个增量备份的下一次备份就会自动执行一次全量备份。这是因为增量备份之间有依赖关系,在做新的一次全量备份后,才能对之前的增量备份进行删除。实际上,系统内部有更智能灵活的应对策略来决定使用哪种合适的备份方式,以确保备份数据的安全可靠。

数据备份可分为三部分:数据复制、数据传输、数据保存。

数据复制

灾备模块利用 Qemu 块设备层的脏数据跟踪功能(Dirty Bitmap)实现备份数据的跟踪与导出。

云主机磁盘文件数据发生变化的位置被称为脏数据位置,Dirty Bitmap 记录自上次备份后,虚拟磁盘文件上产生脏数据的所有位置记录,根据位置记录,就可导出自上次备份后所有被修改过的数据,即增量的备份数据。最终全量备份文件和各个增量备份文件会产生一个完整的备份链,保存完整的数据。

云平台提供自适应的备份导出策略,后台会根据不同情况选择导出增量数据还是全量数据。Dirty Bitmap 存在于 Qemu 进程的内存中,云主机重启后就会丢失这部分信息,因此当云主机重启后云平台会自动选择导出全量备份数据。

图 26. Dirty Bitmap


数据传输

针对不同的虚拟化组件版本,支持两套不同的实现方案,主要区别在备份数据的传输上。

第一种方案:Data Over SSHFS。使用 SSHFS 在计算节点上挂载远程备份服务器的备份目录,然后将备份数据导入备份服务器。SSHFS 是一个简单的 FUSE Over SSH 方案,数据链路由 SSH 会话加密,每个备份任务有单独的 SSHFS 链路。

图 27. Data Over SSHFS


第二种方案:Data Over NBD。在备份服务器上使用 NBD 模块导出一个备份磁盘,然后在计算节点通过 Qemu 的块设备任务(Block-job),直接将备份数据导入备份磁盘。

图 28. Data Over NBD


数据保存

备份服务器支持多种存储介质,包括:SAN、NAS、磁盘阵列以及带库等。

备份数据在备份服务器中切片去重存放,备份数据会被切分成 64MB 大小的数据块,然后计算 Hash,建立索引。拥有相同 Hash 的数据块不会被存储多份。

图 29. 数据切片保存


数据恢复

从本地备份数据恢复云主机/云盘,会把备份服务器上的切片数据合并导入主存储中。

如果是非 Ceph 主存储,合并后的备份恢复数据会以磁盘链的形式存放;如果是 Ceph 主存储,会把磁盘链合并成单个磁盘文件存放。

如果是新建恢复,恢复到主存储的磁盘数据会被当作镜像缓存来创建新云主机/云盘;如果是覆盖恢复,会把恢复到主存储的磁盘路径更新到当前云主机/云盘的数据库记录中,随后删除旧的云主机/云盘文件。

图 30. 数据恢复


CDP 服务

CDP 服务用于为云主机中的重要业务系统提供细粒度持续数据保护。通过 CDP 服务,用户可以将云主机数据恢复到指定时间状态,也可以在不恢复系统的情况下找回文件。CDP 服务包括数据备份、数据恢复和备份可靠性指标等能力。

数据备份

CDP 数据备份通过持续跟踪云主机数据变化,将变化数据同步到备份服务器,并形成可用于恢复的时间点数据状态。

数据复制

CDP 模块利用 Qemu 块设备层的脏数据跟踪功能(Dirty Bitmap)以及 Drive-mirror 实现备份数据的跟踪与导出。

云主机磁盘文件数据发生变化的位置被称为脏数据位置,Dirty Bitmap 记录自上次备份后,虚拟磁盘文件上产生脏数据的所有位置记录,根据位置记录,就可导出自上次备份后所有被修改过的数据,即增量的备份数据。

云平台提供自适应的备份导出策略,后台会根据不同情况选择导出增量数据还是全量数据。Dirty Bitmap 存在于 Qemu 进程的内存中,云主机重启后就会丢失这部分信息,因此当云主机重启后云平台会自动选择导出全量备份数据。

图 31. Dirty Bitmap


导出的备份数据通过 Drive-mirror 被导入保存至 CDP 备份服务器上的空白 QCOW2 磁盘文件中。空白的磁盘文件在创建 CDP 任务时会预先被创建出来,再通过 NBD 协议导出成一个网络上可访问的块设备,这样 CDP 备份任务就可把云主机的云盘数据持续导入至 CDP 备份服务器。

图 32. Drive-mirror


数据恢复点

云主机数据传输至 CDP 备份服务器上后,以 QCOW2 磁盘文件形式存放。针对 QCOW2 磁盘文件会有一个 Qemu 存储服务来提供各种保护策略下的数据恢复点。

CDP 任务的数据恢复点由 BP 点和 RP 点组成。BP 点以粗粒度形式按时间定期生成外部快照(默认 20 分钟),RP 点则可根据实际设置的 CDP 保护策略,最快以 1 秒 1 次记录 IO 变化来生成恢复点。

CDP 备份服务器首先会对云主机数据进行一次全量复制生成基本 BP 点,后续通过 Qemu 持续捕获 I/O 数据变化,将每次变化的 I/O 数据打上时间戳生成 RP 点并保存下来。恢复点的生成都是在 CDP 备份服务器上做的,对原云主机无任何影响。

图 33. BP 点与 RP 点


数据恢复

CDP 数据恢复支持基于指定恢复点恢复云主机数据或找回文件,帮助用户在误操作、业务异常或恢复演练场景下验证并恢复数据。

找回文件

当因误删云主机丢失部分文件时,CDP 备份数据支持快速浏览备份文件,实现文件级别的数据恢复。用户可选择任意恢复点浏览恢复点中的文件和数据,也可预览文件内容,确认文件包含所需数据后,再选择下载文件或锁定恢复点做后续的数据恢复。

图 34. 找回文件


快速恢复

当云主机业务发生故障或遭受病毒需做整机数据恢复时,CDP 备份数据支持秒级快速恢复,满足业务快速恢复上线的需求。

快速恢复主要包含两个步骤:云主机快速拉起、云主机数据迁移。

在 CDP 备份服务器上,云主机备份数据以 QCOW2 磁盘格式存放。为实现快速拉起,首先会将备份的 QCOW2 磁盘通过 NBD 以网络块设备方式映射出来,然后云主机在计算节点上通过 NBD 来访问备份服务器上的云主机备份磁盘,此时云主机已正常提供业务,用户可正常读写云主机。

由于云主机磁盘尚未存放至主存储,后台会启动一个存储迁移任务,将备份服务器上的磁盘数据同步到主存储上。在该过程中,对云主机的修改写入均会被记录为脏页,一并同步至主存储的目标磁盘中。

当同步任务发现数据全部拷贝完成后,云主机会默认将磁盘路径动态切换成主存储的路径来访问。后台迁移过程会将云主机的所有数据均同步至主存储,并且整个过程对用户完全无感知,也不会对云主机业务产生影响。

图 35. 快速恢复


备份可靠性指标

评估灾备系统可靠性有两个重要指标:RPO 与 RTO。RPO(Recovery Point Objective)指恢复点目标,强调灾难发生后,企业能容忍的数据丢失量。RTO(Recovery Time Objective)指恢复时间目标,强调灾难发生后,企业能容忍的数据恢复时间。

CDP 模块在云主机低负载情况下 RPO 与 RTO 最低均可达 1 秒。

图 36. RPO 与 RTO


系统配置备份

系统配置备份对于云平台来说至关重要。当云平台发生异常,或相关配置丢失时,可通过系统配置的备份数据进行恢复。

云平台提供备份服务模块,支持本地灾备、异地灾备、公有云灾备多种灾备方案。

技术设计 | ZStack Cloud Foundation | ZStack 资源中心