30.3. VDO 入门
30.3.1. 简介
Virtual Data Optimizer(VDO)以重复数据删除(deduplication)、压缩和精简置备的形式为 Linux 提供内联数据降低。当您设置 VDO 卷时,您可以指定一个块设备来构建 VDO 卷以及您要存在的逻辑存储量。
- 当托管活跃的虚拟机或容器时,红帽建议使用 10:1 逻辑与物理比例置备存储:也就是说,如果您使用 1TB 物理存储,您将把它显示为 10TB 逻辑存储。
- 对于对象存储,如 Ceph 提供的类型,红帽建议使用 3:1 逻辑与物理比例:1TB 的物理存储将显示为 3TB 逻辑存储。
在这两种情况下,您只需将文件系统放在 VDO 提供的逻辑设备之上,然后直接使用它,或将其作为分布式云存储架构的一部分。
本章论述了 VDO 部署的以下用例:
- 虚拟化服务器的直接连接用例,比如使用 Red Hat Virtualization 构建的用户,以及
- 基于对象的分布式存储集群的云存储用例,如使用 Ceph Storage 构建的云存储用例。注意目前不支持使用 Ceph 进行 VDO 部署。
本章提供了配置 VDO 以与标准 Linux 文件系统搭配使用的示例,该系统可针对任一用例轻松部署;请参阅 第 30.3.5 节 “部署示例” 中的图。
30.3.2. 安装 VDO
VDO 使用以下 RPM 软件包部署:
- vdo
- kmod-kvdo
要安装 VDO,请使用 yum 软件包管理器安装 RPM 软件包:
#
yum install vdo kmod-kvdo
30.3.3. 创建 VDO 卷
为您的块设备创建 VDO 卷。请注意,可以为同一机器上的独立设备创建多个 VDO 卷。如果选择这个方法,必须为系统上的每个 VDO 实例提供不同的名称和设备。
重要
使用可扩展存储作为后备块设备。如需更多信息,请参阅 第 30.2 节 “系统要求”。
在以下步骤中,将 vdo_name 替换为您要用于 VDO 卷的标识符,例如
vdo1
。
- 使用 VDO Manager 创建 VDO 卷:
#
vdo create \--name=vdo_name
\--device=block_device
\--vdoLogicalSize=logical_size \
[--vdoSlabSize=slab_size
]- 使用您要创建 VDO 卷的块设备的持久性名称替换 block_device。例如:
/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f
。重要使用持久的设备名称。如果您使用非持久性设备名称,则如果设备名称改变了,VDO 将来可能无法正常启动。有关持久性名称的更多信息,请参阅 第 25.8 节 “持久性命名”。 - 将 logical_size 替换为 VDO 卷应该存在的逻辑存储量:
- 对于活跃的虚拟机或容器存储,逻辑大小为您的块设备物理大小的 十 倍。例如,如果您的块设备大小为 1 TB,请在此处使用
10T
。 - 对于对象存储,使用逻辑大小,即您的块设备物理大小的 三倍。例如,如果您的块设备大小为 1 TB,请在此处使用
3T
。
- 如果块设备大于 16 TiB,请添加
--vdoSlabSize=32G
,以将卷的 slab 大小增加到 32 GiB。在大于 16 TiB 的块设备上使用 2 GiB 的默认 slab 大小会导致 vdo create 命令失败,并显示以下错误:vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supported
如需更多信息,请参阅 第 30.1.3 节 “VDO 卷”。
例 30.1. 为容器存储创建 VDO
例如,要为 1TB 块设备上的容器存储创建 VDO 卷,您可以使用:#
vdo create \--name=vdo1
\--device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f
\--vdoLogicalSize=10T
创建 VDO 卷时,VDO 会在/etc/vdoconf.yml
配置文件中添加一个条目。然后,vdo.service
systemd 单元使用该条目来默认启动卷。重要如果在创建 VDO 卷时发生故障,请删除要清理的卷。详情请查看 第 30.4.3.1 节 “删除 Unsuccessfully Created 卷”。 - 创建文件系统:
- 对于 XFS 文件系统:
#
mkfs.xfs -K /dev/mapper/vdo_name - 对于 ext4 文件系统:
#
mkfs.ext4 -E nodiscard /dev/mapper/vdo_name
- 挂载文件系统:
#
mkdir -m 1777 /mnt/vdo_name#
mount /dev/mapper/vdo_name /mnt/vdo_name - 要将文件系统配置为自动挂载,请使用
/etc/fstab
文件或 systemd 挂载单元:- 如果您决定使用
/etc/fstab
配置文件,请在文件中添加以下行:- 对于 XFS 文件系统:
/dev/mapper/vdo_name /mnt/vdo_name xfs defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
- 对于 ext4 文件系统:
/dev/mapper/vdo_name /mnt/vdo_name ext4 defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
- 或者,如果您决定使用 systemd 单元,请使用适当的文件名创建一个 systemd 挂载单元文件。对于 VDO 卷的挂载点,使用以下内容创建
/etc/systemd/system/mnt-vdo_name.mount
文件:[Unit] Description = VDO unit file to mount file system name = vdo_name.mount Requires = vdo.service After = multi-user.target Conflicts = umount.target [Mount] What = /dev/mapper/vdo_name Where = /mnt/vdo_name Type = xfs [Install] WantedBy = multi-user.target
systemd 单元文件示例也安装在/usr/share/doc/vdo/examples/systemd/VDO.mount.example
中。
- 为 VDO 设备中的文件系统启用
discard
功能。批处理和在线操作都可用于 VDO。有关如何设置discard
功能的详情,请参考 第 2.4 节 “丢弃未使用的块”。
30.3.4. 监控 VDO
因为 VDO 是精简置备的,所以文件系统和应用程序只会看到使用的逻辑空间,并不知道可用的实际物理空间。
VDO 空间使用量和效率可使用 vdostats 工具监控:
#
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%
当 VDO 卷的物理存储容量接近满时,VDO 在系统日志中报告警告,如下所示:
Oct 2 17:13:39 system lvm[13863]: Monitoring VDO pool vdo_name. Oct 2 17:27:39 system lvm[13863]: WARNING: VDO pool vdo_name is now 80.69% full. Oct 2 17:28:19 system lvm[13863]: WARNING: VDO pool vdo_name is now 85.25% full. Oct 2 17:29:39 system lvm[13863]: WARNING: VDO pool vdo_name is now 90.64% full. Oct 2 17:30:29 system lvm[13863]: WARNING: VDO pool vdo_name is now 96.07% full.
重要
监控 VDO 卷的物理空间,以防止出现空间不足的情况。物理块不足可能会导致 VDO 卷中最近写入的数据丢失。
30.3.5. 部署示例
以下示例演示了如何在 KVM 和其他部署中使用 VDO。
使用 KVM 部署 VDO
要了解如何在配置了直接附加存储的 KVM 服务器中成功部署 VDO,请参阅 图 30.2 “使用 KVM 部署 VDO”。
图 30.2. 使用 KVM 部署 VDO
更多部署场景
有关 VDO 部署的更多信息,请参阅 第 30.5 节 “部署场景”。