Red Hat Training

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

30.3. VDO の使用

30.3.1. 導入部分

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

30.3.2. VDO のインストール

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

30.3.3. VDO ボリュームの作成

ブロックデバイス用の VDO ボリュームを作成します。複数の VDO ボリュームを、同じマシン上のデバイスごとに作成できることに注意してください。このアプローチを選択する場合は、システムの VDO のインスタンスごとに異なる名前とデバイスを指定する必要があります。
重要
拡張可能なストレージをバッキングブロックデバイスとして使用している。詳細は、「システム要件」 を参照してください。
以下の手順では、vdo_name を、VDO ボリュームに使用する識別子( vdo1 など)に置き換えます。
  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 ボリューム」 を参照してください。

    例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 ボリュームの作成中に問題が発生した場合は、ボリュームを削除してください。詳細は 「作成に失敗したボリュームの削除」 を参照してください。
  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 機能の設定方法の詳細は、「未使用ブロックの破棄」 を参照してください。

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 デプロイメント

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

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

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

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

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