VMware SIOCで「Noisy Neighbor」問題を根本解決:重要な仮想マシンの帯域幅を保護する

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

ストレージインフラにおける「Noisy Neighbor」という脅威

順調に稼働していたERPシステムが、ある日突然、ウイルススキャンを実行している「名もなき」仮想マシン(VM)のせいでラグが発生したことはありませんか?これは**Noisy Neighbor**(うるさい隣人)現象の典型例です。1つの仮想マシンがディスク帯域幅(I/O)を独占し、隣接する重要なサーバーに深刻なボトルネックを引き起こす状態を指します。

長年大規模なクラスターを管理してきた中で、負荷が急増した際の静的なリソース割り当てには限界があると感じてきました。そこで救世主となるのがVMware vSphere Storage I/O Control (SIOC)です。SIOCは、単なる固定の制限とは異なり、レイテンシ(遅延)が安全なしきい値を超えたときのみ「介入」します。いわば、道路が混雑し始めたときにだけ交通整理を行うスマートな交通警察のような存在です。

Proxmox의制限メカニズムと比較しても、VMwareのSIOCはクラスター内の全ホスト間で包括的に連携できる点が強力です。個々のノードをローカルに管理するのではなく、全体像を把握した制御が可能です。

SIOC導入のための要件

システムが以下の技術標準を満たしているか確認してから、SIOCを有効にしてください。

  • License: Enterprise Plusエディションが必須です。これは中小企業にとって最大の障壁となることが多いでしょう。
  • Datastore: VMFSおよびNFSをサポートしています。ただし、複数のExtent(複数のLUNを統合したもの)で構成されたデータストアではSIOCは機能しないため注意が必要です。
  • vCenter Server: ESXiホスト間の動作を調整するためにvCenterが必要です。
  • ハードウェア: ストレージアレイ側に自動QoS機能がある場合、アルゴリズムの競合を避けるため、どちらか一方を無効にすることを検討してください。

データストアでのSIOC有効化手順

各仮想マシンの設定を行う前に、まずデータストアレベルでSIOCの「司令塔」を有効にする必要があります。これにより、vSphereは接続されている全ホストのレイテンシを監視できるようになります。

ステップ1:SIOC機能を有効にする

  1. vSphere Clientを開き、**ストレージ**タブに移動します。
  2. 設定対象のデータストアを右クリックし、**設定** -> **全般**を選択します。
  3. **データストア機能**セクションで、**編集**をクリックします。
  4. **Storage I/O Control を有効にする**にチェックを入れ、OKを押します。

ステップ2:輻輳しきい値(Congestion Threshold)の設定

SIOCがいつ介入すべきかを指示する方法は2つあります。

  • ピークスループットの割合: デフォルトは90%です。データストアがピークパフォーマンスの90%に達すると、SIOCが調整を開始します。
  • 手動(レイテンシ): 私が推奨する方法です。SSD/オールフラッシュの場合は10~15ms程度に設定します。高性能なNVMeを使用している場合は、さらに低い値(約5ms)に設定することもあります。従来のHDDの場合は、30ms程度が妥当な数値です。

注意: しきい値を過敏に設定しすぎないでください。システムに余裕がある状態でSIOCが頻繁に介入すると、CPUリソースの無駄遣いにつながります。

仮想マシンの優先順位付け(VMシェアと制限)

SIOCを有効にしたら、次はどのマシンを「VIP」にするかを決めます。優先順位の割り当てには**シェア(Shares)**という仕組みを使います。

  1. 重要な仮想マシン(例:SQL Server)を右クリックし、**設定の編集**を選択します。
  2. **仮想ハードウェア** -> **ハードディスク**セクションを展開します。
  3. **シェア**項目で「高」(2000シェア)を選択します。テスト用マシンなどは「低」(500シェア)に設定します。

この仕組みは比率で動作します。混雑時には、2000シェアを持つ仮想マシンは、500シェアのマシンよりも4倍優先的にデータを処理できます。逆に、帯域に余裕があるときは、すべてのマシンが最大速度で動作します。

リソースを大量消費する特定の仮想マシンを「縛り付け」たい場合は、**制限 – IOPS**の欄に数値を入力し、そのマシンが到達できる帯域幅の上限を固定します。

PowerCLIによるクイック管理

数十台のデータストアを一つずつクリックする代わりに、プロはスクリプトを使用して一貫性を確保します。

# システム全体のSIOCステータスを確認
Get-Datastore | Select Name, StorageIOControlEnabled, CongestionThresholdMillisecond | Format-Table -AutoSize

# 本番用データストア「DS_Production_01」でSIOCを有効にし、しきい値を15msに設定
Set-Datastore -Datastore "DS_Production_01" -StorageIOControlEnabled $true -CongestionThresholdMillisecond 15

SIOCが実際に動作しているか確認する方法

設定を信じるだけでなく、実際の数値を確認しましょう。最も強力なツールは**esxtop**です。

  1. ESXiホストにSSHで接続し、esxtopと入力します。
  2. vを押して、仮想マシンのディスク統計を表示します。
  3. **QUED**(待機中のコマンド数)と**DAVG**(デバイスのレイテンシ)の列を観察します。

優先度の低い仮想マシンの**QUED**が増加している一方で、重要な仮想マシンの**DAVG**が低く保たれていれば、SIOCが「適切に制限をかけ、守るべき対象を救っている」と言えます。

苦い経験から:SIOCを無効にすべきケース

SIOCは万能薬ではありません。**自動階層化(Auto-tiering)**機能(SSD and HDD間でデータを自動移動する機能)を持つストレージでSIOCを使用した際、トラブルに遭遇したことがあります。ストレージがバックグラウンドでデータ移動を行っているときにレイテンシが擬似的に上昇し、SIOCがそれを輻輳と誤認して、不当に帯域を制限してしまうことがありました。

また、同じSANにvCenterの管理外にある物理サーバーが接続されている場合、SIOCは無力です。SIOCはあくまでvSphereの管理下にあるものしか制御できません。

この記事が、ストレージ帯域幅のマスターとなり、わがままな「隣人」にシステムを荒らされる心配から解放される助けになれば幸いです!

Share: