29.3. VDO の使用

29.3.1. はじめに

VDO (Virtual Data Optimizer) は、重複排除、圧縮、およびシンプロビジョニングの形で、Linux でインラインのデータ削減を行います。VDO ボリュームを設定する場合は、VDO ボリュームを構築するブロックデバイスと、作成する論理ストレージのサイズを指定します。
  • アクティブな VM またはコンテナーをホストする際、Red Hat では、10:1 の論理・物理の割合でストレージのプロビジョニングを行うことをおすすめしています。1 TB の物理ストレージを利用している場合は、10 TB の論理ストレージとして示します。
  • Ceph が提供するタイプなどのオブジェクトストレージの場合、Red Hat は、物理と論理の割合を 1  対 3 にすることを推奨します。つまり、物理ストレージを 1  TB にした場合は、論理ストレージを 3 TB にします。
いずれの場合も、VDO が作成する論理デバイスにファイルシステムを置くだけで、直接使用することも、分散クラウドストレージアーキテクチャーの一部として使用することもできます。
本章は、VDO デプロイメントのユースケースを説明します。
  • Red Hat Virtualization を使用して構築した場合など、仮想サーバーで直接接続するユースケース
  • Ceph Storage を使用して構築された場合など、オブジェクトベースの分散ストレージクラスターのクラウドストレージのユースケース

    注記

    Ceph による VDO ディプロイメントには現在対応していません。
この章では、どちらのユースケースにも簡単にデプロイできる、標準の Linux ファイルシステムで使用する VDO の設定例を示します。詳細は「ディプロイメント例」の図をご覧ください。

29.3.2. VDO のインストール

VDO は、以下の RPM パッケージを使用してディプロイされます。
  • vdo
  • kmod-kvdo
VDO をインストールするには、yum パッケージマネージャーを使用して RPM パッケージをインストールします。
# yum install vdo kmod-kvdo

29.3.3. VDO ボリュームの作成

ブロックデバイスのボリュームを作成します。複数の VDO ボリュームを、同じマシンにある複数のデバイスに作成できます。この方法を選択する場合は、システムの VDO の各インスタンスに、それぞれ別の名前とデバイスを指定する必要があります。
以下のすべての手順で、vdo_name を、VDO ボリュームに使用する識別子 (vdo1 など) に置き換えます。

注記

ボリュームの作成前に、VDO はブロックデバイスの検証を行うために pvcreate --test などの LVM ユーティリティを使用します。
  1. VDO Manager を使用して VDO ボリュームを作成します。
    # vdo create \
           --name=vdo_name \
           --device=block_device \
           --vdoLogicalSize=logical_size \
           [--vdoSlabSize=slab_size]
    • block_device を、VDO ボリュームを作成するブロックデバイスの永続名 (/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f など) に置き換えます。

      重要

      永続的なデバイス名を使用します。永続的出ないデバイス名を使用すると、デバイスの名前が変わった場合に VDO は今後正しく起動しなくなることがあります。
      永続的な名前の詳細は、「永続的な命名」を参照してください。
    • logical_size を、VDO ボリュームが含まれる論理ストレージのサイズに置き換えます。
      • アクティブな仮想マシンまたはコンテナーストレージの場合は、使用する論理のサイズを、ブロックデバイスの物理サイズの 10 倍になるようにします。たとえば、ブロックデバイスのサイズが 1  TB の場合は、10T を使用します。
      • オブジェクトストレージの場合は、使用する論理のサイズを、ブロックデバイスの物理サイズの 3 倍になるようにします。たとえば、ブロックデバイスのサイズが 1  TB の場合は、3T を使用します。
    • ブロックデバイスが 16 TiB より大きい場合は、--vdoSlabSize=32G を指定して、ボリューム上のスラブサイズを 32  GiB に壮大します。
      16 TiB を超えるブロックデバイス上の 2 GiB のデフォルトスラブサイズを使用すると、vdo create コマンドが以下のエラーで失敗します。
      vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supported
      詳細は 「VDO ボリューム」 を参照してください。

    例29.1 コンテナーストレージ用に VDO 用の作成

    たとえば、1  TB ブロックデバイスでコンテナーストレージ用に VDO ボリュームを作成するには、次のコマンドを実行します。
    # vdo create \
           --name=vdo1 \
           --device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f \
           --vdoLogicalSize=10T
    VDO ボリュームを作成すると、VDO により /etc/vdoconf.yml 設定ファイルにエントリーが追加されます。次に、vdo.service systemd ユニットを使用して、デフォルトでボリュームを起動します。

    重要

    VDO ボリュームを作成する際にエラーが発生する場合は、ボリュームを削除してクリーンアップします。詳細は、「作成に失敗したボリュームの削除」を参照してください。
  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 unit を使用する場合、正しいファイル名で 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 機能の設定の詳細は、「未使用ブロックの破棄」を参照してください。

29.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 ボリューム上の最近の書き込まれた未承認のデータが失われることがあります。

29.3.5. ディプロイメント例

以下の例では、KVM とその他のディプロイメントで VDO を使用できる方法を示しています。

KVM を使用した VDO デプロイメント

DAS (Direct Attached Storage) を使用して設定した KVM サーバーに VDO を正常にデプロイする方法は、図29.2「KVM を使用した VDO デプロイメント」 を参照してください。
KVM を使用した VDO デプロイメント

図29.2 KVM を使用した VDO デプロイメント

その他のディプロイメントシナリオ

VDO ディプロイメントの詳細は、「ディプロイメントシナリオ」を参照してください。