描述Stratis架构


Stratis是随RHEL 8引入的本地管理存储解决方案,它使系统管理员可以配置高级存储功能,例如:

  1. Pool-based management

  2. Thin provisioning

  3. File system snapshots

  4. Monitoring

Stratisd是Stratis的守护程序,可帮助配置XFS文件系统和设备映射器子系统下的存储组件。目前,Stratis支持LVM逻辑卷、硬盘、SSD,NVMe和ISCSI存储设备。


Stratis包括:

  • Stratisd守护程序:使用户能够管理块设备的守护程序。

  • Stratis-cli:Stratis附带的命令行。


Stratis的逻辑架构如下图所示,分为三层:

  • blockdev:这是指块设备的术语。

  • 池:一个池可以包含一个或多个块设备。 分层池的大小将等于构成该池的块设备的总和。

  • 文件系统:文件系统是一个精简配置的层,其大小随着更多信息或数据的添加而增加。 随着数据的增长,Stratis会自动扩展文件系统的大小。


本地存储管理与存储压缩:RHEL8学习系列3_java




描述Stratis内部架构

在内部,Stratis 

  • 使用 Backstore 子系统来管理块设备;

  • 使用 Thinpool 子系统来管理池。

Backstore 有一个数据层,负责维护块设备磁盘上的元数据,以及检测和纠正数据损坏。缓存层使用高性能块设备,作为数据层之上的缓存。Thinpool 子系统管理与 Stratis 文件系统关联的精简部署卷。该子系统使用 dm-thin 设备映射器驱动程序取代 LVM 进行虚拟卷大小调整和管理。当物理大小快要满时,Stratis 会自动将其扩大。




安装和配置Stratis


[root@host ~]# yum install stratis-cli stratisd

[root@host ~]# systemctl enable --now stratisd


使用 stratis pool create 命令来创建包含一个或多个块设备的池。

[root@host ~]# stratis pool create pool1 /dev/vdb

每个池都是 /stratis 目录下的一个子目录。

使用 stratis pool list 命令查看可用池的列表。


[root@host ~]# stratis pool list
Name     Total Physical Size  Total Physical Used
pool1                  5 GiB               52 MiB


使用 stratis pool add-data 命令向池中添加额外的块设备。

[root@host ~]# stratis pool add-data pool1 /dev/vdc


使用 stratis blockdev list 命令查看池的块设备。

[root@host ~]# stratis blockdev list pool1
Pool Name  Device Node    Physical Size   State  Tier
pool1      /dev/vdb               5 GiB  In-use  Data
pool1      /dev/vdc               5 GiB  In-use  Data


使用 stratis filesystem create 命令为池创建动态、灵活的文件系统。

[root@host ~]# stratis filesystem create pool1 filesystem1

Stratis 文件系统的链接位于 /stratis/pool1 目录中。


Stratis 支持通过 stratis filesystem snapshot 命令创建文件系统快照。快照独立于源文件系统。

[root@host ~]# stratis filesystem snapshot pool1 filesystem1 snapshot1


使用 stratis filesystem list 命令查看可用文件系统的列表。

[root@host ~]# stratis filesystem list

为了确保持久挂载 Stratis 文件系统,请编辑 /etc/fstab 并指定文件系统的详细信息。以下命令显示文件系统的 UUID,在 /etc/fstab 中应使用该 UUID 来识别文件系统。

[root@host ~]# lsblk --output=UUID /stratis/pool1/filesystem1
UUID
31b9363b-add8-4b46-a4bf-c199cd478c55

以下是 /etc/fstab 文件中用于持久挂载 Stratis 文件系统的条目示例。

UUID=31b9...8c55 /dir1 xfs defaults,x-systemd.requires=stratisd.service 0 0

x-systemd.requires=stratisd.service 挂载选项可延迟挂载文件系统,直到 systemd 在启动过程中启动 stratisd.service 为止。


如果在 /etc/fstab 中未对 Stratis 文件系统使用 x-systemd.requires=stratisd.service 挂载选项,将会导致计算机在下一次重启时引导至 emergency.target。




使用VDO压缩存储和删除重复数据


红帽企业 Linux 8 包含虚拟数据优化器 (VDO) 驱动程序,可以优化块设备上数据的空间占用。VDO 是一个 Linux 设备映射器驱动程序,它可以减少块设备上的磁盘空间使用,同时最大限度减少数据重复,从而节省磁盘空间,甚至提高数据吞吐量。VDO 包括两个内核模块:kvdo 模块用于以透明的方式控制数据压缩,uds 则可用于重复数据删除。

VDO位于块设备的顶部,如下图所示:

本地存储管理与存储压缩:RHEL8学习系列3_java_02

VDO 会按以下顺序对数据实施三个阶段的处理,以减少存储设备上的空间占用:

  1. 零块消除将过滤掉仅包含零 (0) 的数据块,且仅在元数据中记录这些块的信息。非零数据块随即被传递到下一个处理阶段。该阶段将启用 VDO 设备中的精简配置功能。

  2. 重复数据删除将去除冗余的数据块。在创建相同数据的多个副本时,VDO 会检测重复数据块并更新元数据,以便使用这些重复块来引用原始数据块,而不会创建冗余数据块。通用重复数据删除服务 (UDS) 内核模块将通过其维护的元数据来检查数据的冗余。该内核模块是作为 VDO 的一部分而提供的。

  3. 最后一个阶段是压缩kvdo 内核模块使用 LZ4 压缩对块进行压缩,并以 4 KB 块进行分组。



配置VOD

利用 VDO 创建的逻辑设备被称为 VDO 卷。VDO 卷与磁盘分区类似;可以将这些卷格式化为所需的文件系统类型,并像常规文件系统那样进行挂载。此外,您还可以将 VDO 卷用作 LVM 的PV。

要创建 VDO 卷,请指定块设备以及 VDO 向用户显示的逻辑设备的名称。可以指定 VDO 卷的逻辑大小(可选)。VDO 卷的逻辑大小可以大于实际块设备的物理大小。

由于 VDO 卷采用了精简配置,因此用户只能看到正在使用的逻辑空间,而无法了解实际可用的物理空间。如果在创建卷时未指定逻辑大小,则 VDO 会将实际物理大小视为卷的逻辑大小。这种采用 1:1 的比率映射逻辑大小与物理大小的方式有利于提高性能,但同时也会降低存储空间的使用效率。应根据您的基础架构要求来确定是优先考虑性能还是空间效率。

当 VDO 卷的逻辑大小超过实际物理大小时,应使用 vdostats --verbose 命令主动监控卷统计信息,以查看实际使用情况。

启用 VDO

安装 VDO 和 kmod-kvdo 软件包,以便在系统中启用 VDO。

[root@host ~]# yum install vdo kmod-kvdo

创建 VDO 卷

要创建 VDO 卷,请运行 vdo create 命令。

[root@host ~]# vdo create --name=vdo1 --device=/dev/vdd --vdoLogicalSize=50G

如果省略逻辑大小,则生成的 VDO 卷将与其物理设备的大小相同。

当 VDO 卷就位时,您可以将它格式化为所选的文件系统类型并挂载于系统的文件系统层次结构下。

分析 VDO 卷

要分析 VDO 卷,请运行 vdo status 命令。此命令将以 YAML 格式显示有关 VDO 系统的报告以及 VDO 卷的状态。此外,它还显示 VDO 卷的属性。使用 --name= 选项可指定特定卷的名称。如果省略特定卷的名称,vdo status 命令的输出中将显示所有 VDO 卷的状态。

[root@host ~]# vdo status --name=vdo1
...output omitted...

vdo list 命令显示当前启动的 VDO 卷的列表。您可以分别使用 vdo start 和 vdo stop 命令来启动和停止 VDO 卷。