目录
[1. 什么是存储堆栈?](#1. 什么是存储堆栈?)
[2. 块设备(Block Devices)](#2. 块设备(Block Devices))
[2.1 什么是块设备?](#2.1 什么是块设备?)
[2.2 各种块设备详解](#2.2 各种块设备详解)
[SCSI(Small Computer System Interface)](#SCSI(Small Computer System Interface))
[SAS(Serial Attached SCSI)](#SAS(Serial Attached SCSI))
[FC(Fibre Channel)](#FC(Fibre Channel))
[iSCSI(Internet SCSI)](#iSCSI(Internet SCSI))
[NVMe(Non-Volatile Memory Express)](#NVMe(Non-Volatile Memory Express))
[3. 多路径(Multipath)](#3. 多路径(Multipath))
[3.1 多路径是什么?](#3.1 多路径是什么?)
[3.2 多路径如何工作?](#3.2 多路径如何工作?)
[3.3 多路径的实际价值](#3.3 多路径的实际价值)
[4. 分区(Partitions)](#4. 分区(Partitions))
[4.1 分区是什么?](#4.1 分区是什么?)
[4.2 为什么要分区?](#4.2 为什么要分区?)
[5. RAID(冗余磁盘阵列)](#5. RAID(冗余磁盘阵列))
[5.1 RAID是什么?](#5.1 RAID是什么?)
[5.2 常见RAID级别详解](#5.2 常见RAID级别详解)
[RAID 0 - 条带化](#RAID 0 - 条带化)
[RAID 1 - 镜像](#RAID 1 - 镜像)
[RAID 5 - 带奇偶校验的条带化](#RAID 5 - 带奇偶校验的条带化)
[6. 逻辑卷管理器(LVM)](#6. 逻辑卷管理器(LVM))
[6.1 LVM是什么?](#6.1 LVM是什么?)
[6.2 LVM核心组件详解](#6.2 LVM核心组件详解)
[物理卷(Physical Volume)](#物理卷(Physical Volume))
[卷组(Volume Group)](#卷组(Volume Group))
[逻辑卷(Logical Volume)](#逻辑卷(Logical Volume))
[6.3 LVM高级功能](#6.3 LVM高级功能)
[VDO(Virtual Data Optimizer)](#VDO(Virtual Data Optimizer))
[7. Stratis存储管理](#7. Stratis存储管理)
[7.1 Stratis是什么?](#7.1 Stratis是什么?)
[7.2 Stratis与传统管理的区别](#7.2 Stratis与传统管理的区别)
[7.3 Stratis核心特性](#7.3 Stratis核心特性)
[精简配置(Thin Provisioning)](#精简配置(Thin Provisioning))
[7.4 Stratis架构详解](#7.4 Stratis架构详解)
[7.5 Stratis实战配置](#7.5 Stratis实战配置)
[8. 存储堆栈的最佳实践](#8. 存储堆栈的最佳实践)
[8.1 选择合适的组件组合](#8.1 选择合适的组件组合)
[8.2 监控和维护](#8.2 监控和维护)
[9. 总结](#9. 总结)
1. 什么是存储堆栈?
概念说明:
存储堆栈就像是存储管理的"建筑楼层",每一层都有特定的职责,下层为上层提供服务。想象一下建房子:
-
地基:块设备(硬盘、SSD等)
-
结构层:分区、RAID、LVM
-
功能层:加密、压缩
-
应用层:文件系统、数据库
为什么要分层?
-
每层专注解决特定问题
-
下层变化不影响上层使用
-
提供灵活的配置组合
2. 块设备(Block Devices)
2.1 什么是块设备?
核心概念: 块设备是计算机中按固定大小块(通常是512B或4KB)来访问数据的存储设备。
通俗理解: 把块设备想象成一个大型的"乐高积木箱",数据就像一个个标准大小的积木块,可以按需取用和存放。
主要职责:
-
提供稳定的数据读写接口
-
管理物理存储介质
-
处理设备级错误
2.2 各种块设备详解
SCSI(Small Computer System Interface)
是什么: 一套标准化的设备接口协议
干什么用: 让不同厂商的设备能够互相通信
实际例子: 就像USB标准,让各种U盘都能在电脑上使用
SAS(Serial Attached SCSI)
是什么: SCSI的串行版本,取代了老式的并行SCSI
干什么用: 提供更高的传输速度和更好的扩展性
优势: 支持更多设备,线缆更简单
FC(Fibre Channel)
是什么: 专门为存储设计的高速网络技术
干什么用: 构建存储区域网络(SAN)
特点: 性能极高,成本也高,主要用于企业级环境
iSCSI(Internet SCSI)
是什么: 通过普通IP网络传输SCSI命令
干什么用: 用现有网络设备实现存储共享
工作方式:
bash
客户端 → iSCSI Initiator → 网络 → iSCSI Target → 存储设备
优势: 利用现有网络,成本低,部署简单
NVMe(Non-Volatile Memory Express)
是什么: 为固态硬盘设计的新一代接口协议
干什么用: 充分发挥SSD的性能优势
特点: 延迟极低,队列深度大,专为闪存优化
3. 多路径(Multipath)
3.1 多路径是什么?
核心概念: 多路径技术通过在服务器和存储之间建立多条物理连接,提供冗余和负载均衡。
生活化比喻: 想象一个城市有多个出入口,当一条路堵车时,你可以走其他路线,确保总能到达目的地。
3.2 多路径如何工作?
主要组件:
-
物理路径: 服务器到存储的实际连接线路
-
逻辑设备: 多条物理路径聚合成的单一虚拟设备
-
故障切换: 自动检测路径故障并切换到备用路径
3.3 多路径的实际价值
高可用性:
bash
# 正常情况:两条路径同时工作
服务器 ←路径A→ 存储设备
←路径B→
# 路径A故障:自动切换到路径B
服务器 ←路径A×→ 存储设备
←路径B√→
负载均衡: 将I/O请求分散到多条路径,提高整体性能
4. 分区(Partitions)
4.1 分区是什么?
核心概念: 将一个大硬盘划分成多个独立的逻辑区域。
通俗理解: 就像把一个大的仓库隔成多个小房间,每个房间可以存放不同类型的货物。
4.2 为什么要分区?
组织管理:
-
系统文件和个人文件分开
-
不同应用数据隔离
-
备份和恢复更灵活
性能优化:
-
将频繁访问的数据放在硬盘外圈(速度更快)
-
减少文件碎片
安全隔离:
-
一个分区损坏不影响其他分区
-
可以针对不同分区设置不同权限
5. RAID(冗余磁盘阵列)
5.1 RAID是什么?
核心概念: 将多个物理磁盘组合成一个逻辑单元,提供数据冗余或性能提升。
生活化比喻: 就像重要的文件,你可能会:
-
复印多份(镜像)
-
把内容分到多个本子上(条带化)
-
同时使用以上两种方法
5.2 常见RAID级别详解
RAID 0 - 条带化
工作原理: 数据被分成块,轮流写入不同磁盘
bash
数据: ABCDEF
磁盘1: A C E
磁盘2: B D F
优势: 读写性能翻倍
风险: 任何一块磁盘损坏,所有数据丢失
适用场景: 临时数据、需要高性能但不重要的数据
RAID 1 - 镜像
工作原理: 相同的数据同时写入所有磁盘
bash
数据: ABCDEF
磁盘1: ABCDEF
磁盘2: ABCDEF
优势: 数据安全性高
缺点: 存储利用率只有50%
适用场景: 操作系统盘、重要配置文件
RAID 5 - 带奇偶校验的条带化
工作原理: 数据和校验信息分布在所有磁盘上
bash
数据: A1 A2 A3 Ap (Ap是A1-A3的校验)
B1 B2 Bp B3
C1 Cp C2 C3
优势: 兼顾性能和安全,允许一块磁盘故障
适用场景: 文件服务器、一般应用
6. 逻辑卷管理器(LVM)
6.1 LVM是什么?
核心概念: LVM在物理存储和文件系统之间增加了一个抽象层,实现灵活的存储管理。
三层架构:
bash
物理卷(PV) → 卷组(VG) → 逻辑卷(LV)
↓ ↓ ↓
硬盘/分区 存储池 虚拟磁盘
6.2 LVM核心组件详解
物理卷(Physical Volume)
是什么: 实际的存储设备(硬盘、分区、RAID设备)
干什么用: 为LVM提供原始的存储空间
卷组(Volume Group)
是什么: 多个物理卷的集合
干什么用: 创建一个统一的存储池
优势: 打破单个物理设备的大小限制
逻辑卷(Logical Volume)
是什么: 从卷组中划分出来的虚拟磁盘
干什么用: 在其上创建文件系统
特点: 可以动态调整大小,不受物理限制
6.3 LVM高级功能
LUKS加密
是什么: Linux统一密钥设置,提供磁盘级加密
干什么用: 保护数据安全,即使硬盘被盗数据也不会泄露
工作方式: 在块设备层加密,对上层应用完全透明
VDO(Virtual Data Optimizer)
是什么: 虚拟数据优化器
干什么用:
-
重复数据删除: 相同的数据块只存储一份
-
数据压缩: 实时压缩数据,节省空间
效果: 最多可以节省95%的存储空间
7. Stratis存储管理
7.1 Stratis是什么?
核心概念: Stratis是一个智能的存储管理守护进程,它自动管理底层的复杂存储组件。
设计理念: "存储应该简单易用"
7.2 Stratis与传统管理的区别
传统方式:
bash
# 需要多个步骤和命令
创建分区 → 创建PV → 创建VG → 创建LV → 创建文件系统
Stratis方式:
bash
# 一个命令搞定所有
stratis pool create mypool /dev/sdb
stratis filesystem create mypool myfs
7.3 Stratis核心特性
精简配置(Thin Provisioning)
是什么: 文件系统显示的大小与实际分配的物理空间不同
实际例子:
bash
# 创建一个显示为1TB的文件系统
stratis filesystem create pool1 largefs
# 但实际只分配了10GB物理空间
# 随着数据增加,自动从池中分配更多空间
注:这个命令并没有 在创建时指定文件系统大小。它创建的文件系统默认会显示为整个存储池的可用容量。
快照(Snapshot)
是什么: 文件系统在某个时间点的只读副本
干什么用:
-
数据备份
-
测试环境
-
误操作恢复
7.4 Stratis架构详解
bash
文件系统1 文件系统2 文件系统3
↓ ↓ ↓
┌─────────────────────┐
│ 存储池 │
│ ┌───────────────┐ │
│ │ /dev/sda │ │
│ │ /dev/sdb │ │
│ │ /dev/sdc │ │
│ └───────────────┘ │
└─────────────────────┘
关键点:
-
多个文件系统共享一个存储池
-
存储空间按需分配
-
支持动态扩展
7.5 Stratis实战配置
安装和启用
bash
# 安装软件包
dnf install stratis-cli stratisd
# 启动服务
systemctl enable --now stratisd
创建存储池
bash
# 创建包含一个磁盘的池
stratis pool create mypool /dev/sdb
# 查看池信息
stratis pool list
创建文件系统
bash
# 从池中创建文件系统
stratis filesystem create mypool datafs
# 查看文件系统
stratis filesystem list
持久化挂载
bash
# 获取文件系统UUID
lsblk --output=UUID /dev/stratis/mypool/datafs
# 编辑/etc/fstab
UUID=xxxx /data xfs defaults,x-systemd.requires=stratisd.service 0 0
重要提醒: 必须包含x-systemd.requires=stratisd.service选项,否则系统可能无法启动!
8. 存储堆栈的最佳实践
8.1 选择合适的组件组合
基础文件服务器:
bash
硬盘 → 分区 → 文件系统
企业级应用:
bash
多块硬盘 → RAID → LVM → 文件系统
安全敏感环境:
bash
硬盘 → LUKS加密 → LVM → 文件系统
需要节省空间的场景:
bash
硬盘 → LVM with VDO → 文件系统
8.2 监控和维护
监控存储使用:
-
定期检查存储空间使用情况
-
设置告警阈值
-
监控性能指标
备份策略:
-
重要数据定期备份
-
测试恢复流程
-
使用快照功能
9. 总结
RHEL存储堆栈提供了一个完整而灵活的存储解决方案:
-
基础层(块设备):提供原始的存储能力
-
冗余层(多路径、RAID):确保数据可用性
-
管理层(分区、LVM):提供灵活的存储组织
-
功能层(加密、压缩):增强数据安全和效率
-
简化层(Stratis):降低管理复杂度