「ストレージのボトルネック」という悩みの種
私は以前、10GbEネットワーク上でiSCSIを実行する8台のESXiホストクラスターを運用していました。当初は順調でしたが、ERPシステムやSQLデータベースの負荷が増えるにつれ、問題が発生しました。レイテンシが頻繁に15〜20msまで跳ね上がり、アプリケーションのレスポンスが著しく低下したのです。
当時、Fibre Channel(FC)へのアップグレードが明らかな解決策でしたが、HBAカードや専用の光スイッチの導入コストは数万ドルに達します。幸いなことに、vSphere 7 Update 3からvSphere 8にかけて、VMwareはNVMe over TCP (NVMe/TCP)をサポートしました。このテクノロジーにより、既存のEthernetインフラを活用しながらパフォーマンスの課題を解決できるようになりました。
NVMe over TCPとiSCSI、Fibre Channelの比較
なぜNVMe/TCPに注目すべきなので状況でしょうか?技術的な違いを見てみましょう。
- iSCSI: HDD時代のSCSIコマンドセットを使用します。コマンドキューが1つしかないため、マルチスレッド処理でボトルネックが発生しやすく、パケットのカプセル化に多くのCPUリソースを消費します。
- Fibre Channel: 高速で安定していますが、高価であり、専門的な管理スキルが必要です。
- NVMe/TCP: 最大64,000のキューをサポートする最新のNVMeコマンドセットを使用します。これにより、iSCSIと比較してレイテンシを最大50%削減でき、現在の25GbE/100GbEスイッチの帯域幅を最大限に活用できます。
実測スペックの比較
| 項目 | iSCSI (10GbE) | NVMe over TCP (25GbE) | Fibre Channel (32G) |
|---|---|---|---|
| 平均レイテンシ | ~2-5 ms | < 0.5 ms | < 0.3 ms |
| ホストあたりの最大IOPS | ~150,000 | > 600,000 | > 800,000 |
| ホストCPU負荷 | 高い | 低い | 非常に低い |
本番環境にNVMe over TCPを採用した理由
最大のメリットはコスト削減です。新しいSANスイッチを購入する代わりに、既存の25GbEスイッチを再利用しました。移行後の実際のパフォーマンスは目覚ましく、データバックアップ作業の時間は30%短縮され、ピーク時にユーザーからアプリケーションのフリーズについて苦情が出ることもなくなりました。
vSphere 8での導入手順
設定を始める前に、スイッチでJumbo Frames (MTU 9000)が有効になっていることを確認してください。これは、ストレージの最適な帯域幅を確保するために非常に重要です。
ステップ1:VMkernelネットワークの設定
管理用(Management)ネットワークカードをストレージと共有しないでください。安全性とパフォーマンスを確保するために、トラフィックを分離します。
- vSphere Clientにアクセスし、ホスト -> 設定 (Configure) -> ネットワーク (Networking) を選択します。
- 専用の分散スイッチ(Distributed Switch)または標準スイッチ上に、新しいVMkernelアダプタを作成します。
- ストレージコントローラーと同じセグメントの静的IPアドレスを割り当てます。注意:vSphere 8はNVMeトラフィックを自動的に識別するため、このステップで特別なサービスにチェックを入れる必要はありません。
ステップ2:Software NVMe over TCPアダプタの有効化
vSphere 8では、このアダプタは自動的に表示されないため、手動で追加する必要があります。
- 「設定」タブのストレージアダプタ (Storage Adapters) に移動します。
- ストレージアダプタの追加 (Add Storage Adapter) をクリックし、Software NVMe over TCPアダプタの追加 (Add Software NVMe over TCP adapter) を選択します。
- ストレージ用に用意した適切な物理NICを選択します。
システムによって仮想アダプタ(例:vmhba64)が作成されます。これがホストとストレージアレイ間のメインの通信ポートとなります。
ステップ3:ストレージコントローラーの登録
次に、ストレージアレイへの接続設定を行います。
- 作成したNVMe/TCPアダプタを選択し、コントローラー (Controllers) タブに切り替えます。
- コントローラーの追加 (Add Controller) をクリックし、ストレージターゲットのIPアドレスを入力します。
- デフォルトポートは通常 4420 です。コントローラーの検出 (Discover Controllers) をクリックして、システムに自動検索させます。
ステップ4:CLIによる接続確認
すべてが正常に接続されているか確認するために、ESXiホストにSSHでログインし、次のコマンドを実行します。
esxcli nvme controller list
State 列に Connected と表示されていれば成功です。Disconnected と表示される場合は、ルーティングやスイッチのファイアウォール設定を再確認してください。
ステップ5:データストアの作成
これでNVMeディスクが通常のストレージデバイスとして表示されます。新しいデータストア (New Datastore) に進み、VMFS 6 形式を選択してフォーマットを実行します。NVMeのフォーマット速度は非常に高速で、ほぼ瞬時に完了します。
システムを安定させるための実践的なアドバイス
運用を続けていく中で、3つの重要なポイントに気づきました。第一に、可能であれば RDMA 対応のネットワークカードを使用して、CPU負荷をさらに軽減すること。第二に、VMwareの High Performance Plugin (HPP) ポリシーを常に遵守すること。これは高速デバイス専用の最適化メカニズムです。
最後に、ネットワークカード(NIC)のファームウェア更新を忘れないでください。NVMe/TCP環境では、古いドライバが原因で、わずか数秒でデータストアの接続が失われる(All Paths Down)可能性があります。
NVMe over TCPはもはや未来の技術ではなく、現在のソリューションです。Fibre Channelを導入する予算はないが、システムをアップグレードして最大限のパフォーマンスを得たいと考えているなら、これが最短の道です。

