Red Hat Training

A Red Hat training course is available for RHEL 8

第36章 ストレージの重複排除および圧縮

36.1. VDO のデプロイメント

システム管理者は、VDO を使用してストレージプールの重複を排除して、圧縮できます。

36.1.1. VDO の概要

VDO (Virtual Data Optimizer) は、重複排除、圧縮、およびシンプロビジョニングの形で、Linux でインラインのデータ削減を行います。VDO ボリュームを設定する場合は、VDO ボリュームを構築するブロックデバイスと、作成する論理ストレージのサイズを指定します。

  • アクティブな仮想マシンまたはコンテナーをホストする場合、Red Hat は、物理と論理の割合を 1 対 10 にすることを推奨します。つまり、物理ストレージを 1 TB にした場合は、論理ストレージを 10 TB にします。
  • Ceph が提供するタイプなどのオブジェクトストレージの場合、Red Hat は、物理と論理の割合を 1 対 3 にすることを推奨します。つまり、物理ストレージを 1 TB にした場合は、論理ストレージを 3 TB にします。

いずれの場合も、VDO が作成する論理デバイスにファイルシステムを置くだけで、直接使用することも、分散クラウドストレージアーキテクチャーの一部として使用することもできます。

VDO はシンプロビジョニングされているため、ファイルシステムとアプリケーションは、使用中の論理領域だけを認識し、実際に利用可能な物理領域は認識しません。スクリプトを使用して、実際に利用可能な領域を監視し、使用量がしきい値を超えた場合 (たとえば、VDO ボリュームの使用量が 80% になった場合) にアラートを生成します。

36.1.2. VDO デプロイメントシナリオ

VDO は、様々な方法でデプロイして、以下に対して、重複排除したストレージを提供できます。

  • ブロックおよびファイルアクセスの両方
  • ローカルストレージおよびリモートストレージの両方

VDO は、標準の Linux ブロックデバイスとして重複排除したストレージを公開するため、そのストレージを標準ファイルシステム、iSCSI および FC のターゲットドライバー、または統合ストレージとして使用できます。

注記

Ceph Storage による VDO デプロイメントには現在対応していません。

KVM

DAS (Direct Attached Storage) を使用して設定した KVM サーバーに VDO をデプロイできます。

KVM を使用した VDO デプロイメント
ファイルシステム

VDO にファイルシステムを作成して、NFS サーバーまたは Samba で、NFS ユーザーまたは CIFS ユーザーに公開します。

重複排除した NAS
iSCSI ターゲット

VDO ストレージターゲット全体を、iSCSI ターゲットとしてリモート iSCSI イニシエーターにエクスポートできます。

重複排除したブロックストレージターゲット
LVM

より機能豊富なシステムでは、LVM を使用して、重複排除した同じストレージプールですべて対応している複数の論理ユニット番号 (LUN) を提供できます。

以下の図は、VDO ターゲットが物理ボリュームとして登録されるため、LVM で管理できます。複数の論理ボリューム (LV1 から LV4) が、重複排除したストレージプールから作成されます。これにより、VDO は、基となる重複排除したストレージプールへのマルチプロトコル統合ブロックまたはファイルアクセスに対応できます。

重複排除された統合ストレージ

重複排除した統合ストレージ設計により、複数のファイルシステムが、LVM ツールを介して同じ重複排除ドメインを共同で使用できます。また、ファイルシステムは、LVM スナップショット、コピーオンライト、縮小機能、拡大機能、および VDO にある全機能を利用できます。

暗号化

DM Crypt などのデバイスマッパー (DM) メカニズムは VDO と互換性があります。VDO ボリュームの暗号化により、データセキュリティーと、VDO にある全ファイルシステムが重複排除されるようになります。

暗号化での VDO の使用
重要

VDO で暗号化層を適用すると、データの重複排除が行われてもほとんど行われません。暗号化により、VDO が重複を排除する前に、重複ブロックを変更します。

常に VDO の下に暗号化層を配置します。

36.1.3. VDO ボリュームのコンポーネント

VDO は、バッキングストアとしてブロックデバイスを使用します。これは、複数のディスク、パーティション、またはフラットファイルで構成される物理ストレージの集約を含めることができます。ストレージ管理ツールが VDO ボリュームを作成すると、VDO は、UDS インデックスおよび VDO ボリュームのボリューム領域を予約します。UDS インデックスと VDO ボリュームは対話して、重複排除したブロックストレージを提供します。

図36.1 VDO ディスク組織

VDO ディスク組織

VDO ソリューションは、以下のコンポーネントで構成されます。

kvdo

Linux Device Mapper 層に読み込まれるカーネルモジュールは、重複排除され、圧縮され、シンプロビジョニングされたブロックストレージボリュームを提供します。

kvdo モジュールはブロックデバイスを公開します。ブロックストレージ用にこのブロックデバイスに直接アクセスするか、XFS や ext4 などの Linux ファイルシステムを介して提示することができます。

kvdo が VDO ボリュームからデータ論理ブロックを読み取る要求を受信すると、要求された論理ブロックを基礎となる物理ブロックにマッピングし、要求したデータを読み取り、返します。

kvdo が VDO ボリュームにデータブロックを書き込む要求を受信すると、まず要求が DISCARD または TRIM のものであるか、またはデータが一貫してゼロかどうかを確認します。これらの条件のいずれかが true の場合、kvdo はブロックマップを更新し、リクエストを承認します。そうでない場合は、VDO はデータを処理して最適化します。

uds

ボリューム上の Universal Deduplication Service (UDS) インデックスと通信し、データの重複を分析するカーネルモジュール。新しい各データについて、その部分が保存してあるデータ内容と同一であるかどうかを UDS が素早く判断します。インデックスが一致すると、ストレージシステムは、同じ情報を複数格納しないように、既存の項目を内部的に参照できます。

UDS インデックスは、uds カーネルモジュールとしてカーネル内で実行します。

コマンドラインツール
最適化されたストレージの設定および管理

36.1.4. VDO ボリュームの物理サイズおよび論理サイズ

このセクションでは、VDO が使用できる物理サイズ、利用可能な物理サイズ、論理サイズを説明します。

物理サイズ

これは、基礎となるブロックデバイスと同じサイズです。VDO は、以下の目的でこのストレージを使用します。

  • 重複排除および圧縮される可能性があるユーザーデータ
  • UDS インデックスなどの VDO メタデータ
利用可能な物理サイズ

これは、VDO がユーザーデータに使用できる物理サイズの一部です。

これは、メタデータのサイズを引いた物理サイズと同等で、指定のスラブサイズでボリュームをスラブに分割した後の残りを引いたものと同じです。

論理サイズ

これは、VDO ボリュームがアプリケーションに提示するプロビジョニングされたサイズです。通常、これは利用可能な物理サイズよりも大きくなります。--vdoLogicalSize オプションを指定しないと、論理ボリュームのプロビジョニングが 1:1 の比率にプロビジョニングされます。たとえば、VDO ボリュームが 20 GB ブロックデバイスの上に置かれている場合は、2.5 GB が UDS インデックス用に予約されます (デフォルトのインデックスサイズが使用される場合)。残りの 17.5 GB は、VDO メタデータおよびユーザーデータに提供されます。そのため、消費する利用可能なストレージは 17.5 GB を超えません。実際の VDO ボリュームを構成するメタデータにより、これよりも少なくなる可能性があります。

VDO は現在、絶対最大論理サイズ 4PB の物理ボリュームの最大 254 倍の論理サイズに対応します。

図36.2 VDO ディスク組織

VDO ディスク組織

この図では、VDO で重複排除したストレージターゲットがブロックデバイス上に完全に配置されています。つまり、VDO ボリュームの物理サイズは、基礎となるブロックデバイスと同じサイズになります。

関連情報

36.1.5. VDO のスラブサイズ

VDO ボリュームの物理ストレージは、複数のスラブに分割されます。各スラブは、物理領域の連続するリージョンです。指定のボリュームのスラブはすべて同じサイズになります。この値は、128 MB の 2 乗で、最大 32 GB にすることができます。

小規模なテストシステムで VDO の評価を容易にするために、デフォルトのスラブサイズは 2 GB です。1 つの VDO ボリュームに最大 8192 個のスラブを持たせることができます。したがって、2 GB のスラブを使用したデフォルト設定では、許容される物理ストレージの最大値は 16 TB です。32 GB のスラブを使用する場合、許可される物理ストレージは最大 256 TB です。VDO は、メタデータ用に少なくともスラブ全体を予約するため、予約されたスラブはユーザーデータの格納には使用できません。

スラブサイズは、VDO ボリュームのパフォーマンスには影響しません。

表36.1 物理ボリュームサイズによる推奨される VDO スラブサイズ

物理ボリュームのサイズ推奨されるスラブサイズ

10–99 GB

1 GB

100 GB – 1 TB

2 GB

2–256 TB

32 GB

--vdoSlabSize=megabytes オプションを vdo create コマンドに指定することで、スラブサイズを制御できます。

36.1.6. VDO 要件

VDO は、配置とシステムリソースに特定の要件があります。

36.1.6.1. VDO メモリー要件

各 VDO ボリュームには、2 つの異なるメモリー要件があります。

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 インデックス

Universal Deduplication Service(UDS)には、最低 250 MB の RAM が必要です。これは、重複排除が使用するデフォルト量です。VDO ボリュームをフォーマットする際に値を設定できます。この値は、インデックスが必要とするストレージのサイズにも影響するためです。

UDS インデックスに必要なメモリーは、インデックスタイプと、重複排除ウィンドウに必要なサイズにより指定されます。

インデックスタイプ重複排除ウィンドウ備考

Dense

RAM 1 GB あたり 1 TB

通常、最大 4 TB の物理ストレージには、1 GB の dense インデックスで十分です。

Sparse

RAM 1 GB あたり 10 TB

通常、最大 40 TB の物理ストレージには、1 GB の sparse インデックスで十分です。

VDO で推奨されるモードは、UDS の sparse インデックス機能です。データの一時的な局所性に依存し、メモリー内で最も関連するインデックスエントリーのみを保持しようとします。sparse インデックスでは、UDS は、同じ量のメモリーを使用しながら、dense を使用したときの 10 倍以上長い重複排除ウィンドウを維持できます。

sparse インデックスを使用すると対象範囲が広くなりますが、dense インデックスの方が提供する重複排除アドバイスが多くなります。ワークロードの観点では、多くの場合、同じメモリー量であれば、dense インデックスと sparse インデックスにおける重複排除率の差異はごくわずかとなります。

関連情報

36.1.6.2. VDO ストレージの領域要件

VDO ボリュームを設定して、最大 256 TB の物理ストレージを使用するように設定できます。データを格納するのに使用できるのは、物理ストレージの一部のみです。このセクションでは、VDO に管理されるボリュームで使用可能なサイズを特定するための計算方法を説明します。

VDO では、2 種類の VDO メタデータと UDS インデックスにストレージが必要です。

  • 1 つ目の VDO メタデータは、物理ストレージ 4 GB ごとに約 1 MB が使用され、スラブごとに 1 MB ずつ使用します。
  • 2 つ目の VDO メタデータでは、論理ストレージ 1 GB ごとに約 1.25 MB が使用され、最も近いスラブに切り上げられます。
  • UDS インデックスに必要なストレージの容量は、インデックスの種類と、インデックスに割り当てられている RAM の容量によって異なります。RAM 1 GB ごとに、dense の UDS インデックスはストレージを 17 GB 使用し、sparse の UDS インデックスはストレージを 170 GB 使用します。

関連情報

36.1.6.3. ストレージスタックの VDO の 配置

VDO の下に配置する必要があるストレージ層と、VDO の上に配置する必要があるストレージ層があります。

シックプロビジョニングの層を VDO の上に配置することができますが、その場合はこのようなシックプロビジョニングの保証に頼ることはできません。VDO 層はシンプロビジョニングされているため、シンプロビジョニングの影響は、上記のすべての層に及びます。VDO デバイスを監視しない場合には、VDO を超える、シックプロビジョニングのボリュームで物理領域が不足する可能性があります。

サポートされる構成

  • VDO の下にのみ配置できるレイヤー:

    • DM Multipath
    • DM Crypt
    • ソフトウェア RAID (LVM または MD RAID)
  • VDO の上にのみ配置できる層:

    • LVM キャッシュ
    • LVM スナップショット
    • LVM シンプロビジョニング

サポートされない設定

  • その他の VDO ボリュームの上に VDO
  • LVM スナップショットの上に VDO
  • LVM キャッシュの上に VDO
  • ループバックデバイスの上に VDO
  • LVM シンプロビジョニングの上に VDO
  • VDO の上に暗号化されたボリューム
  • VDO ボリュームにパーティション作成
  • VDO ボリュームの上に RAID (LVM RAID、MD RAID、またはその他のタイプ)

関連情報

36.1.6.4. 物理サイズによる VDO 要件の例

以下の表は、基となるボリュームの物理サイズに基づいた、VDO のシステム要件の概算を示しています。それぞれの表には、プライマリーストレージ、バックアップストレージなどの、目的のデプロイメントに適した要件が記載されています。

正確な数値は、VDO ボリュームの設定により異なります。

プライマリーストレージのデプロイメント

プライマリーストレージの場合、UDS インデックスのサイズは、物理サイズの 0.01% から 25% になります。

表36.2 プライマリストレージのストレージ要件およびメモリー要件

物理サイズRAM 使用率: UDSRAM 使用率: VDOディスク使用率インデックスタイプ

10GB ~ 1TB

250MB

472MB

2.5GB

Dense

2 ~ 10TB

1GB

3GB

10GB

Dense

250MB

22GB

Sparse

11 ~ 50TB

2GB

14GB

170GB

Sparse

51 ~ 100TB

3GB

27GB

255GB

Sparse

101 ~ 256TB

12GB

69GB

1020GB

Sparse

バックアップストレージのデプロイメント

バックアップストレージの場合、UDS インデックスは、バックアップセットのサイズよりは大きくなりますが、物理サイズと同じか、より小さくなります。バックアップセットや物理サイズが今後大きくなる可能性がある場合は、これをインデックスサイズに組み込んでください。

表36.3 バックアップストレージのストレージ要件およびメモリ要件

物理サイズRAM 使用率: UDSRAM 使用率: VDOディスク使用率インデックスタイプ

10GB ~ 1TB

250MB

472MB

2.5 GB

Dense

2 ~ 10TB

2GB

3GB

170GB

Sparse

11 ~ 50TB

10GB

14GB

850GB

Sparse

51 ~ 100TB

20GB

27GB

1700GB

Sparse

101 ~ 256TB

26GB

69GB

3400GB

Sparse

36.1.7. VDO のインストール

この手順では、VDO ボリュームの作成、マウント、および管理に必要なソフトウェアをインストールします。

手順

  • vdo パッケージおよび kmod-kvdo パッケージをインストールします。

    # yum install vdo kmod-kvdo

36.1.8. VDO ボリュームの作成

この手順では、ブロックデバイスに VDO ボリュームを作成します。

前提条件

手順

以下のすべての手順で、vdo-name を、VDO ボリュームに使用する識別子 (vdo1 など) に置き換えます。システムの VDO の各インスタンスに、それぞれ別の名前とデバイスを使用する必要があります。

  1. VDO ボリュームを作成するブロックデバイスの永続的な名前を確認してください。永続的な名前の詳細は、31章永続的な命名属性の概要 を参照してください。

    永続的なデバイス名を使用しないと、今後デバイスの名前が変わった場合に、VDO が正しく起動しなくなることがあります。

  2. VDO ボリュームを作成します。

    # vdo create \
          --name=vdo-name \
          --device=block-device \
          --vdoLogicalSize=logical-size
    • block-device を、VDO ボリュームを作成するブロックデバイスの永続名に置き換えます。たとえば、/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f です。
    • logical-size を、VDO ボリュームが含まれる論理ストレージのサイズに置き換えます。

      • アクティブな仮想マシンまたはコンテナーストレージの場合は、使用する論理サイズが、ブロックデバイスの物理サイズの 10 倍になるようにします。たとえば、ブロックデバイスのサイズが 1 TB の場合は、10T を使用します。
      • オブジェクトストレージの場合は、使用する論理サイズを、ブロックデバイスの物理サイズの 3 倍になるようにします。たとえば、ブロックデバイスのサイズが 1 TB の場合は、3T を使用します。
    • 物理ブロックデバイスが 16TiB を超える場合は、--vdoSlabSize=32G オプションを指定して、ボリューム上のスラブサイズを 32GiB に増やします。

      16TiB を超えるブロックデバイスでデフォルトのスラブサイズ 2GiB を使用すると、vdo create コマンドが失敗し、以下のエラーが出力されます。

      vdo: ERROR - vdoformat: formatVDO failed on '/dev/device': VDO Status: Exceeds maximum number of slabs supported

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

    たとえば、1 TB ブロックデバイスでコンテナーストレージ用に VDO ボリュームを作成するには、次のコマンドを実行します。

    # vdo create \
          --name=vdo1 \
          --device=/dev/disk/by-id/scsi-3600508b1001c264ad2af21e903ad031f \
          --vdoLogicalSize=10T
    重要

    VDO ボリュームの作成中に問題が発生した場合は、ボリュームを削除します。詳細は、「 作成に失敗した VDO ボリュームの削除 」を参照してください。

  3. VDO ボリュームにファイルシステムを作成します。

    • XFS ファイルシステムの場合:

      # mkfs.xfs -K /dev/mapper/vdo-name
    • ext4 ファイルシステムの場合:

      # mkfs.ext4 -E nodiscard /dev/mapper/vdo-name
  4. 次のコマンドを使用して、システムが新しいデバイスノードを登録するまで待機します。

    # udevadm settle

次のステップ

  1. ファイルシステムをマウントします。詳しくは、「VDO ボリュームのマウント」 を参照してください。
  2. VDO デバイスのファイルシステムで discard 機能を有効にします。詳しくは、「定期的なブロック破棄の有効化」 を参照してください。

関連情報

  • man ページの vdo(8)

36.1.9. VDO ボリュームのマウント

この手順では、手動で、または永続的に、VDO ボリュームにファイルシステムをマウントします。

前提条件

手順

  • VDO ボリュームに手動でファイルシステムをマウントするには、以下のコマンドを使用します。

    # mount /dev/mapper/vdo-name mount-point
  • システムの起動時にファイルシステムを自動的にマウントするように設定するには、/etc/fstab ファイルに以下の行を追加します。

    • XFS ファイルシステムの場合:

      /dev/mapper/vdo-name mount-point xfs defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0
    • ext4 ファイルシステムの場合:

      /dev/mapper/vdo-name mount-point ext4 defaults,_netdev,x-systemd.device-timeout=0,x-systemd.requires=vdo.service 0 0

関連情報

  • man ページの vdo(8)

36.1.10. 定期的なブロック破棄の有効化

この手順では、対応するすべてのファイルシステムで、未使用のブロックを定期的に破棄する systemd タイマーを有効にします。

手順

  • systemd タイマーを有効にして起動します。

    # systemctl enable --now fstrim.timer

36.1.11. 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%

関連情報

  • man ページの vdostats(8)