Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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
  1. 使用 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 卷”
  2. 创建文件系统:
    • 对于 XFS 文件系统:
      # mkfs.xfs -K /dev/mapper/vdo_name
    • 对于 ext4 文件系统:
      # mkfs.ext4 -E nodiscard /dev/mapper/vdo_name
  3. 挂载文件系统:
    # mkdir -m 1777 /mnt/vdo_name
    # mount /dev/mapper/vdo_name /mnt/vdo_name
  4. 要将文件系统配置为自动挂载,请使用 /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 中。
  5. 为 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

使用 KVM 部署 VDO

更多部署场景

有关 VDO 部署的更多信息,请参阅 第 30.5 节 “部署场景”