I/O遅延を解消する究極の対策:VMwareのThinからThick Provisioningへの変換

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

実体験:ストレージ負荷で仮想マシンが「息切れ」した話

2022年、ERPシステム用の8ノードESXiクラスターを運用していた際、非常に厄介なケースに遭遇しました。あるSQL Serverが突然激しくラグくなり、通常は5ms以下のI/Oレイテンシが50msまで急上昇したのです。詳しく調査したところ、ストレージシステム(SAN)のリソースには余裕がありました。原因は、その仮想マシンのディスク形式であるThin Provisioningにありました。

Thinディスクの問題点は、実際のデータがある分だけSANの容量を消費することです。一見効率的に思えますが、実際には処理リソースを大幅に消費します。仮想マシンが新しいブロックにデータを書き込むたびに、ハイパーバイザーは空きブロックを探し、古いデータを消去してから割り当てるという作業を繰り返します。このメタデータの遅延こそが、継続的なデータ書き込みを必要とするアプリケーションのパフォーマンスを低下させていたのです。

以下に、ディスク形式を変換することでこの問題を根本的に解決し、I/Oパフォーマンスを最適化する方法をご紹介します。

VMwareにおける3種類のディスク形式の比較

適切な対策を講じるために、各形式の特徴を理解しておく必要があります:

  • Thin Provisioning: 最も容量を節約でき、使用した分だけ消費します。しかし、動的割り当てにより約5〜10%のCPUオーバーヘッドが発生します。ラボ環境や軽量なWebサーバーに適しています。
  • Thick Provisioning Lazy Zeroed: 領域は事前に確保されますが、初期化はされません。仮想マシンが初めてデータを書き込む際にブロックのゼロ消去(zero out)を行います。Thinよりはパフォーマンスが安定します。
  • Thick Provisioning Eager Zeroed: データベースにとっての第1の選択肢です。全容量を確保し、最初からすべてのブロックをゼロ消去します。作成に時間はかかりますが、割り当ての遅延がなく、非常に安定したI/Oパフォーマンスが得られます。

ThinからThickへの変換(パフォーマンスの最大化)

仮想マシンのI/Oパフォーマンス不足を感じたら、すぐにThick形式への変換を検討してください。インフラ環境に応じて、主に2つの方法があります。

方法1:Inflate機能を使用する(最も簡単)

コマンド操作が苦手な方には、この方法が救いになります。注意点として、仮想マシンをシャットダウンした状態でなければ実行できません。

  1. vSphere Clientを開き、対象の仮想マシンを探します。
  2. データストアブラウザを開き、仮想マシンファイルが格納されているフォルダに移動します。
  3. .vmdkファイル(通常は最も容量の大きいファイル)を右クリックします。
  4. Inflate(拡張)を選択し、処理が完了するまで待ちます。

完了後、ディスクは自動的にLazy Zeroed形式に変換され、仮想ディスク容量の拡張による遅延が解消されます。

方法2:vmkfstoolsコマンドを使用する(高度な方法)

最大限のパフォーマンスを得るために、Eager Zeroedへ直接変換できるこの方法が個人的にはおすすめです。まず、ESXiホストでSSHを有効にし、Puttyやターミナルからログインします。

仮想マシンのディレクトリに移動します:

cd /vmfs/volumes/DATASTORE_ID/VM_FOLDER/

古いディスクを新しい形式にクローンします:

# Thick Eager Zeroedへ高速変換
vmkfstools -i original.vmdk -d eagerzeroedthick new_thick_disk.vmdk

完了後、仮想マシンの設定の編集から古いディスクを削除し、new_thick_disk.vmdkファイルを指定し直せば、非常にスムーズに動作するようになります。

ThickからThinへの変換(ストレージ容量の節約)

実際の運用では、ストレージ容量が逼迫(90%超過など)し、重要度の低い仮想マシンから容量を回収しなければならない場合もあります。

Storage vMotion:無停止での解決策

vCenterがあり適切なライセンスをお持ちの場合は、マシンを停止することなくこの操作を行えます。手順は非常にスマートです:

  1. 仮想マシンを右クリックし、移行(Migrate)を選択します。
  2. ストレージのみ変更を選択します。
  3. ディスク形式の選択で、Thin Provisionを選択します。
  4. 別のデータストアを選択します(一時的な空き容量があれば同じ場所でも可能です)。

vCenterがあり適切なライセンスをお持ちの場合は、マシンを停止することなくこの操作を行えます。手順は非常にスマートです:

長年の運用から得た「血の教訓」

大規模クラスターでのトラブル対応経験から、3つの重要な教訓を共有します:

  • オーバープロビジョニングによるトラブルに注意: Thin Provisioningは錯覚を起こしやすいです。1TBのディスク上に500GBの仮想マシンを10台作成しても一見大丈夫そうに見えますが、一斉にデータが書き込まれると、システム全体が即座にフリーズ時期。常にアラームを85%に設定しておきましょう。
  • バックアップの徹底確認: .vmdkファイルの操作には常にリスクが伴います。どれほど自信があっても、最新のバックアップが正常に機能していることを確認してください。
  • ピーク時間帯を避ける: Eager Zeroedディスクの作成は、ストレージに大きなI/O負荷をかけます。ユーザーから大量の苦情を受けたくないのであれば、月曜日の午前9時に行うような無謀な真似は避けましょう。

おわりに

I/Oの最適化は、単に高価なハードディスクを買い足すことだけではありません。ThinからThick Eager Zeroedへ変更するだけの小さな工夫で、システムは劇的にスムーズに稼動します。この記事が、皆さんの仮想化インフラ管理の自信に繋がれば幸いです。

Share: