第 36 章 去重和压缩存储
36.1. 部署 VDO 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 VDO 创建去重和压缩的存储池。
36.1.1. VDO 简介 复制链接链接已复制到粘贴板!
Virtual Data Optimizer(VDO)以去重、压缩和精简置备的形式为 Linux 提供内联数据降低。当您设置 VDO 卷时,您可以指定一个块设备来构建 VDO 卷以及您要存在的逻辑存储量。
- 当托管活动的虚拟机或容器时,红帽建议按 10:1 的逻辑与物理比例配置存储:也就是说,如果您使用 1TB 的物理存储,则将其显示为 10TB 的逻辑存储。
- 对于对象存储,如 Ceph 提供的类型,红帽建议使用 3:1 的逻辑与物理比例:1TB 的物理存储将显示为 3TB 的逻辑存储。
在这两种情况下,您只需将文件系统放在 VDO 提供的逻辑设备之上,然后直接使用它,或将其作为分布式云存储架构的一部分。
由于 VDO 是迅速置备的,所以文件系统和应用程序只会看到使用中的逻辑空间,且不知道可用的实际物理空间。使用脚本来监控实际的可用空间,并在使用超过阈值时产生一个报警:例如,当 VDO 卷已满 80% 时。
36.1.2. VDO 部署场景 复制链接链接已复制到粘贴板!
您可以使用各种方法部署 VDO,来为以下情况提供去重存储:
- 块和文件的访问
- 本地和远程存储
因为 VDO 会将其去重存储公开为标准 Linux 块设备,所以您可以在标准文件系统、iSCSI 和 FC 目标驱动程序或者统一存储中使用它。
目前,支持在 Ceph RADOS 块设备(RBD)上部署 VDO 卷。但是,目前不支持在 VDO 卷上部署 Red Hat Ceph Storage 集群组件。
KVM
您可以在配置了直接附加存储的 KVM 服务器上部署 VDO。
文件系统
您可以在 VDO 上创建文件系统,并通过 NFS 服务器或 Samba 将其公开给 NFS 或 CIFS 用户。
在 iSCSI 上放置 VDO
您可以将整个 VDO 存储目标作为 iSCSI 目标导出到远程 iSCSI 启动器。
在 iSCSI 上创建 VDO 卷时,您可以将 VDO 卷放在 iSCSI 层之上或之下。尽管需要考虑许多注意事项,但此处提供了一些准则,来帮助您选择最适合您环境的方法。
当将 VDO 卷放在 iSCSI 层下方的 iSCSI 服务器(目标)上时:
- VDO 卷对启动器是透明的,与其他 iSCSI LUN 类似。对客户端隐藏精简配置和节省空间后,更易于监控和维护 LUN 。
- 网络流量会减少,因为没有对 VDO 元数据的读或写,并且在网络上不会发生对去除重复建议的读验证。
- 在 iSCSI 目标上使用的内存和 CPU 资源可以带来更好的性能。例如,能够托管越来越多的 hypervisor ,因为在 iSCSI 目标上发生了卷减少。
- 如果客户端在启动器上实现了加密,且在目标下面有一个 VDO 卷,则不会实现任何空间节省。
当将 VDO 卷放在 iSCSI 层上面的 iSCSI 客户端(启动器)上时:
- 如果要取得较高的空间节省率,则异步模式下的网络流量可能会降低。
- 您可以直接查看和控制空间节省,并监控使用情况。
-
如果要加密数据,例如使用
dm-crypt,您可以在加密之上实现 VDO,并充分利用空间效率。
LVM
在功能丰富的系统上,您可以使用 LVM 来提供多个逻辑单元号(LUN),这些 LUN 都由相同的去重存储池支持。
在下图中,VDO 目标被注册为一个物理卷,这样它可以由 LVM 来管理。从去重存储池中创建多个逻辑卷(LV1到 LV4)。这样 VDO 便可支持多协议统一块或者对底层去重存储池的文件进行访问。
去重的统一存储设计可使多个文件系统通过 LVM 工具共同使用相同的去重域。另外,文件系统可以利用 LVM 快照、写时复制、缩小或增长的功能,所有这些都位于 VDO 之上。
加密
DM Crypt 等设备映射器(DM)机制与 VDO 兼容。加密 VDO 卷有助于确保数据安全,且任何 VDO 以上的文件系统仍会是去重的。
在 VDO 之上应用加密层会几乎不会导致任何数据去重。在 VDO 可以对它们进行去重之前,加密会使重复的数据块不同。
始终将加密层放在 VDO 下。
36.1.3. VDO 卷的组件 复制链接链接已复制到粘贴板!
VDO 使用块设备作为后备存储,它包括由一个或多个磁盘、分区甚至平面文件组成的物理存储聚合。当存储管理工具创建 VDO 卷时,VDO 为 UDS 索引和 VDO 卷保留卷空间。UDS 索引和 VDO 卷会一起交互,以提供去重的块存储。
图 36.1. VDO 磁盘机构
VDO 解决方案包括以下组件:
kvdo载入 Linux 设备映射器层的内核模块提供一个去重的、压缩的和精简配置的块存储卷。
kvdo模块公开一个块设备。对于块存储,您可以直接访问块存储或通过 Linux 文件系统(如 XFS 或 ext4)呈现它。当
kvdo收到一个读取 VDO 卷中数据的逻辑块的请求时,它会将请求的逻辑块映射到底层的物理块上,然后读取并返回请求的数据。当
kvdo收到一个向 VDO 卷写数据块的请求时,它首先检查请求是 DISCARD 还是 TRIM 请求,或者数据是否统一为零。如果其中任何一个条件为真,则kvdo会更新其块映射,并确认请求。否则,VDO 会处理并优化数据。uds一个与卷上 Universal Deduplication Service(UDS)索引进行通信,并分析数据是否有重复的内核模块。对于每个新的数据,UDS 可以快速地判断该数据是否与之前存储的数据相同。如果索引发现匹配项,则存储系统可在内部引用现有项,以避免多次保存相同的信息。
UDS 索引作为
uds内核模块运行在内核中。- 命令行工具
- 用于配置和管理优化的存储。
36.1.4. VDO 卷的物理和逻辑大小 复制链接链接已复制到粘贴板!
VDO 使用以下方法使用物理、可用物理和逻辑大小:
- 物理大小
这与底层块设备的大小相同。VDO 使用这个存储用于:
- 用户数据,这些数据可能会进行重复数据删除和压缩
- VDO 元数据,如 UDS 索引
- 可用物理大小
这是 VDO 可用于用户数据的物理大小的一部分
它等同于物理大小减去元数据的大小,再减去将卷根据指定的 slab 的大小分为 slab 后剩余的值。
- 逻辑大小
这是 VDO 卷在应用程序中的置备大小。它通常大于可用的物理大小。如果没有指定
--vdoLogicalSize选项,则逻辑卷的置备现在会被置备为1:1比例。例如,如果将 VDO 卷放在 20GB 块设备之上,则为 UDS 索引保留 2.5 GB(如果使用默认索引大小)。剩余的 17.5 GB 为 VDO 元数据和用户数据提供。因此,要消耗的可用存储不超过 17.5 GB,且可能会因为组成实际 VDO 卷的元数据而减少。VDO 目前支持任意逻辑卷大小最多为物理卷的 254 倍,但不能超过 4PB。
图 36.2. VDO 磁盘机构
在这个图表中,VDO 重复数据删除存储对象完全位于块设备之上,这意味着 VDO 卷的物理大小与基本块设备大小相同。
36.1.5. VDO 中的 Lab 大小 复制链接链接已复制到粘贴板!
VDO 卷的物理存储被分成几个 slab。每个 slab 都是物理空间的连续区域。给定卷的所有 slab 的大小相同,可以是基于 128 MB 的 2 的指数的任何值,最大值为 32 GB。
默认的 slab 大小为 2 GB,用于在较小的测试系统中评估 VDO。单个 VDO 卷最多可有 8192 个 slabs。因此,在使用 2GB slab 的默认配置中,允许的最大物理存储为 16 TB。当使用 32GB 的 slab 时,允许的最大物理存储为 256 TB。VDO 总是保留至少一个整个 slab 来保存元数据,因此预留 slab 无法用于存储用户数据。
slab 大小不影响 VDO 卷的性能。
| 物理卷大小 | 推荐的 slab 大小 |
|---|---|
| 10–99 GB | 1 GB |
| 100 GB – 1 TB | 2 GB |
| 2–256 TB | 32 GB |
使用默认设置的 2 GB slab 和 0.25dense 索引的 VDO 卷的最小磁盘用量需要 approx 4.7 GB。这提供了在 0% 重复数据删除或压缩时写入的 2 GB 物理数据要少 2 GB。
这里的磁盘用量是默认 slab 大小和密度索引的总和。
您可以通过向 lvcreate 命令提供-- vdosettings 'vdo_slab_size_mb=size-in-megabytes' 选项来控制 slab 大小。
36.1.6. VDO 要求 复制链接链接已复制到粘贴板!
VDO 对其放置和系统资源有一定要求。
36.1.6.1. VDO 内存要求 复制链接链接已复制到粘贴板!
每个 VDO 卷有不同的内存要求:
- VDO 模块
VDO 需要固定的 38 MB RAM 和几个变量数量:
- 每个配置的块映射缓存大小 1 MB 的 1.15 MB RAM。块映射缓存至少需要 150 MB RAM。
- 每个 1 TB 逻辑空间的 1.6 MB RAM。
- 由卷管理的每 1 TB 物理存储的 268 MB RAM。
- UDS 索引
通用重复数据删除服务(UDS)至少需要 250 MB RAM,这也是重复数据删除使用的默认数量。您可以在格式化 VDO 卷时配置值,因为值还影响索引所需的存储量。
UDS 索引所需的内存由索引类型和去重窗口所需的大小决定。去重窗口是 VDO 可以检查匹配块的之前写入的数据量。
Expand 索引类型 重复数据删除窗口 密度
每 1 GB RAM 为 1 TB
稀疏
每 1 GB RAM 为 10 TB
注意使用默认设置的 2 GB slab 和 0.25dense 索引的 VDO 卷的最小磁盘用量需要 approx 4.7 GB。这提供了在 0% 重复数据删除或压缩时写入的 2 GB 物理数据要少 2 GB。
这里的磁盘用量是默认 slab 大小和密度索引的总和。
36.1.6.2. VDO 存储空间要求 复制链接链接已复制到粘贴板!
您可以将 VDO 卷配置为使用最多 256TB 物理存储。只有物理存储的某个部分可用来存储数据。
VDO 需要存储两种类型的 VDO 元数据和 UDS 索引。使用以下计算来确定 VDO 管理的卷的可用大小:
- 第一类 VDO 元数据对于每 4GB 物理贮存使用 1 MB,再加上每个 slab 的额外的 1 MB。
- 第二类 VDO 元数据对于每 1GB 逻辑存储使用 1.25 MB,并舍入到最近的 slab。
- UDS 索引所需的存储量取决于索引类型以及分配给索引的 RAM 量。对于每 1 GB RAM,密度 UDS 索引使用 17GB 存储,稀疏 UDS 索引使用 170 GB 存储。
36.1.6.3. 将 VDO 放置到存储堆栈中 复制链接链接已复制到粘贴板!
将存储层放在 Virtual Data Optimizer (VDO)之上或之下,以符合放置要求。
VDO 卷是一个精简配置的块设备。您可以通过将卷放在之后可以进行扩展的存储层上来防止耗尽物理空间。这种可扩展存储的示例是逻辑卷管理器(LVM)卷,或多设备冗余廉价阵列或独立磁盘(MD RAID)阵列。
您可以将厚置备层放在 VDO 之上。您必须考虑厚置备的层的两个方面:
- 将新数据写入厚设备上未使用的逻辑空间。当使用 VDO 或其他精简置备存储时,设备可能会报告在这类写入过程中空间不足。
- 使用新数据覆盖厚设备上使用的逻辑空间。使用 VDO 时,覆盖数据也会导致设备不足的报告。
这些限制会影响 VDO 层以上的所有层。如果不监控 VDO 设备,您可能会意外耗尽 VDO 之上厚置备卷上的物理空间。
请参阅以下支持和不支持的 VDO 卷配置示例。
图 36.3. 支持的 VDO 卷配置
图 36.4. 不支持的 VDO 卷配置
36.1.6.4. 按物理大小划分的 VDO 要求示例 复制链接链接已复制到粘贴板!
下表根据基础卷的物理大小提供 VDO 的最大系统要求。每个表都列出适合预期部署的要求,如主存储或备份存储。
具体数量取决于您的 VDO 卷的配置。
- 主存储部署
在主存储中,UDS 索引是物理大小的 0.01% 到 25%。
Expand 表 36.2. 用于主存储的存储和内存配置的示例 物理大小 RAM 使用量:UDS RAM 使用量:VDO 磁盘用量 索引类型 1 TB
250 MB
472 MB
2.5 GB
密度
10 TB
1 GB
3 GB
10 GB
密度
250 MB
22 GB
稀疏
50 TB
1 GB
14 GB
85 GB
稀疏
100 TB
3 GB
27 GB
255 GB
稀疏
256 TB
5 GB
69 GB
425 GB
稀疏
- 备份存储部署
在备份存储情况下,去除窗口必须大于备份集。如果您预期备份集或物理大小在以后会增大,则需要把这个值加到索引大小中。
Expand 表 36.3. 用于备份存储的存储和内存配置的示例 重复数据删除窗口 RAM 使用量:UDS 磁盘用量 索引类型 1 TB
250 MB
2.5 GB
密度
10 TB
2 GB
21 GB
密度
50 TB
2 GB
170 GB
稀疏
100 TB
4 GB
340 GB
稀疏
256 TB
8 GB
700 GB
稀疏
36.1.7. 安装 VDO 复制链接链接已复制到粘贴板!
您可以安装创建、挂载和管理 VDO 卷所需的 VDO 软件。
流程
安装 VDO 软件:
# yum install lvm2 kmod-kvdo vdo
36.1.8. 创建 VDO 卷 复制链接链接已复制到粘贴板!
此流程在块设备中创建 VDO 卷。
先决条件
- 安装 VDO 软件。请参阅 第 36.1.7 节 “安装 VDO”。
- 使用可扩展存储作为后备块设备。更多信息请参阅 第 36.1.6.3 节 “将 VDO 放置到存储堆栈中”。
流程
在以下步骤中,将 vdo-name 替换为您要用于 VDO 卷的标识符,例如 vdo1。您必须为系统中的每个 VDO 实例使用不同的名称和设备。
找到您要创建 VDO 卷的块设备的持久名称。有关持久性名称的更多信息,请参阅 第 26 章 持久性命名属性概述。
如果您使用非持久性设备名称,则如果设备名称改变,VDO 可能无法在以后正确启动。
创建 VDO 卷:
# vdo create \ --name=vdo-name \ --device=block-device \ --vdoLogicalSize=logical-size-
使用您要创建 VDO 卷的块设备的持久性名称替换 block-device。例如,
/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f。 用 VDO 卷使用的逻辑存储数量替换 logical-size。
-
对于活跃的虚拟机或容器存储,逻辑大小为块设备物理大小的 十倍。例如:如果您的块设备大小为 1TB,则在此处使用
10T。 -
对于对象存储,使用逻辑大小,即您的块设备物理大小的 三倍。例如:如果您的块设备大小为 1TB,则在此处使用
3T。
-
对于活跃的虚拟机或容器存储,逻辑大小为块设备物理大小的 十倍。例如:如果您的块设备大小为 1TB,则在此处使用
如果物理块设备大于 16TiB,请添加
--vdoSlabSize=32G选项,将卷的 slab 大小增加到 32GiB。在大于 16TiB 的块设备中使用默认 2GiB 的 slab 大小会导致
vdo create命令失败,并显示以下错误:vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supported
例 36.1. 为容器存储创建 VDO
例如,要为 1TB 块设备中的容器存储创建 VDO 卷,您可以使用:
# vdo create \ --name=vdo1 \ --device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f \ --vdoLogicalSize=10T重要如果在创建 VDO 卷时发生故障,请删除要清理的卷。详情请参阅 删除失败创建的 VDO 卷。
-
使用您要创建 VDO 卷的块设备的持久性名称替换 block-device。例如,
在 VDO 卷之上创建一个文件系统:
对于 XFS 文件系统:
# mkfs.xfs -K /dev/mapper/vdo-name对于 ext4 文件系统:
# mkfs.ext4 -E nodiscard /dev/mapper/vdo-name注意在新创建的 VDO 卷上使用
-K和-E nodiscard选项的目的是不在发送请求上花费时间,因为它对未分配的块没有影响。新 VDO 卷从 100% 未分配开始。
使用以下命令等待系统注册新设备节点:
# udevadm settle
后续步骤
- 挂载文件系统。详情请查看 第 36.1.9 节 “挂载 VDO 卷”。
-
在 VDO 设备中为文件系统启用
丢弃功能。详情请查看 第 36.1.10 节 “启用定期块丢弃”。
36.1.9. 挂载 VDO 卷 复制链接链接已复制到粘贴板!
这个过程会在 VDO 卷中手动挂载文件系统,也可以永久挂载文件系统。
先决条件
- 在您的系统上创建了 VDO 卷。具体说明请查看 第 36.1.8 节 “创建 VDO 卷”。
流程
要手动将文件系统挂载到 VDO 卷中,请使用:
# mount /dev/mapper/vdo-name mount-point要将文件系统配置为在引导时自动挂载,请在
/etc/fstab文件中添加行:对于 XFS 文件系统:
/dev/mapper/vdo-name mount-point xfs defaults 0 0对于 ext4 文件系统:
/dev/mapper/vdo-name mount-point ext4 defaults 0 0
如果 VDO 卷位于需要网络的块设备中,如 iSCSI,请添加
_netdev挂载选项。
36.1.10. 启用定期块丢弃 复制链接链接已复制到粘贴板!
您可以启用 systemd 计时器来定期丢弃所有支持的文件系统上未使用的块。
流程
启用并启动
systemd计时器:# systemctl enable --now fstrim.timer Created symlink /etc/systemd/system/timers.target.wants/fstrim.timer/usr/lib/systemd/system/fstrim.timer.
验证
验证计时器的状态:
# systemctl status fstrim.timer fstrim.timer - Discard unused blocks once a week Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: disabled) Active: active (waiting) since Wed 2023-05-17 13:24:41 CEST; 3min 15s ago Trigger: Mon 2023-05-22 01:20:46 CEST; 4 days left Docs: man:fstrim May 17 13:24:41 localhost.localdomain systemd[1]: Started Discard unused blocks once a week.
36.1.11. 监控 VDO 复制链接链接已复制到粘贴板!
此流程描述了如何从 VDO 卷获取使用效率的信息。
先决条件
- 安装 VDO 软件。请参阅安装 VDO。
流程
使用
vdostats工具来获取有关 VDO 卷的信息:# vdostats --human-readable Device 1K-blocks Used Available Use% Space saving% /dev/mapper/node1osd1 926.5G 21.0G 905.5G 2% 73% /dev/mapper/node1osd2 926.5G 28.2G 898.3G 3% 64%