dRAID
约 2 分钟阅读
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 -> RAIDz1
- D+P 为一个组,分布到 C-S 个硬盘中
- S 为全局 - 所有组共用
- parity - 1-3, 默认 1
- 优势
- 快速恢复
- 传统模式的性能瓶颈在于单盘 - 速度慢
- spare 分散后所有盘都在恢复 - 没有瓶颈
- dRAID 换盘瓶颈也在 - 但是场景上来说没那么重要
- 硬盘性能利用率更高
- 能加盘
- 快速恢复
- 劣势
- fixed strip width - 可能用更多空间,压缩比会低一些
- draid2:4 - 4kn - 24KiB meta
- draid2:8 - 4kn - 40KiB meta
- 实现了特殊 vdev 空间分配 - 12KiB
- RAIDz2 - 12KiB
- 容错性低于传统
- 例如 9 盘 draid1:2 / RAIDz1
- draid1:2 最多只能坏 1 个 - 第二个坏会影响数据 - 没有盘位概念
- RAIDz1 - 第二个坏可能不影响,只要不在一个分组 - 9 盘 3 分组 - 固定盘位
- 例如 9 盘 draid1:2 / RAIDz1
- fixed strip width - 可能用更多空间,压缩比会低一些
- 例如 draid1:4d:11c
- 11 个盘
- 1p 4d 1s - 每个 strip 使用 5 个盘 + 一个备用
- 参考
使用场景
- dRAID 用于磁盘非常多的场景
- 牺牲一点使用空间换取更快的恢复速度
- vdev >= 20 dRAID
- vdev 10-20 - 酌情
- vdev <= 8 选择 RAIDz
Expansion
传统 RAID 4/5/6
| sda | sdb | sdc | sdd |
|---|---|---|---|
| 1 | 2 | 3 | P1-3 |
| 4 | 5 | 6 | P4-6 |
| sda | sdb | sdc | sdd | sde |
|---|---|---|---|---|
| 1 | 2 | 3 | 4 | P1-4 |
| 5 | 6 | 7 | 8 | P5-8 |
- P - parity group - strip
- 分组变化
RAID-Z expansion: reflow
| sda | sdb | sdc | sdd |
|---|---|---|---|
| 1P | 2 | 3 | 4 |
| 5P | 6 | 7 | 8 |
| 9P | 10 | 11 | 12 |
| sda | sdb | sdc | sdd | sde |
|---|---|---|---|---|
| 1P | 2 | 3 | 4 | 5P |
| 6 | 7 | 8 | 9P | 10 |
- P - parity group - logical strip
- 分组没变 - 容灾能力没变
- 不修改 block 指针
- 顺序读写
- strip 独立
- parity group 迁移时会确保之前数据不被覆盖 - 避免迁移过程异常,丢失数据
- 迁移过程慢 - 因为全部数据都会动
关联信息
反向链接、本文链接的其他页面和外部资料。
反向链接
- ZFS 常见问题笔记 · dRAID
renameat2/overlayfs ZFS v2.2+ · zfsrename: support RENAME\ flags · feature zilsaxattr · 不要用 , 用 - zd0 可能会变 · | abbr. | stand for | cn |
参考资料
GitHub1 条
- openzfs/zfs/module/zfs/vdev_draid.c#L45-L167github.com/openzfs/zfs/blob/c14ad80fcbcfc011686f01a89644eea7c028a879/module/zfs/vdev_draid.c
其他外链3 条
- arstechnica.com/gadgets/2021/07/a-deep-dive-into-openzfs-2-1s-new-distributed-raid-topologyarstechnica.com/gadgets/2021/07/a-deep-dive-into-openzfs-2-1s-new-distributed-raid-topology
- openzfs.github.io/openzfs-docs/Basic Concepts/dRAID Howto.htmlopenzfs.github.io/openzfs-docs/Basic%20Concepts/dRAID%20Howto.html
- www.youtube.com/watch?v=yF2KgQGmUicwww.youtube.com/watch?v=yF2KgQGmUic