vMotion อนุญาตให้ Migrate VMware VM ที่กำลังรันอยู่ จาก Physical ESXi Host หนึ่งไปอีก Host หนึ่ง โดยไม่ Interrupt การทำงานและไม่หยุด Service ใดๆ บทความนี้จะอภิปรายฟีเจอร์ VMware vMotion: vMotion ทำงานอย่างไร มีประเภทอะไรบ้าง และวิธี Migrate VM ระหว่าง ESXi Hosts หรือ Storages แบบ Manual รวมถึงวิธี Optimize และ Troubleshooting vMotion ทั่วไป
vMotion ไม่ได้เป็นวิธีให้ VM High Availability แต่เป็น Tool เรียบง่ายสะดวกสำหรับย้าย Productive VMs เมื่อต้อง Maintain/Update/Replace Physical Servers ที่ติดตั้ง ESXi Hypervisor หรือ Storage Arrays นอกจากนี้ DRS (Dynamic Resource Scheduler) เทคโนโลยีที่กระจาย (Balance) Load ของ Physical Servers ก็ Build บน vMotion
เทคโนโลยี Microsoft ที่คล้ายกันสำหรับ Migrate VMs ระหว่าง Hyper-V Hosts เรียกว่า Hyper-V Live Migration

VMware vMotion ทำงานอย่างไร?
เพื่อ Migrate VM ระหว่าง Physical Hosts ด้วย vMotion ใช้ Components ต่อไปนี้:
- VMware vCenter Management Server
- Shared Storage (เชื่อมต่อด้วย Fibre Channel, iSCSI หรือ NAS) ที่เก็บไฟล์ VM Shared Storage อนุญาตให้ Multiple Physical ESXi Hosts เข้าถึงไฟล์ VM เดียวกันใน SAN
- Shared Fast Network (อย่างน้อย 1GB Ethernet) ระหว่าง Source และ Target ESXi Hosts ระหว่าง Migrate VM จะเก็บ MAC Address เดิม และ vMotion จะแจ้ง Network Switch ว่า Location ของ VM MAC Address เปลี่ยนไป ทำให้ Active Network Connections คงอยู่
- CPU Compatibility บน Hosts หรือเปิด Enhanced vMotion Compatibility (EVC)
vMotion ทำ Live Migration อย่างไร? เริ่มต้นสร้าง Shadow Clone ของ Source VM พร้อม Config เดียวกัน (จาก VMX File) บน Target Host Clone VM เห็น VM Files ทั้งหมดบน Shared Storage เนื้อหา RAM และ State ของ Running VM ถูกส่งผ่าน Network จาก Source ไป Target ESXi Host vMotion สร้าง Memory Snapshot ของ VM และ Copy ไป Target Server ผ่าน Network พร้อมกัน vMotion ติดตามการเปลี่ยนแปลงบน Memory Pages และ Copy เฉพาะ Memory Segments ที่ Modified (อาจเกิดหลาย Stage ทุกครั้งข้อมูลน้อยลงและใช้เวลาน้อยลง)
ที่จุดหนึ่ง State ของ Source VM จะถูก Freeze Changed Memory Segments และ CPU Instructions ถูก Copy และ VM เริ่มทำงานบน Target ESXi Host กระบวนการทั้งหมดใช้เวลาไม่กี่วินาทีสำหรับ VM ขนาดกลางบน Network 1/10 GB Ethernet
ประเภทของ VMware vMotion
vMotion หมายถึง Stack ของเทคโนโลยีต่างๆ ที่อนุญาตให้ย้าย Running VMs On-the-fly ระหว่าง Hosts, Storage Arrays, เมือง หรือ On-premises และ Cloud Infrastructure
ประเภท vMotion:
- Standard vMotion – Migrate Running VM ระหว่าง ESXi Hosts
- Storage vMotion – ย้ายไฟล์ Running VM ระหว่าง Datastores (SAN Storage Arrays, NAS, vVol, NFS ฯลฯ) แบบ Online
- Shared-Nothing vMotion – Migrate VM ระหว่าง ESXi Servers ใน Network โดยไม่ใช้ Shared Storage (ต้องการ L2 Network)
- Long Distance vMotion – Migrate VM ระหว่าง Remote Sites (Max Round Trip Time ถึง 150 ms รวม L3 Networks) Introduced ใน vSphere 6.0
- Encrypted vSphere vMotion – เข้ารหัส VM ขณะ Transfer ผ่าน Network (มีใน vSphere 6.5)
- Cross-Cloud Cold and Hot Migration – Online หรือ Offline Migration ระหว่าง On-prem และ Cloud Infrastructure
คุณสมบัติ VMware Storage vMotion
Storage vMotion อนุญาตให้ย้ายไฟล์ Running VM (VMDK Virtual Disks และ Config Files) ไป Datastore VMFS/NFS/vVol อื่น (LUN, Storage Array) โดยไม่หยุด VM
ข้อกำหนดสำหรับ Storage vMotion ที่สำเร็จ:
- ประเภท VM Disks ต้องเป็น Persistent หรือ RDM
- ไม่รองรับ VM Migration ระหว่างติดตั้ง VMware Tools
- VMFS Version ของ Datastore สำคัญต่อ Migration เช่น ไม่สามารถย้าย VMDK เกิน 2 TB จาก VMFS5 ไป VMFS3
- License บน ESXi Host
- Host ที่ VM รันอยู่ ต้องเข้าถึงทั้ง Source และ Target Datastore ได้
- ใช้เทคโนโลยี Changed Block Tracking (CBT) ในการ Copy VM Disk อนุญาตให้ Track Changed Data Blocks และ Copy เฉพาะส่วนนั้น
Enhanced vMotion Compatibility (EVC) ใน VMware
Enhanced vMotion Compatibility (EVC) Mode สำหรับ VMware HA/DRS Clusters ใช้เมื่อ Cluster ประกอบด้วย Hosts ที่มี CPU รุ่นต่างกัน (แต่วendor ต้องเหมือนกัน!!!) หากเปิด EVC สำหรับ Cluster Hypervisor จะเริ่ม Mask CPU Instructions ที่ไม่รองรับโดย Hosts ทั้งหมด เมื่อ EVC เปิดอยู่ ฟีเจอร์ CPU ทั้งหมดของ ESXi Hosts ใน Cluster จะเข้ากันได้กับ Minimum Set ของ Processor Instructions ที่ vSphere Admin ตั้งใน Cluster Settings
ดังนั้น EVC จึงอนุญาตให้ Migrate VM ระหว่าง Hosts ที่มี Set ของ CPU Instructions รองรับต่างกัน
ห้ามผสม Hosts ที่มี Processor Vendor ต่างกัน เช่น Intel หรือ AMD ใน Cluster vSphere เดียวกัน EVC ทำให้เข้ากันได้เฉพาะ Processor ของ Vendor เดียวกัน
เปิด VMware EVC ระดับ Cluster ไปที่ Configure → Configuration → VMWare EVC คลิก Edit

หากเปิด EVC สำหรับ Cluster ต้องเลือก EVC Mode (สำหรับ AMD หรือ Intel Hosts) และเลือกจาก Dropdown List รุ่น CPU ต่ำสุดของ Vendor นั้นที่มีใน VMware Cluster

VMware แนะนำให้เปิด EVC ตลอดเวลา ไม่ว่าจะมี Hosts อะไรใน Cluster ก็ตาม หากต้องการขยาย Cluster จะทำได้ง่ายขึ้น มี KB Article แยกต่างหากพิสูจน์ว่าแม้ VMs จะไม่ใช้ Full Set ของ CPU Instructions ก็ไม่ส่งผลต่อ Performance ของ Host
VMware vSphere 6.7 Introduce เทคโนโลยี Migration ระหว่าง Cloud และ On-premises (Cross-Cloud Cold and Hot Migration) เพื่อ Migrate VM ไป Cloud ตอนนี้สามารถเปิด Per-VM EVC ใน VM Settings ได้ (มีใน vSphere 6.7 พร้อม Hardware Version 14)
ดึง Baseline EVC Levels ที่ตั้งค่าไว้สำหรับ VM ใน Cluster ด้วย PowerCLI:
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
ดู Maximum Supported EVC Mode:
Get-VMHost | Select-Object Name,ProcessorType,MaxEVCMode
วิธีเปิดใช้งาน vMotion ใน VMware vSphere
ดูวิธี Enable และ Configure vMotion ใน VMware vSphere 6.7 เพื่อใช้ vMotion ก็พอมี License VMware Essentials Plus
vMotion เปิดใช้งานที่ระดับ VMkernel ของ ESXi Host Virtual Switch เลือก Host ไปที่ Configure → Networking → VMkernel adapters
เลือก VMkernel Adapter คลิก Edit

ใน Properties ของ vmk Port ให้ Enable vMotion ในส่วน Enabled Services

ในตัวอย่าง HA Cluster สร้างแล้ว และใช้ vSphere Distributed Switch (VDS)
วิธี Migrate VM ระหว่าง Hosts ด้วย vMotion
เพื่อ Migrate Running VM ระหว่าง 2 ESXi Hosts เปิด vSphere Client คลิกขวา VM ที่ต้องการย้าย เลือก Migrate

เลือกประเภท Migration ที่ต้องการ:
- Change compute resource only — Migrate VM ไป ESXi Host อื่น
- Change storage only — นี้คือ Storage vMotion (เปลี่ยน Datastore ที่เก็บไฟล์ VM)
- Change both compute resource and storage — โหมด Migrate โดยไม่มี Shared Storage (vMotion without shared storage/Shared-Nothing) ไฟล์ VM ถูก Copy ระหว่าง Hosts ผ่าน Network
ผมเลือกตัวแรก
Migration Wizard จะให้เลือก Host, Cluster, Resource Pool หรือ vApp ที่จะย้าย VM ไป เลือก Host หาก vMotion Config ถูกต้องและไม่มี Conflict จะเห็นข้อความ Compatibility checks succeeded ในส่วน Compatibility
หากเห็น Error ใน Compatibility Tab ให้ศึกษาและแก้ไขให้เรียบร้อย
คลิก Next

Wizard จะให้เลือก Network ที่จะวาง vNIC ของ VM บน Target Host หากต้องการ VM พร้อมใช้งานหลัง Migrate ให้วางใน Network Segment (VLAN) เดียวกับ Source Host หากใช้ Standard vSphere Switch ให้สร้าง Port Group เดียวกันบน ESXi Hosts ทุกตัว หากใช้ VDS Port Groups บน Cluster Hosts ทุกตัวจะเหมือนกัน

ขั้นตอนสุดท้าย เลือก Priority ของ vMotion Task โดยค่าเริ่มต้นใช้ Highest Priority (Schedule vMotion with high priority) ผมใช้ตัวนี้เสมอ

คลิก Next → Finish และ VM Migration ไป Host อื่นจะเริ่มต้น ติดตามสถานะได้ใน Panel Recent Tasks (Task Relocate virtual machine) ในกรณีของผม Migration ด้วย vMotion บน 10 GB Ethernet ใช้เวลาประมาณ 3 วินาที
ตรวจสอบว่า VM รันบน ESXi Host อื่นแล้ว

สามารถ Migrate Running VM ไป Host อื่นด้วย PowerCLI ใช้ Cmdlet Move-VM เช่น ต้องการย้าย VM ทั้งหมดจาก mun-esxi01 ไป mun-esxi02:
Get-VMHost mun-esxi01|Get-Vm| Move-VM –Destination (Get-VMHost mun-esxi02)
ทำไม VMware vMotion ถึงไม่ทำงาน?
เหตุผลทั่วไปที่ vMotion ล้มเหลว หรือ VM Migration ช้ามาก:
- CPU Incompatibility (เปิด EVC/Enhanced vMotion Compatibility Mode)
- vMotion ไม่ได้ Enable ใน VMkernel Interface
- Network Settings ของ ESXi Host หรือ Virtual Switches, Port Groups ผิด (Jumbo Frames Config ผิด, IP Conflict ใน vMotion Network, vSwitch Settings ผิด, Network ช้า, Packet Loss)
- ไม่มี Shared Storage (สำหรับ vSphere 5.1 หรือก่อน) vSphere 5.1 ขึ้นไปมี Shared-Nothing vMotion
- CD/DVD หรือ ISO Image ไม่พร้อมใช้งานบน Target Host
- Anti-Affinity Rules เปิดอยู่
- VMware Tools กำลังติดตั้งใน Guest OS
- ถ้า Guest OS เปลี่ยนแปลง RAM Content อยู่ตลอด vMotion อาจทัน Copy Modified Data ไป VM Copy บน Host อื่นผ่าน Network ไม่ทัน
- ถ้า Target Host ไม่มี CPU หรือ RAM Resources พอสำหรับสร้าง Shadow VM vMotion จะ Fail พร้อม Error
หากเกิด Error ระหว่าง vMotion Migration VM ของคุณจะไม่ Shutdown และยังคงรันบน Source Host
วิธีปรับปรุง/เพิ่มความเร็ว vMotion เพื่อ Migrate VM เร็วขึ้น
สามารถเพิ่มความเร็ว Migration VM ได้หลายวิธี
- ใช้ Network ที่มี Performance สูงสุดระหว่าง 2 ESXi Hosts ใช้อย่างน้อย 10 GB Network, 25 GB ยิ่งดีกว่า (Network Adapter ของ ESXi Server และ Physical Switch ต้องรองรับโหมดนี้)
- ใช้ Physical Interfaces แยกกันสำหรับ vMotion Traffic
- vMotion Migration ใช้ Threads (Streams) สร้าง 1 Thread ต่อ VMkernel ที่ Enable vMotion แต่ Thread นี้ใช้ได้แค่ 1 Processor Core
เพื่อให้ vMotion Processes ใช้ CPU Core มากกว่า 1 ให้สร้าง Multiple VMkernel Interfaces Enable vMotion สำหรับแต่ละตัว และ Link เข้ากับ NIC Interface เดียวกัน vMotion Thread มี Throughput เฉลี่ยประมาณ 15 GbE ดังนั้นเพื่อ Load 100 GbE ต้องการ 6 Threads
ยังสามารถเพิ่มจำนวน vMotion Threads สำหรับ VMkernel Interface ได้ด้วย Option Migrate.VMotionStreamHelpers ใน Advanced System Settings