Red Hat Training

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

第30章 VDO 統合

30.1. VDO の理論上の概要

VDO(Virtual Data Optimizer)は、ブロックストレージの圧縮および重複排除したプールを簡単に作成できるブロック仮想化テクノロジーです。
  • 重複排除とは、重複ブロックのコピーを削除して、ストレージリソースの消費を減らすための技術です。
    同じデータを複数回書き込む代わりに、VDO は各重複ブロックを検出し、元のブロックへの参照として記録します。VDO は、VDO の上にあるストレージ層により使用されている論理ブロックアドレスから、VDO の下にあるストレージ層で使用される物理ブロックアドレスへのマッピングを維持します。
    重複排除後、複数の論理ブロックアドレスが同じ物理ブロックアドレスにマップされます。これらは共有ブロックと呼ばれます。ブロック共有は、VDO が存在しない場合に、読み込みブロックと書き込みブロックがあるストレージのユーザーには表示されません。共有ブロックが上書きされると、新しいブロックデータを保存するための新しい物理ブロックが割り当てられ、共有物理ブロックにマッピングされたその他の論理ブロックアドレスが変更されないようにします。
  • 圧縮は、ログファイルやデータベースなどのブロックレベルの冗長性を必ずしも分かない、ファイル形式で機能するデータ設計技術です。「圧縮の使用」
VDO ソリューションは、以下のコンポーネントで構成されています。
kvdo
重複排除されたブロックストレージボリューム、シンプロビジョニングされたブロックストレージボリュームを提供する Linux Device Mapper レイヤーに読み込むカーネルモジュール。
uds
ボリューム上の Universal Deduplication Service(UDS)インデックスと通信し、データの重複を分析するカーネルモジュール。
コマンドラインツール
最適化されたストレージの設定および管理

30.1.1. UDS カーネルモジュール(uds)

UDS インデックスは、VDO 製品の基盤を提供します。新しい各データについて、その部分が保存してあるデータ内容と同一であるかどうかを素早く判断します。インデックスが一致すると、ストレージシステムは、同じ情報を複数格納しないように、既存の項目を内部的に参照できます。
UDS インデックスは、uds カーネルモジュールとしてカーネル内で実行します。

30.1.2. VDO カーネルモジュール(kvdo)

kvdo Linux カーネルモジュールは、Linux Device Mapper レイヤー内でブロック層の重複排除サービスを提供します。Linux カーネルは、デバイスマッパーはブロックストレージのプールを管理するための汎用フレームワークとして機能し、カーネルのブロックインターフェースと実際のストレージデバイスドライバーとの間のストレージスタックへのブロック処理モジュールの挿入を可能にします。
kvdo モジュールは、ブロックストレージに直接アクセスできるブロックデバイスとして公開されているか、XFS や ext4 など、利用可能な Linux ファイルシステムのいずれかで提示されます。kvdo が VDO ボリュームからデータ(論理)ブロックを読み取る要求を受信すると、要求された論理ブロックを基礎となる物理ブロックにマッピングし、要求したデータを読み取り、返します。
kvdo が VDO ボリュームにデータブロックを書き込む要求を受信すると、まず、そのデータが DISCARD または TRIM のものであるか、またはデータが一貫してゼロかどうかを確認します。これらの条件のいずれかが保持され、kvdo はブロックマップを更新し、リクエストを承認します。そうでない場合は、要求で使用するために物理ブロックを割り当てます。

VDO 書き込みポリシーの概要

kvdo モジュールが同期モードで動作している場合は、以下を行います。
  1. リクエストのデータを一時的に、割り当てられたブロックに書き込み、リクエストを承認します。
  2. 承認が完了すると、ブロックデータの MurmurHash-3 署名を計算してブロックの重複排除が試行されます。これは、VDO インデックスに送信されます。
  3. VDO インデックスに同じ署名とともにブロックのエントリーが含まれる場合、kvdo は示されたブロックを読み込み、同一であるかを検証するために 2 つのブロックのバイト対バイトの比較を行います。
  4. 同一であることが確認されると、kvdo はブロックマップを更新し、論理ブロックが対応する物理ブロックをポイントし、割り当てられた物理ブロックを解放します。
  5. VDO インデックスに、書き込まれているブロックの署名のエントリーを含まない場合や、示されたブロックが同じデータを含まない場合は、kvdo はブロックマップを更新して、一時的な物理ブロックを永続的にします。
kvdo が非同期モードで動作している場合は、以下のようになります。
  1. データを書き込む代わりに、リクエストをすぐに承認します。
  2. 上記の説明と同じように、ブロックの重複排除試行が行われます。
  3. ブロックが重複していることになると、kvdo はそのブロックマップを更新し、割り当てられたブロックを解放します。それ以外の場合は、リクエストのデータが、割り当てられたブロックに書き込み、ブロックマップを更新して物理ブロックを永続的にします。

30.1.3. VDO ボリューム

VDO は、バッキングストアとしてブロックデバイスを使用します。これは、1 つ以上のディスク、パーティション、またはフラットファイルで構成される物理ストレージの集約を含めることができます。ストレージ管理ツールが VDO ボリュームを作成すると、VDO は、UDS インデックスと VDO ボリュームの両方にボリュームから領域を予約し、それぞれと、重複排除したブロックストレージをユーザーとアプリケーションに提供します。図30.1「VDO ディスク組織」 これらの構成要素がどのように組み合わされているかを示します。

図30.1 VDO ディスク組織

VDO ディスク組織

スラブ

VDO ボリュームの物理ストレージは、複数のスラブに分割されます。各スラブは、物理領域の連続するリージョンです。指定のボリュームのスラブはすべて同じサイズになります。この値は、128 MB の 2 乗で、最大 32 GB になります。
小規模なテストシステムで VDO の評価を容易にするために、デフォルトのスラブサイズは 2 GB です。1 つの VDO ボリュームに最大 8192 個のスラブを持たせることができます。したがって、2 GB のスラブを使用したデフォルト設定では、許容される物理ストレージの最大値は 16 TB です。32 GB のスラブを使用する場合、許可される物理ストレージの最大値は 256 TB です。1 つ以上のスラブ全体がメタデータのために VDO によって予約されるため、ユーザーデータの格納には使用できません。
スラブサイズは、VDO ボリュームのパフォーマンスには影響しません。

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

物理ボリュームサイズ推奨されるスラボサイズ
10–99 GB1 GB
100 GB – 1 TB2 GB
2–256 TB32 GB
スラブのサイズは、vdo create --vdoSlabSize=megabytes

物理サイズおよび利用可能な物理サイズ

物理サイズと利用可能な物理サイズはいずれも、VDO が使用できるブロックデバイスのディスク容量を表します。
  • 物理サイズは、基となるブロックデバイスと同じサイズです。VDO は、以下の目的でこのストレージを使用します。
    • 重複排除および圧縮される可能性があるユーザーデータ
    • UDS インデックスなどの VDO メタデータ
  • 利用可能な物理サイズは、VDO がユーザーデータに使用できる物理サイズの一部です。
    物理サイズに相当するのは、メタデータのサイズは減算され、指定のスラブサイズでボリュームをスラブに分割した後に残りをミッシュートします。
さまざまなサイズのブロックデバイスに必要なストレージ VDO 「物理ボリュームサイズによる VDO システム要件の例」

論理サイズ

--vdoLogicalSize オプションを指定しないと、論理ボリュームのサイズはデフォルトで、利用可能な物理ボリュームサイズに設定されます。VDO 図30.1「VDO ディスク組織」。つまり、VDO ボリュームの物理サイズは、基礎となるブロックデバイスと同じサイズになります。
VDO は現在、絶対最大論理サイズ 4PB の物理ボリュームの最大 254 倍の論理サイズに対応します。

30.1.4. コマンドラインツール

VDO には、設定および管理用の以下のコマンドラインツールが含まれています。
vdo
VDO ボリュームを作成、設定、および制御します。
vdostats
使用状況とパフォーマンスの統計を提供します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。