第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 カーネルでは、Device Mapper はブロックストレージのプールを管理する一般的なフレームワークとして機能し、カーネルのブロックインターフェイスと実際のストレージデバイスドライバーとの間でストレージスタックにブロック処理モジュールを挿入できるようにします。
kvdo
モジュールは、ブロックストレージ用に直接アクセスできるブロックデバイスとして公開され、XFS や ext4 など、利用可能な多くの Linux ファイルシステムのいずれかを介して提示されます。kvdo
が VDO ボリュームからデータの(論理)ブロックを読み取る要求を受信すると、要求された論理ブロックを基礎となる物理ブロックにマッピングし、要求されたデータを読み取り、返します。
kvdo
は、データのブロックを VDO ボリュームに書き込む要求を受信すると、最初にそれが DISCARD
または TRIM
要求であるかどうか、データが均一にゼロであるかどうかを確認します。これらの条件のいずれかが保持されている場合、kvdo
はブロックマップを更新し、要求を承認します。それ以外の場合は、リクエストで使用する物理ブロックが割り当てられます。
VDO 書き込みポリシーの概要
kvdo
モジュールが同期モードで動作している場合は、以下を行います。
- リクエストのデータを一時的に、割り当てられたブロックに書き込み、リクエストを承認します。
- 承認が完了すると、ブロックデータの MurmurHash-3 署名を計算してブロックの重複排除が試行されます。これは、VDO インデックスに送信されます。
- VDO インデックスに同じ署名を持つブロックのエントリーが含まれている場合、
kvdo
は示されたブロックを読み取り、2 つのブロックのバイトバイバイト比較を行い、同一であることを確認します。 - 同一であると、
kvdo
はブロックマップを更新し、論理ブロックが対応する物理ブロックをポイントするようにし、割り当てられた物理ブロックを解放します。 - VDO インデックスに、書き込まれているブロックの署名のエントリーが含まれていないか、示されたブロックに実際に同じデータが含まれていない場合、
kvdo
はブロックマップを更新して、一時的な物理ブロックを永続的にします。
kvdo
が非同期モードで動作している場合は、以下を行います。
- データを書き込む代わりに、リクエストをすぐに承認します。
- 上記の説明と同じように、ブロックの重複排除試行が行われます。
- ブロックが重複していると、
kvdo
はブロックマップを更新し、割り当てられたブロックを解放します。それ以外の場合は、要求のデータが割り当てられたブロックに書き込まれ、ブロックマップが更新されて物理ブロックが永続的になります。
30.1.3. VDO ボリューム
VDO は、バッキングストアとしてブロックデバイスを使用します。これは、複数のディスク、パーティション、またはフラットファイルで設定される物理ストレージの集約を含めることができます。ストレージ管理ツールで VDO ボリュームを作成すると、VDO は、UDS インデックスと VDO ボリュームの両方にボリュームから領域を確保します。これは相互作用し、重複排除されたブロックストレージをユーザーおよびアプリケーションに提供します。図30.1「VDO ディスクの設定」 を参照してください。
図30.1 VDO ディスクの設定
スラブ
VDO ボリュームの物理ストレージは複数のスラブに分割され、それぞれが物理領域内の連続した領域になります。指定のボリュームのスラブはすべて同じサイズになります。この値は、128 MB の 2 乗で、最大 32 GB にすることができます。
小規模なテストシステムで VDO の評価を容易にするために、デフォルトのスラブサイズは 2 GB です。1 つの VDO ボリュームに、最大 8192 個のスラブが含まれる場合があります。したがって、デフォルト設定の 2 GB のスラブを使用する場合、許可される物理ストレージは最大 16 TB です。32 GB のスラブを使用する場合、許可される物理ストレージは最大 256 TB です。スラブ全体が、メタデータ用に VDO により予約されているため、ユーザーデータの格納には使用できません。
スラブサイズは、VDO ボリュームのパフォーマンスには影響しません。
物理ボリュームのサイズ | 推奨されるスラブサイズ |
---|---|
10 - 99 GB | 1 GB |
100 GB - 1 TB | 2 GB |
2 - 256 TB | 32 GB |
スラブのサイズは、
vdo create
コマンドに
--vdoSlabSize=megabytes
オプションを指定することで制御できます。
物理サイズと利用可能な物理サイズ
物理サイズと利用可能な物理サイズは、どちらも、VDO が利用できるブロックデバイスのディスク領域の量を表します。
- 物理サイズ は、基盤となるブロックデバイスと同じサイズになります。VDO は、以下の目的でこのストレージを使用します。
- 重複排除および圧縮される可能性があるユーザーデータ
- UDS インデックスなどの VDO メタデータ
- 利用可能な物理サイズ は、VDO がユーザーデータに使用できる物理サイズの一部です。これは、メタデータのサイズを引いた物理サイズと同等で、指定のスラブサイズでボリュームをスラブに分割した後の残りを引いたものと同じです。
さまざまなサイズのブロックデバイスで、ストレージ VDO メタデータに必要な量の例は、「物理ボリュームのサイズ別の VDO システム要件の例」 を参照してください。
論理サイズ
--vdoLogicalSize
オプションを指定しない場合は、使用可能な物理ボリュームのサイズが、論理ボリュームのデフォルトサイズとなります。図30.1「VDO ディスクの設定」 では、VDO で重複排除したストレージターゲットがブロックデバイス上に完全に配置されています。つまり、VDO ボリュームの物理サイズは、基礎となるブロックデバイスと同じサイズになります。
VDO は現在、絶対最大論理サイズ 4PB の物理ボリュームの最大 254 倍の論理サイズに対応します。
30.1.4. コマンドラインツール
VDO には、設定および管理用の次のコマンドラインツールが同梱されています。