使用 Stratis 管理分层存储
描述 STRATIS 架构
RHEL
的本地存储解决方案中有
device mapper (dm)
、
LVM
及
XFS
等技术。每个存储堆栈层均使用专门的命令和程序进行管理
新一代的存储管理解决方案,称为
volume-managing file systems
,它在创建文件系统及调整其大小时以动态、透明的方式来管理 volume
层。但尽管社区开发已经持续了很多年,但仍未满足 RHEL
本地存储所需的功能和稳定性
在
RHEL 8
中,红帽推出了
Stratis
存储管理解决方案,以管理
物理存储
设备池的服务形式运行,并透明地为所创建的文件系统创建和管理卷
由于
Stratis
使用现有存储驱动和工具,因此支持当前在
LVM
、
XFS
和 dm 中使用的所有高级存储功能
Stratis
使用存储的元数据来识别所管理的池、卷和文件系统。
绝不能对Stratis 创建的文件系统进行手动重新格式化或重新配置
,只应使用Stratis 工具和命令对它们进行管理
可以使用不同组的块设备来创建多个池,在每个池中,可创建一个或多个文件系统。目前,每个池最多可以创建 224 个文件系统
池可将块设备分组到数据层,或分组到缓存层(可选)。数据层侧重于灵 活性和完整性,而缓存层则侧重于提高性能(SSD
)。下图说明
Stratis中元素如何组装:
![](https://i-blog.csdnimg.cn/blog_migrate/8e38b03c39777b6bd8c54b4df67f666a.png)
描述简化的存储堆栈
Stratis
简化了各红帽产品之间本地存储部署和配置。包括
Anaconda
、Cockpit、红帽虚拟化和
Atomic
主机均可使用
Stratis
:
Stratis
令存储空间和快照的管理变得更为简单,且更不容易出错。 Stratis 更容易与高级管理工具进行集成
![](https://i-blog.csdnimg.cn/blog_migrate/bc9a1afbb179af2b85f0fe5269dce19e.png)
描述 Stratis 层
在内部,
Stratis
使用
Backstore
子系统
来管理
block device
, 并使用
Thinpool 子系统
来管理池
Backstore
有一个数据层,负责维护
block device
上的元数据, 以及检测和纠正数据损坏。缓存层使用高性能块设备,作为数据层之上的缓存
Thinpool
子系统管理与
Stratis
文件系统关联的
thin- provisioned volume精简配置卷,该子系统使用 dm-thin 取代 LVM 进行虚拟卷管理
dm-thin
可以创建虚拟空间比较大、采用
XFS
格式,但物理空间比较小的卷。当物理空间快满时,Stratis 会自动将其扩大
![](https://i-blog.csdnimg.cn/blog_migrate/450b1173fc4ea498aed2706a683d15bb.png)
管理 Thin-provisioned 的文件系统
管理
Thin-provisioned
文件系统,需安装
stratis-cli
和
stratisd
软件包
stratis-cli
软件包中提供了
stratis
命令,将用户请求发送到
stratisd
服务
stratisd
软件包中提供了
stratisd
服务,管理和监控
Stratis
的元素,如块设备、池和文件系统
安装并激活
Stratis
:
-
使用
yum install
命令安装
stratis-cli 和 stratisd
![](https://i-blog.csdnimg.cn/blog_migrate/4d1e88340b99dd781c787d9955894c35.png)
- 使用 systemctl 命令激活 stratisd 服务
使用
Stratis
执行的常规管理操作::
-
使用
stratis pool create
命令创建块设备的池,每个池都是
/stratis
下的一个子目录
![](https://i-blog.csdnimg.cn/blog_migrate/cdf227148136f9f1836688a5263d4128.png)
- 使用 stratis pool list 命令查看可用池的列表
使用
Stratis
执行的常规管理操作::
-
使用 stratis pool add-data 命令向池中添加额外的块设备
![](https://i-blog.csdnimg.cn/blog_migrate/ca7301d3320db7f35de97a9e2d7e53c8.png)
- 使用 stratis blockdev list 命令查看池的块设备
使用
Stratis
执行的常规管理操作:
-
使用
stratis filesystem create
命令为池创建动态文件系统。
Stratis
文件系统的链接位于 /stratis/pool1 目录中
![](https://i-blog.csdnimg.cn/blog_migrate/1a8db10731fe4985dec4f73d226d9213.png)
- 使用 stratis filesystem snapshot 命令创建文件系统快照 - 使用 stratis filesystem list 命令查看可用文件系统的列表
使用
Stratis
执行的常规管理操作:
-
为了持久挂载
Stratis 文件系统,需编辑 /etc/fstab
![](https://i-blog.csdnimg.cn/blog_migrate/7178a8996dbbd4dd5d31b5d60fe7902b.png)
重要
:
x-systemd.requires=stratisd.service
挂载选项可延迟挂载文件系统,
直到
systemd
在启动过程中启动
stratisd.service
为止
使用 VDO 压缩存储和去重
描述虚拟数据优化器
RHEL 8
包含
Virtual Data Optimizer
(
VDO
)驱动程序,可以优化块设备上数据的空间占用
VDO
是一个
Linux device mapper
驱动程序,它可以减少块设备上的磁盘空间使用,同时最大限度减少数据重复,从而节省磁盘空间,甚至提高数据吞吐量
VDO
包括两个内核模块:
kvdo
模块用于以透明的方式控制数据压缩,
uds 则可用于重复数据删除
VDO
层位于块存储设备的顶部,而存储层(如
LVM
逻辑卷和文件系统)位于 VDO 设备之上
![](https://i-blog.csdnimg.cn/blog_migrate/016f3de5bb66428fa7853a49900cccd5.png)
VDO
按以下顺序对数据实施三个阶段的处理,以减少空间占用:
1).
零块消除将过滤掉仅包含
0
的数据块,且仅在元数据中记录这些块的信息。非零数据块随即被传递到下一个处理阶段
2).
重复数据删除将去除冗余的数据块。在创建相同数据的多个副本时, VDO 会检测重复数据块并更新元数据,不会创建冗余数据块。
uds 内核模块将通过其维护的元数据来检查数据的冗余
3).
最后一个阶段是压缩,
kvdo
内核模块使用
LZ4
压缩对块进行压缩,并以 4 KB 块进行分组
实施 VDO
利用
VDO
创建的逻辑设备被称为
VDO
卷。
VDO
卷与磁盘分区类似
可以将这些卷格式化为所需的文件系统,并进行挂载。此外,还可以将VDO 卷用作
LVM
物理卷
要创建
VDO
卷,需指定块设备和逻辑设备的名称。也可指定
VDO
卷的逻辑大小(可选),VDO
卷的逻辑大小可以大于实际块设备的物理大小
由于
VDO
卷采用了精简配置,因此用户只能看到正在使用的逻辑空间,而无法了解实际可用的物理空间
如果在创建卷时未指定逻辑大小,则
VDO
会将实际物理大小视为卷的逻辑大小。这种采用 1:1
的比率映射方式有利于提高性能,但也会降低存储空间的使用效率。 生产中应根据基础架构要求来确定是优先考虑性能还是空间效率
当
VDO
卷的逻辑大小超过实际物理大小时,应使用
vdostats --verbose命令主动监控卷统计信息,以查看实际使用情况
启动 VDO
需要安装
VDO
和 kmod-kvdo 软件包
![](https://i-blog.csdnimg.cn/blog_migrate/68c75f373c97718d41fc82876600397b.png)
创建 VDO 卷
运行
vdo create
命令创建 VDO 卷
![](https://i-blog.csdnimg.cn/blog_migrate/c146c61748c47526e573524ec63ca245.png)
如果省略逻辑大小,则生成的 VDO 卷将与其物理设备的大小相同
分析 VDO 卷
运行
vdo status
命令分析
VDO
卷,结果以 yaml 格式显示
![](https://i-blog.csdnimg.cn/blog_migrate/20f6b5376ac695942894caed5dcfbd30.png)
vdo list
命令显示当前启动的
VDO
卷的列表
可以分别使用
vdo start
和
vdo stop
命令来启动和停止
VDO
卷