VMware vMotion徹底解説:稼働中の仮想マシンを停止せずに移行するライブマイグレーション完全ガイド
vMotionは、稼働中のVMware仮想マシン(VM)を物理ESXiホスト間で、サービスを中断することなく別のホストへ移行できる強力な機能です。本記事では、vMotionの仕組み、vMotionの種類、ESXiホスト間やストレージ間での手動マイグレーションの手順を詳しく解説します。さらに、vMotionの最適化手法とトラブルシューティングの典型的な方法についても取り上げます。
vMotionとは何か
vMotionを使用すると、ダウンタイムゼロで仮想マシンのライブマイグレーションを実行でき、ユーザーの作業を一切中断させることなくVMを移動できます。なお、vMotionはVMの高可用性(HA)を提供する仕組みとして位置づけられているわけではありません。その主な用途は、ESXiハイパーバイザーがインストールされた物理サーバーやストレージアレイのメンテナンス・更新・交換が必要な際に、稼働中の本番VMを簡単かつ便利に移動するためのツールであるという点です。また、物理サーバー間の負荷を分散(バランシング)する技術であるDRS(Dynamic Resource Scheduler)も、このvMotionを基盤として動作しています。
参考までに、MicrosoftにもHyper-Vホスト間でVMを移行する類似の技術があり、「Hyper-V Live Migration」と呼ばれています。

VMware vMotionの仕組み
vMotionを使ってVMを物理ホスト間で移行するには、以下のVMwareコンポーネントが必要です。
- VMware vCenter管理サーバー
- 共有ストレージ(Fibre Channel、iSCSI、NASなどで接続):仮想マシンのファイルを格納します。共有ストレージにより、複数の物理ESXiホストがSAN上で同じVMのファイルにアクセスできます。
- ソースホストとターゲットホスト間の高速な共有ネットワーク(最低1GbE):移行時、VMは元のMACアドレスを保持し、vMotionはネットワークスイッチに対してVMのMACアドレスの位置が変更されたことを通知します。これにより、アクティブなネットワーク接続が維持されます。
- ホスト間のCPU互換性、またはEnhanced vMotion Compatibility(EVC)オプションの有効化
vMotionはどのようにライブマイグレーションを実現するのでしょうか?まず、ターゲットホスト上に、ソースVMと同じ構成(VMXファイルに基づく)のシャドウクローンが作成されます。このクローンVMは、共有ストレージ上のすべてのVMファイルを参照できます。次に、稼働中VMのRAMの内容と実行状態が、ネットワーク経由でソースからターゲットのESXiホストへ転送されます。vMotionはVMのメモリスナップショットを作成し、それをネットワーク経由でターゲットサーバーにコピーします。同時に、vMotionはメモリページの変更を追跡し、変更されたメモリセグメントのみをコピーします(この処理は複数段階で行われる場合があり、各段階でコピーされるデータ量は減り、所要時間も短くなります)。
ある時点でソースVMの状態がフリーズされ、変更されたメモリセグメントとCPU命令がコピーされ、ターゲットのESXiホスト上でVMが起動されます。中規模サイズのVMであれば、1GbE/10GbEネットワーク環境でこのプロセス全体は数秒で完了します。
VMware vMotionの種類
VMwareにおける「vMotion」は、稼働中のVMをホスト間、ストレージアレイ間、都市間、あるいはオンプレミスとクラウドインフラ間でリアルタイムに移動することを可能にする、さまざまな技術のスタック全体を指します。
vMotionの種類は以下の通りです。
- 標準のvMotion:稼働中のVMをESXiホスト間で移行
- Storage vMotion:仮想マシンのファイルをデータストア間(SANストレージアレイ、NAS、vVol、NFSなど)でオンライン移動
- Shared-Nothing vMotion:共有ストレージを使用せずに、ネットワーク経由でESXiサーバー間のVMを移行(L2ネットワークが必要)
- Long Distance vMotion:遠隔サイト間でのVM移行(最大ラウンドトリップタイム150msまで対応、L3ネットワークも含む)。vSphere 6.0で導入されました。
- Encrypted vSphere vMotion:ネットワーク経由のVM転送時に暗号化を可能にする機能(vSphere 6.5以降で利用可能)
- Cross-Cloud Cold and Hot Migration:オンプレミスとクラウドインフラ間でのオンライン/オフライン移行
VMware Storage vMotionの特徴
前述の通り、Storage vMotionを使用すると、稼働中の仮想マシンのファイル(vmdk仮想ディスクおよび構成ファイル)を、VMを停止することなく別のVMFS/NFS/vVolデータストア(LUN、ストレージアレイ)へ移動できます。
Storage vMotionを正常に実行するための要件:
- VMディスクのタイプが永続ディスクまたはRDMであること
- VMware Toolsのインストール中のVM移行はサポートされていないこと
- 移行時にはデータストアのVMFSバージョンが重要。たとえば、2TBを超えるvmdkファイルをVMFS5からVMFS3へ移動することはできません。
- ESXiホストのライセンス
- VMが稼働しているホストが、ソースとターゲット両方のデータストアにアクセスできること
- 仮想マシンディスクのコピーにはChanged Block Tracking(CBT)技術が使用されます。これにより、変更されたデータブロックを追跡してコピーできます。
VMwareにおけるEnhanced vMotion Compatibility(EVC)
VMware HA/DRSクラスター向けのEnhanced vMotion Compatibility(EVC)モードは、クラスターが異なる世代のCPUを持つホストで構成されている場合(ただしベンダーは同じである必要があります)に使用されます。クラスターに対してEVCを有効にすると、ハイパーバイザーはすべてのホストがサポートしていないCPU命令をマスキングし始めます。EVCが有効になると、クラスター内のすべてのESXiホストのCPU機能が、vSphere管理者がクラスタ設定で指定した基本最小限のプロセッサ命令セットと互換性を持つようになります。
このように、EVCのおかげで、サポートされるプロセッサ命令セットが異なるホスト間でもVMを移行できるようになります。
注意点として、IntelやAMDなど異なるプロセッサベンダーのホストを同じvSphereクラスターに混在させないでください。EVCは同一ベンダーのプロセッサ間での互換性を実現するものです。
EVCはクラスターレベルで有効化できます。構成(Configure)→設定(Configuration)→VMware EVCに移動し、編集(Edit)をクリックしてください。

クラスターに対してEVCを有効にすると、EVCモード(AMDまたはIntelホスト用)を選択し、ドロップダウンリストから自社のVMwareクラスターに存在する当該ベンダーの最小CPU世代を選択する必要があります。

VMwareは、クラスター内のホスト構成にかかわらず、常にEVCを有効にしておくことを推奨しています。将来クラスターを拡張する際に作業が容易になるためです。VMがCPU命令セットのフルセットを使用していなくてもホストのパフォーマンスには影響しないことを裏付ける、専用のKB記事さえ存在します。
VMware vSphere 6.7では、クラウドとオンプレミス間の移行技術(Cross-Cloud Cold and Hot Migration)が導入されました。VMをクラウドへ移行するために、VM設定でPer-VM EVCを有効化できるようになりました(vSphere 6.7、ハードウェアバージョン14以降で利用可能)。
PowerCLIを使用すると、クラスター内のVMに設定されたEVCベースラインレベルを取得できます。
Get-VM | Select Name,HardwareVersion,
@{Name='VM_EVC_Mode';Expression={$_.ExtensionData.Runtime.MinRequiredEVCModeKey}},
@{Name='Cluster_Name';Expression={$_.VMHost.Parent}},
@{Name='Cluster_EVC_Mode';Expression={$_.VMHost.Parent.EVCMode}} | ft
サポートされる最大EVCモードを取得するには:
Get-VMHost | Select-Object Name,ProcessorType,MaxEVCMode
VMware vSphereでvMotionを有効にする方法
ここでは、VMware vSphere 6.7でvMotionを有効化・構成する方法を見ていきましょう。vMotionを使用するには、Essentials Plus以上のVMwareライセンスがあれば十分です。
vMotionは、ESXiホストの仮想スイッチにおけるVMkernelレベルで有効化します。対象ホストを選択し、構成(Configure)→ネットワーク(Networking)→VMkernelアダプタへ移動します。
使用するVMkernelアダプタを選択し、編集(Edit)をクリックします。

vmkポートのプロパティで、有効なサービス(Enabled Services)セクションのvMotionを有効にします。

この例では、VMware HAクラスターがすでに作成されており、vSphere Distributed Switch(VDS)が使用されています。
vMotionを使用してホスト間でVMを移行する方法
稼働中のVMを2台のESXiホスト間で移行するには、vSphere Clientを開き、移行したいVMを右クリックして移行(Migrate)を選択します。

使用する移行タイプを選択します。
- コンピューティングリソースのみ変更:VMを別のESXiホストへ移行
- ストレージのみ変更:Storage vMotion(VMファイルが配置されているデータストアの変更)
- コンピューティングリソースとストレージの両方を変更:共有ストレージなしの移行モード(Shared-Nothing vMotion)。VMファイルがネットワーク経由でホスト間にコピーされます。
ここでは最初のオプションを選択しました。
移行ウィザードが、仮想マシンの移行先としてホスト、クラスター、リソースプール、またはvAppの選択を求めてきます。ホストを選択してください。vMotionが正しく構成されており、競合が検出されなければ、互換性セクションに「互換性チェックに成功しました(Compatibility checks succeeded)」というメッセージが表示されます。
互換性タブにエラーが表示された場合は、内容を十分に確認し、問題を解消してから先に進みましょう。
次へ(Next)をクリックします。

次に、移行ウィザードが、ターゲットホスト上でVMのvNICを配置するネットワークの選択を求めます。移行後もVMにアクセスできるようにするには、ソースホストと同じネットワークセグメント(VLAN)に配置してください。標準のvSphere Switchを使用している場合は、すべてのESXiホストに同じポートグループを作成する必要があります。VDSを使用している場合は、クラスタ内の全ホストでポートグループが共通になります。

最後のステップで、vMotionタスクの優先度を選択します。デフォルトでは最高優先度(高優先度でvMotionをスケジュール)が使用されます。筆者は常にこの設定を使用しています。

その後、次へ(Next)→完了(Finish)をクリックすると、別ホストへのVM移行が開始されます。移行の状況は最近のタスク(Recent Tasks)パネル(仮想マシンの再配置(Relocate virtual machine)タスク)で追跡できます。筆者の環境では、10GbE Ethernet経由のvMotionによるVM移行は約3秒で完了しました。
VMが別のESXiホスト上で稼働していることを確認しましょう。

PowerCLIのMove-VM PowerShellコマンドレットを使用すれば、稼働中のVMを別ホストへ移行することも可能です。たとえば、mun-esxi01上のすべてのVMをmun-esxi02へ移動したい場合は、次のように実行します。
Get-VMHost mun-esxi01|Get-Vm| Move-VM –Destination (Get-VMHost mun-esxi02)
VMware vMotionが動作しない理由
vMotionが失敗したり、VM移行が極端に遅くなったりする典型的な原因を以下にまとめます。
- CPU非互換(EVC/Enhanced vMotion Compatibilityモードを有効にする)
- VMkernelインターフェースでvMotionが有効化されていない
- ESXiホストや仮想スイッチ、ポートグループのネットワーク設定ミス(ジャンボフレームの誤設定、vMotionネットワークでのIPアドレス競合、vSwitch設定の不備、低速なネットワーク、パケットロスなど)
- 共有ストレージが存在しない(vSphere 5.1以前の場合。vSphere 5.1以降ではShared-Nothing vMotionが利用可能)
- CD/DVDまたはISOイメージがターゲットホストからアクセスできない
- アンチアフィニティルールが有効になっている
- ゲストOSにVMware Toolsをインストール中である
- ゲストOSがRAMの内容を頻繁に書き換えている場合、vMotionが変更データをネットワーク経由で別ホスト上のVMコピーへ転送しきれず、移行が完了しないことがある
- ターゲットホストにシャドウVMを作成するための十分なCPUまたはRAMリソースがない場合、vMotionはエラーで失敗する
vMotion移行中にエラーが発生しても、VMはシャットダウンせず、ソースホスト上で引き続き稼働し続けます。
vMotionの速度を改善・最適化してVMを素早く移行する方法
仮想マシンの移行を高速化するには、いくつかの方法があります。
- まず何よりも、2台のESXiホスト間には最高性能のネットワークを使用しましょう。少なくとも10GbE、できれば25GbEのネットワークが理想的です(ESXiサーバーのネットワークアダプタと物理スイッチがこのモードに対応している必要があります)。
- vMotionトラフィックには、異なる物理インターフェースを使用する。
- vMotion移行ではスレッド(ストリームとも呼ばれます)が使用されます。vMotionが有効なVMkernelごとに1つのスレッドが作成されますが、このスレッドが使用できるのは1つのプロセッサコアだけです。
vMotionプロセスに複数のCPUコアを割り当てるには、複数のVMkernelインターフェースを作成し、それぞれでvMotionを有効化したうえで、1つのNICインターフェースにリンクします。1つのvMotionスレッドの平均スループットは約15Gbps程度なので、100GbEを飽和させるには6つのスレッドが必要です。
さらに、詳細システム設定(Advanced System Settings)のMigrate.VMotionStreamHelpersオプションを使用すれば、VMkernelインターフェースあたりのvMotionスレッド数を増やすこともできます。
-
仮想マシンでの3Dアクセラレーション パート2:VirtualBoxとOpenGLの設定方法チュートリアル
本記事は、仮想マシンにおける3D仮想化の設定と活用方法を解説する全3回シリーズの第2回です。今回は、WindowsまたはLinuxホスト上にインストールしたVirtualBoxで動作するWindows仮想マシンに対して、OpenGLアプリケーション(およびゲーム)向けの3Dアクセラレーションを有効にする方法を学びます。前回の第1回では、VMware製品を使ってWindows上のDirectXプログラムに3Dアクセラレーションを有効化する手順をご紹介しました。このときはホストOSがWindowsでもLinuxでも問題なく動作しました。そして最終回となる第3回では、LinuxホストとLinux仮想
-
仮想マシンで3Dアクセラレーションを実現する方法 パート1:VMwareとDirectXの設定チュートリアル
既存のホストマシンの上で仮想化されたOSを動かすのは、とても魅力的なアイデアです。楽しく、クールで、実際のプラットフォームに導入する前にソフトウェアを試せるだけでなく、通常はためらってしまうような操作にも挑戦できます。さらに大きな柔軟性を得られ、展開コストも大幅に削減できます。しかし、ほとんどの仮想化ソフトウェアに欠けていたのが、ゲストOS向けの3Dアクセラレーションでした。あるいは「欠けていた」と言うべきでしょう……今や、仮想マシンでの3Dアクセラレーションは現実のものとなっています。はじめにこの連載記事では、ゲストOSで3Dアクセラレーションを有効にするために必要な簡単な設定テクニックを紹