一, 三副本的弊端
以 Ceph,VSAN 为代表的软件定义存储 (Software Defined Storage,SDS) 是一个横向扩展, 自动均衡, 自愈合的分布式存储系统, 将商用 x86 服务器, 固态硬盘, 机械硬盘等硬件资源整合为一个瘦供给的资源池, 并以块存储, 文件存储, 对象存储, Restful API 等多种接口方式提供存储服务.
无论是 Ceph,VSAN, 或者其演化版本, 有一个共同的技术特征, 即采用网络 RAID 方式实现数据保护, 以 3 副本或纠删码为代表, 其中 3 副本用于对小块数据读写性能有一定要求的应用场景, 而纠删码则适用于视频数据, 备份及归档等大文件场景. 以 3 副本为例, 业务数据被分割为固定大小的数据块, 通常为 4MB, 每个数据块在不同的节点上保存 3 个副本 (如图 1 所示), 其分布机制是依照一致性哈希算法(Consistent Hashing) 或 CRUSH 算法, 将各个副本数据随机分布在不同节点, 不同磁盘中, 以实现数据自动平衡和横向扩展. 当磁盘或节点遭遇故障或损坏时, 系统会自动根据预先设定的规则, 重新建立一个新的数据副本, 称之为数据重建.
图 1 分布式存储副本机制
虽然分布式存储的 SDS 理念很好, 横向扩展能力不错, 自动添加和删除节点都是优势, 但与传统集中式存储 (磁盘阵列) 相比, 其稳定性和性能仍然存在明显的短板.
首先, 在性能方面, 三副本分布式存储容易受到 IO 分布不均匀和木桶效应的影响, 导致大延迟和响应迟钝的现象. 以 Ceph 为例, 多个存储基本单元, Placement Group (PG), 封装为一个 OSD, 每个 OSD 直接对应于某一个机械硬盘 HDD; 主流的 7200 转 HDD, 受到机械臂寻址限制, 其单盘的读写性能仅为 120 IOPS 左右; 由于数据在 OSD 上随机分布, 因而单个硬盘上的 IO 负载不会固定在平均值上, 而是总体呈现为正态分布, 少数 HDD 上因正态分布的尾部效应, 导致其 IO 负载远超平均值, 以及远超单盘的性能阀值, 造成拥堵. 此外, 分布式存储为保证数据完整性, 必须定时进行数据完整性校验, 即数据 scrub/deep-scrub 操作, 而这些操作产生额外的 IO 负载, 可能会加重磁盘阻塞现象. 根据木桶效应原理, 系统的性能取决于集群中表现最差的磁盘, 因此个别慢盘严重拖累整个系统的性能, 其可能的后果, 就是带来大延迟, OSD 假死, 以及触发数据非必需的重建.
其次, 三副本分布式存储还面临稳定性问题. 当存储扩容, 硬盘或节点损坏, 网络故障, OSD 假死, Deep-scrub 等多种因素叠加, 可能导致多个 OSD 同时重建, 引发重建风暴. 在数据重建过程中, 重建任务不仅消耗系统的内存, CPU, 网络资源, 而且还给存储系统带来额外的 IO 工作负载, 挤占用户工作负载的存储资源. 在此情形下, 用户时常观察到, 系统 IO 延迟大, 响应迟钝, 轻者引起业务中断, 严重时系统可能会陷入不稳定的状态, OSD 反复死机重启, 甚至会导致数据丢失, 系统崩溃.
此外, 三副本分布式存储还面临数据丢失的风险. 三副本最大可抵御两个 HDD 同时损坏. 当系统处于扩容状态, 或一个节点处于维护模式时, 此时出现一个 HDD 故障, 则该系统就会进入紧急状态, 出现两个 HDD 同时故障, 则可能导致数据丢失. 对于一个具有一定规模的存储系统而言, 同时出现两个机械硬盘故障的事件不可避免, 尤其是当系统运行两三年之后, 随着硬件的老化, 出现 Double, 或 Triple 磁盘故障的概率急剧上升. 此外, 当系统出现大规模掉电或存储节点意外宕机时, 也可能会导致多个机械硬盘同时出现损坏, 危及三副本分布式存储的数据安全.
二, 双重 Raid
为了解决三副本分布式存储面临的性能问题, 稳定性及可靠性等缺陷, 道熵的铁力士分布式存储采用双重 RAID 保护机制, 除了继承网络 RAID(节点间副本, 跨节点纠删码)和一致性哈希随机分布数据的特点, 铁力士将磁盘阵列特有的节点内 RAID 技术和存储虚拟化 (池化) 管理技术, 即 Storage Virtualization Manager (SVM), 与分布式技术相结合, 如图 2 所示.
图 2 Titlis 分布式存储双重 Raid 机制
网络 Raid 技术
在铁力士分布式存储中, 每个数据块按照一致性哈希算法, 随机选择两个不同存储节点来保存数据的两个副本, 保证当任何一个节点宕机时, 仍有一个数据副本保证读写操作, 确保业务高可用和数据安全.
节点内 Raid 技术
在铁力士分布式存储的每个节点内, 通过 SVM 存储虚拟化技术实现节点内的 RAID 数据保护, RAID 级别选择可以是镜像, 也可以是存储效率更高的 RAID5 或 6. 节点内 RAID 保护可抵御单个或多个硬盘损坏, 故障修复限制在节点内部, 无需触发网络数据重建, 有效地避免了网络重建风暴.
节点内 RAID 结合网络 Raid(跨节点的副本 / EC 码)技术, 铁力士实现了双重 RAID 数据保护. 在三副本架构中, 一旦同时出现三块磁盘故障或受损, 数据就可能丢失; 而在双重 RAID 架构中, 即使每个节点同时出现一块磁盘故障, 数据仍然无忧, 业务仍然持续. 考虑到分布式存储可能包含数十个甚至上百个存储节点, 双重 RAID 的数据可靠性明显超过三副本架构.
存储虚拟化技术
铁力士在每个存储节点运行在存储虚拟化管理软件 (SVM) 上, 把该节点的存储资源整合为一个统一管理的存储池, 为分布式系统提供 vOSD 资源. SVM 采用宽条带机制(见图 3), 将每个 vOSD 的工作负载均匀分布在节点的每个磁盘上, 大幅提高了单个 vOSD 的 IOPS 能力, 可有效抵御三副本分布式存储中的 IO 分布不均匀现象.
图 3 节点内 Raid 条带机制
SVM 存储池由节点内多个 RAID 小组构成, 通过虚拟卷为上层分布式系统提供 vOSD 存储服务. 每个 vOSD 对应于三副本中由物理 HDD 承载的 OSD. 由分布式一致性哈希算法分配来的数据块, 将写入 SVM 存储池中, 由虚拟卷支撑的 vOSD, 而非直接写入物理硬盘. SVM 利用宽条带技术, 将 vOSD 的工作负载均匀分布在各个物理磁盘上: 每个大小为 4MB 的 vOSD 对象数据块, 被分割为 32KB 的数据块, 依次被安排在 RAID 组的逻辑地址空间中; SVM 对各个 RAID 小组的逻辑地址空间采取顺序写优化策略: 首次写按各个小组的逻辑地址分配地址空间, 按顺序写入数据; 后续重写, 则优先填满空闲地址空间, 尽可能实现硬盘顺序寻址, 最大限度降低机械硬盘较慢的寻址操作次数, 利用机械硬盘顺序写较快的特点来提升 IO 性能.
二级 DRAM+Flash 缓存加速
磁盘阵列中常见的性能加速手段是共享缓存加速, 中高端磁盘阵列与低端磁盘阵列的在性能方面的一个重大区别, 除了控制器个数, 就是缓存加速的能力. 典型的中高端磁盘阵列能支持的共享缓存加速在 512GB 到 1TB 上下. 铁力士借鉴了磁盘阵列的设计, 通过 SVM 虚拟化实现 DRAM 与 Flash 相结合的二级缓存加速: 通过自适应算法, 自动识别动态或静态热数据(高频率读写或最近读写数据), 将最热的数据保存在延迟最小的 DRAM 中, 而将次热的数据保存在更大容量, 基于 Flash 的固态硬盘上; 并由于分布式技术的加持, 形成一个容量巨大的分布式二级缓存系统. 与中高端磁盘阵列相比较, 铁力士分布式存储系统支持数 10TB, 甚至 100TB 以上的分布式缓存, 相当于其 10 倍, 甚至 100 倍的缓存容量.
数据完整性校验与数据自修复
SVM 存储虚拟化管理借鉴了 WAFL(NetApp) ,Btrfs(SuSE),ZFS(Oracle),Storage Spaces(微软)等文件系统的先进经验, 对底层存储的每个数据块增加一个 256 比特的校验码, 并单独保存在一对固态硬盘镜像中, 用于快速实现在线数据完整性校验. 一旦校验码检查到数据受损, 通过节点内 RAID 功能实现数据自修复. 该功能可快速定位硬件故障, 并实现硬件故障自动隔离.
三, 双重 Raid 机制与三副本对比
双重 RAID 究竟能否有效解决三副本的缺陷? 让我们从二者之间的对比开始.
故障修复时间更短, 业务影响更小
硬盘损坏时, 双重 RAID 机制优先通过节点内 RAID 恢复数据, 该恢复机制可自动调节速度以避让工作负载, 前端业务无感知. 无需触发网络数据重建, 从而有效地避免了网络重建风暴.
节点故障时, 可通过迁移磁盘到另一台物理服务器, 实现节点迁移(无需拷贝或重建数据).SVM 存储池上每个磁盘记载关于存储池构成的全部信息, 分布式存储的 vOSD 的 ID 号及用户数据, 保存在 SVM 存储池的虚拟卷上, 自动随着 SVM 存储池的迁移从一台物理服务器迁移到另一台物理服务器, 主机名及 vOSD 的 ID 号保存不变, 实现快速节点修复.
容错性更强, 可允许多节点同时有磁盘损坏
三副本分布式存储通过跨节点的副本保护, 可有效防止单个或两个磁盘损坏对业务数据的影响, 但是容错性受到限制, 如在三副本的情况下, 不同故障域内之间, 最多只能允许 2 个节点有磁盘损坏, 超出 2 个节点出现磁盘故障, 则极有可能发生数据丢失, 如图 4 所示.
图 4 三副本分布式存储多节点硬盘损坏导致数据丢失
铁力士分布式存储通过双重 Raid 机制, 能够将容错性提升一个数量级. 如图 5 所示, 以节点内 Raid10 + 节点间 2 副本为例, 当每个节点都出现磁盘故障的时候, 可以通过节点内 Raid 分别修复, 保障整个系统数据无丢失, 业务无中断.
图 5 双重 RAID 容忍多节点磁盘损坏
数据持久性 (Durability) 高出一个数量级
下面通过具体数值来比较三副本与双重 RAID 的数据持久性 (可靠性). 数据持久性指标可通过存储系统的 AFR(Annual Failure Rate) 来衡量. 考虑一个 1000 个 6TB 硬盘的存储集群, 每个机械硬盘的 MTTF(Mean Time to Failure)为 1000,000 小时. 在计算中需要运用两个著名的 MTTF 公式, 一个是关于 RAID6, 其 MTTF=(MTTF)*(MTTF)*(MTTF)/(N*(N-1)*(N-2)*MTTR), 另一个是关于 RAID5, 其 MTTF=(MTTF)*(MTTF)/(N*(N-1)MTTR), 其中 MTTR(Mean Time to Repair)是硬盘平均修复时间.
在三副本条件下, 存储系统共有 333 组三副本, 每组三副本的 MTTF 相当于 N=3 的 RAID6, 在分布式并发修复的条件下, MTTR 通常为 3 小时(每半小时修复 1TB 数据), 因此每组三副本的 MTTF =1000000*1000000*1000000/(3*2*1*3)=5.56x 1016 小时, 而整个系统的 MTTF = 5.56x 1016 /333 =1.67x 1014 小时. 折算为 AFR(一年共 8760 小时),AFR=8760/(1.67x 1014) =5.2x 10-11.
在双重 RAID 情况下, 考虑节点内采用 (2+1) RAID5, 存储系统共有 333 组 RAID5, 为简化计算, 考虑每组 RAID 对应于两个 vOSD,12TB 数据. 据测算, RAID5 的 MTTR 为 30 小时, 每组 RAID5 (vOSD) 的 MTTF=1000000*1000000/(3*2*30)=5.56x 109 小时. 当一个 RAID5 组损坏时, 由于 vOSD 在跨节点之间有镜像保护(其可靠性相当于 N=2 RAID5), 采用分布式并发修复 12TB 数据, 每半小时修复 1TB 数据, 需 6 小时, 因此, 其 MTTR=(5.56x 109 )* (5.56x 109 )/(2*1*6)=2.58x 1018 小时. 考虑到整个存储系统有 333 组 RAID5, 因此整个系统的 MTTF=2.58x 1018/333 =7,75x 1015 小时, 相当于三副本 MTTF 的 46 倍. 折算为 AFR, 双重 RAID 的 AFR=8760/(7.75x 1015)= 1.1x 10-12 .
对比三副本和双重 RAID 的数据持久性, 可见双重 RAID 的数据可靠性高于三副本一个数量级以上.
四, 总结
铁力士分布式存储将传统磁盘阵列的 RAID 技术, 存储虚拟化管理技术与分布式存储技术相结合, 有效地解决了普通分布式存储面临的 IO 分布不均匀和木桶效应导致的性能缺陷, 大幅度提升系统 IOPS 性能, 并避免了普通分布式存储因网络重建风暴而可能导致的稳定性隐患. 同时, 双重 RAID 架构的数据可靠性高于三副本分布式存储一个数量级以上.
来源: http://stor.51cto.com/art/202103/650885.htm