Skip to main content

dRAID - Distributed RAID

  • OpenZFS 2.1+
  • dRAID 区别于之前的 RAIDz 方式处理备盘
    • 之前是物理备盘,现在是逻辑备盘
    • 没有备盘概念,有容灾能力
      • 备盘 - 冷备份
      • 容灾 - 从异常恢复
    • 位置动态分配 - 传统 RAID 盘位角色固定
    • 适用于大规模存储,小规模建议使用传统 RAIDz
    • group into rows - 16MB
    • 实现基于 RAIDz,但 allocate 方式有区别
  • dRAID 相当于是在一组数据里增加了一个 strip 作为备用打散到所有盘
  • 格式 draid[<parity>][:<data>d][:<children>c][:<spares>s]
    • parity - 1-3, 默认 1
      • 校验数据/主数据
    • data - 每个冗余组的硬盘数量 默认 8
      • 数量小 - IOPS 高,压缩比高,恢复速度快
    • children - 交叉验证磁盘数量,避免磁盘多的时候配置错误
      • 总的磁盘数量
    • spares - 分布式热备数量 - 默认 0
      • 异常快速恢复 - S -> D,P
    • 配置的是每 strip
    • draid1:2:0 -> RAIDz1
    • D+P 为一个组,分布到 C-S 个硬盘中
    • S 为全局 - 所有组共用
  • 优势
    • 快速恢复
      • 传统模式的性能瓶颈在于单盘 - 速度慢
      • spare 分散后所有盘都在恢复 - 没有瓶颈
      • dRAID 换盘瓶颈也在 - 但是场景上来说没那么重要
    • 硬盘性能利用率更高
    • 能加盘
  • 劣势
    • fixed strip width - 可能用更多空间,压缩比会低一些
      • draid2:4:1 - 4kn - 24KiB meta
      • draid2:8:1 - 4kn - 40KiB meta
        • 实现了特殊 vdev 空间分配 - 12KiB
      • RAIDz2 - 12KiB
    • 容错性低于传统
      • 例如 9 盘 draid1:2:0 / RAIDz1
        • draid1:2:0 最多只能坏 1 个 - 第二个坏会影响数据 - 没有盘位概念
        • RAIDz1 - 第二个坏可能不影响,只要不在一个分组 - 9 盘 3 分组 - 固定盘位
  • 例如 draid1:4d:11c:1s
    • 11 个盘
    • 1p 4d 1s - 每个 strip 使用 5 个盘 + 一个备用
  • 参考
使用场景
  • dRAID 用于磁盘非常多的场景
    • 牺牲一点使用空间换取更快的恢复速度
  • vdev >= 20 dRAID
  • vdev 10-20 - 酌情
  • vdev <= 8 选择 RAIDz

Expansion

传统 RAID 4/5/6

sdasdbsdcsdd
123P1-3
456P4-6
sdasdbsdcsddsde
1234P1-4
5678P5-8
  • P - parity group - strip
  • 分组变化

RAID-Z expansion: reflow

sdasdbsdcsdd
1P234
5P678
9P101112
sdasdbsdcsddsde
1P2345P
6789P10
  • P - parity group - logical strip
  • 分组没变 - 容灾能力没变
  • 不修改 block 指针
  • 顺序读写
  • strip 独立
  • parity group 迁移时会确保之前数据不被覆盖 - 避免迁移过程异常,丢失数据
  • 迁移过程慢 - 因为全部数据都会动