存储进阶笔记(一):硬件基础:HDD/SDD、JBOD、RAID 等(2024)
记录一些平时接触到的存储知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用。
Fig. 12 Left: HDDs as a JBOD, present to OS as 12 independent devices (sd*), running a Ceph OSD service on each device. Right: speedup performance with high-end RAID cards.
水平及维护精力所限,文中不免存在错误或过时之处,请酌情参考。 传播知识,尊重劳动,年满十八周岁,转载请注明出处。
- 单个磁盘的容量、性能等不够
- 冗余/高可用需求
解决办法:RAID、JBOD、LVM 等等。
2 容量不够,JBOD (Just a Bunch Of Disks) 来凑 2.1 定义JBOD 在 Wikipedia 中没有单独的词条, 而是归类在 Non-RAID drive architectures 中。
JBOD 是一种架构,
- 往下管理的是多个磁盘,这里所说的“磁盘”可以是
- 物理设备,
- 逻辑卷(logical volume),又分为几种,
- 多个物理设备组合成的一个逻辑卷,比如用 LVM 或者 mdadm 之类的工具(后面会介绍);
- btrfs 之类的能跨设备的文件系统(device-spanning filesystem)
- 往上呈现给操作系统的是一个或多个独立设备(devices,/dev/xxx)。
最简化的理解:使用 JBOD 模式,那机器上插了几个盘,操作系统中就能看到几个 /dev/sd* 设备。
比如下图是一台 12 盘的 Ceph 机器。Ceph 的设计中,每个盘由一个独立的进程来管理,也就是它的 OSD 进程, 所以就适合做 JBOD(但 RAID 也是可以的,右边所示 [2]),
Fig. 12 Left: HDDs as a JBOD, present to OS as 12 independent devices (sd*), running a Ceph OSD service on each device. Right: speedup performance with high-end RAID cards.
2.2 优缺点- 无冗余:每个盘(或逻辑 volume)都是独立的,可以独立访问,在其他盘上没有冗余,坏了里面的数据就没了;
- 每个盘都是独立的,所以加减盘比较简单和方便(作为对比,RAID 加减盘就得考虑数据重新分布了);
- 可扩展性和灵活性比较好。可以将不同大小的盘组合到一起;
- 灵活控制数据存储和备份策略;
- 性能上就是多个盘的叠加,没有额外性能提升(相比某些 RAID 之类的);
- 便宜,不怎么花钱。
- 需要独立盘的场景,例如 Ceph OSD;
- 动态扩容比较频繁的场景,例如云存储;
- 需要精确控制备份策略的场景。
JBOD 是硬件特性,主板的存储控制器自带这个功能,一般的 RAID 卡也支持 JBOD 模式。
也有一些具有类似功能的软件,比如 LVM (Logical Volume Manager)。 下一篇再介绍。
3 花钱办事:硬件 RAID 卡数据冗余+提升性能 3.1 定义RAID 是 Redundant Array of Independent Disks 的缩写,独立磁盘冗余阵列,可以提供多种级别的数据容易,防止因为单个磁盘故障导致数据丢失或不可用。 RAID 本身只是一种技术。实现上可以是硬件 RAID 卡,也可以是纯软件方案。
我们接下来讨论的主要是硬件 RAID 卡。
3.2 分类 3.2.1 按 RAID 模式分类可参考 [2],不错的介绍和软件 raid 教程。
3.2.2 按有无缓存(write back cache)分类RAID 卡上有没有内存:
- 无
- 低端卡,便宜
- 数据直接写入磁盘(write-throught)。无加速能力,但能做硬件 RAID,性能比纯软件的 RAID 还是要好。
- 有
- 高端卡,贵
- 数据写到 RAID 卡内存后直接返回(write-back),极大提高性能。
以下是 Broadcom MegaRAID 9560-16i 8GB RAID 卡,自带 8C 处理器,8GB 内存。
Fig. Broadcom MegaRAID 9560-16i 8GB RAID Controller.
RAID 卡本身作为 PCIe 卡插到主板上,磁盘通过 SATA 接口插到右侧(也可以加转换线,将 PCIe 接口的 NVME SSD 插到右侧)。 一些产品参数 [3]:
- PCIe 4.0 RAID 卡
- 单个 RAID 卡最多能支持 240 SAS/SATA devices or 32 NVMe devices
- 支持 RAID 0, 00, 1, 5, 6, 10, 50 and 60
- JBOD mode with RAID 0, 1, 10 and JBOD for SDS environments
NVME SSD 有两种常见的接口格式:
- PCIe 格式:这种 SSD 数据线直接插在主板的 PCIe 插槽上就行了,速度已经很快,例如 PCIe Gen4 的实测写入带宽能打到 3GB/s 左右,Gen5 的写入带宽号称能到 8GB/s。
- M.2 格式:体积很小,插在主板上的 M.2 插槽上,速度也很快,但容量一般较小;
如果以上速度还不满足业务需求,可以考虑加上 RAID 卡,下面是 M.2 格式的多个 NVME SSD 做成 RAID 的样子:
Fig. Hardware RAID10 over NVME SSDs. Image Source
前面 Broadcom 那个卡也支持 NVME RAID,但支持的 PCIe 格式的 NVME,而且需要通过 PCIe 扩展线来连接。
3.4 RAID 卡上为什么要配备电池(或超级电容)? 3.4.1 突然掉电的问题对于有 WB cache 的,如果数据写到了 cache,但还没写到磁盘,掉电了怎么办?会导致数据丢失。 所以引入了配套的电池(BBU, Battery Backup Unit),
- 电池的作用不是在断电后将数据刷到磁盘 —— 因为这时候磁盘也没电了 —— 而是确保缓存中数据的安全,等重新上电后,再刷到磁盘;
- BBU 可以保持 RAID Cache 中的数据几天时间,具体看厂商及电池寿命;
- 没有电池或电池失效,读缓存还可以用,写缓存会自动关闭(写性能急剧下降)。
电池能解决掉电丢数据问题,但寿命和故障率是个问题。近几年新出来的另一种保持数据的方式是超级电容(supercapacitors)。
BBU or SuperCapacitor [4]:
- A BBU has a docked battery that powers the volatile cache memory for up to 72 hours. Like all Li-ion batteries, they will age and need to be replaced in a maintenance slot after about three to five years.
- A SuperCapacitor works differently, but also provides higher security: With the energy stored in the capacitor, the data is quickly shifted into a non-volatile memory and is thus ready for the next start.
再回到 RAID 卡本身。东西好是好,但贵,有没有降本的方案呢?
3.5.1 VROC (Virtual Raid On CPU)Intel CPU 独有的技术,CPU 内置硬件模块,官方介绍。
没用过。
参考资料- Considerations for using a RAID controller with OSD hosts, redhat.com, 2024
- An Introduction to RAID in Linux, baeldung.com, 2024
- Broadcom MegaRAID 9560-16i 8GB RAID Controller, 2024
- Protecting RAID systems with BBU or SuperCapacitor, 2024