Bài toán thực tế: VM production cần thêm RAM nhưng không thể tắt
Tình huống này gặp nhiều hơn bạn tưởng: một con VM đang chạy database cho production, query ngày càng chậm vì thiếu RAM. DBA yêu cầu tăng từ 8GB lên 16GB gấp. Nhưng tắt VM xuống để chỉnh cấu hình? Không được — maintenance window phải xin trước 2 tuần, mà lúc này cần xử lý ngay trong ngày.
Mình đã gặp đúng tình huống này khi quản lý cluster ESXi 7.0 cho một dự án. Con VM chạy PostgreSQL cần thêm RAM gấp, nhưng không ai bật Hot Add từ đầu. Kết quả: phải chờ đến maintenance window tuần sau, trong khi ứng dụng vẫn chạy chậm. Sau lần đó, toàn bộ VM template đều được bật Hot Add trước khi deploy.
Đây là lúc tính năng Hot Add CPU và Hot Add Memory của VMware vSphere phát huy tác dụng. Nếu được bật từ trước, bạn có thể thêm CPU core và RAM vào VM đang chạy mà không cần reboot — guest OS nhận tài nguyên mới ngay lập tức.
Vì sao Hot Add không hoạt động dù vSphere hỗ trợ?
Nhiều người nhầm tưởng Hot Add là tính năng tự động có sẵn. Thực ra có 3 điều kiện phải thỏa mãn đồng thời:
- License phù hợp: ESXi Standard chỉ hỗ trợ Hot Add Memory. Hot Add CPU yêu cầu Enterprise Plus
- Phải bật khi VM đang tắt: Không thể bật tùy chọn này khi VM đang powered on — đây là cái bẫy phổ biến nhất
- Guest OS phải hỗ trợ: Linux kernel 2.6.25+ và Windows Server 2008+ đều ổn, nhưng một số distro cũ cần load module thủ công
Cái bẫy lớn nhất: tùy chọn này phải được bật khi VM đang tắt hoàn toàn. Nếu VM đang chạy, mọi thay đổi đều bị grayout — phải tắt xuống, bật tính năng, rồi bật lại VM. Chính vì vậy, best practice là cấu hình ngay từ đầu khi tạo VM hoặc từ template.
Các cách bật Hot Add
Cách 1: Qua vSphere Client (GUI)
Phù hợp khi làm thủ công từng VM một:
- Tắt VM (Power Off)
- Click chuột phải vào VM → Edit Settings
- Chọn tab VM Options → mở rộng mục Advanced
- Tìm phần Memory → tick vào Enable Hot Plug
- Quay lại tab Virtual Hardware → click vào CPU
- Tick vào Enable CPU Hot Add
- Click OK → bật VM lại
Sau khi VM khởi động xong, bạn có thể vào Edit Settings khi VM đang chạy và kéo tăng số CPU core hoặc RAM — không cần reboot.
Cách 2: Qua PowerCLI (xử lý hàng loạt)
Nếu cần bật cho nhiều VM cùng lúc, PowerCLI là lựa chọn hiệu quả hơn nhiều. Kết nối vCenter trước:
# Kết nối vCenter
Connect-VIServer -Server vcenter.lab.local -User [email protected] -Password "P@ssw0rd"
# Bật Hot Add cho một VM cụ thể (VM phải đang tắt)
$vm = Get-VM -Name "db-postgres-01"
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.memoryHotAddEnabled = $true
$spec.cpuHotAddEnabled = $true
$vm.ExtensionData.ReconfigVM($spec)
Write-Host "Hot Add đã được bật cho: $($vm.Name)"
Bật hàng loạt theo pattern tên VM:
# Chỉ xử lý VM đang tắt — an toàn khi chạy hàng loạt
Get-VM -Name "db-*" | Where-Object {$_.PowerState -eq "PoweredOff"} | ForEach-Object {
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.memoryHotAddEnabled = $true
$spec.cpuHotAddEnabled = $true
$_.ExtensionData.ReconfigVM($spec)
Write-Host "Đã bật Hot Add cho: $($_.Name)"
}
Cách 3: Sửa file .vmx trực tiếp trên ESXi host
Dùng khi cần can thiệp cấp thấp hoặc không có quyền vSphere Client. SSH vào ESXi host:
# Lấy VMID
vim-cmd vmsvc/getallvms | grep "db-postgres-01"
# Tắt VM (thay 42 bằng VMID thực tế)
vim-cmd vmsvc/power.off 42
# Tìm và sửa file .vmx
find /vmfs/volumes/ -name "db-postgres-01.vmx"
vi /vmfs/volumes/datastore1/db-postgres-01/db-postgres-01.vmx
Thêm hai dòng sau vào file .vmx:
mem.hotadd = "TRUE"
vcpu.hotadd = "TRUE"
# Reload cấu hình và bật VM lại
vim-cmd vmsvc/reload 42
vim-cmd vmsvc/power.on 42
Cách tốt nhất: Bật Hot Add ngay trong VM Template
Sau vài lần quên bật cho VM mới, giải pháp thực sự là bật Hot Add từ template — mọi VM clone ra đều có sẵn, không cần nhớ.
# Convert template sang VM để chỉnh sửa
$template = Get-Template -Name "ubuntu-22.04-base"
Set-Template -Template $template -ToVM
$vm = Get-VM -Name "ubuntu-22.04-base"
# Bật Hot Add
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.memoryHotAddEnabled = $true
$spec.cpuHotAddEnabled = $true
$vm.ExtensionData.ReconfigVM($spec)
# Convert lại thành template
Set-VM -VM $vm -ToTemplate -Confirm:$false
Write-Host "Template đã cập nhật với Hot Add enabled"
Từ đây, mọi VM deploy từ template này đều tự động có Hot Add — pipeline deploy không cần thêm bước cấu hình thủ công.
Kiểm tra guest OS có nhận tài nguyên mới không
Sau khi tăng CPU/RAM qua vSphere trong khi VM đang chạy, xác nhận guest OS đã nhận:
Với Linux:
# Kiểm tra RAM hiện tại
free -h
# dmesg ghi lại sự kiện khi hot-add thành công
dmesg | grep -i "memory\|acpi\|hot"
# Kiểm tra số CPU
nproc
lscpu | grep "^CPU(s):"
Một số kernel Linux cũ cần load module acpiphp để nhận CPU hot-add:
# Load module ngay lập tức
modprobe acpiphp
# Tự động load khi boot
echo "acpiphp" >> /etc/modules
Với Windows Server, mở Task Manager → Performance — RAM và CPU được cập nhật ngay mà không cần reboot.
Một số điều cần biết trước khi bật hàng loạt
Khi migrate từ VMware sang Proxmox cho lab cá nhân, mình nhận thấy Proxmox xử lý hot-plug khác hẳn — không cần cấu hình trước, VM tắt hay bật đều có thể sửa tài nguyên. Điều đó khiến mình ngạc nhiên vì đã quen với workflow “phải tắt VM trước” của vSphere. Mỗi platform có triết lý thiết kế riêng, và hiểu rõ điểm khác biệt giúp tránh được nhiều sự cố không đáng.
Quay lại vSphere, có một số điểm cần lưu ý khi bật Hot Add:
- Hot Add CPU làm tăng NUMA overhead: Khi thêm CPU vượt quá physical NUMA node, hiệu năng có thể giảm. Nên cân nhắc với những VM nhạy cảm về latency như database
- Memory Hot Add không thể Hot Remove: Thêm RAM được, nhưng giảm RAM vẫn phải reboot. Đây là giới hạn của OS, không phải VMware
- VM Hardware Version phải từ 7 trở lên: VM tạo từ ESX 3.x trở về trước cần upgrade hardware version trước khi bật Hot Add
- Theo dõi NUMA sau khi thêm CPU: Dùng
esxtop(nhấnmđể xem memory stats) để kiểm tra NUMA imbalance sau khi hot-add
# Kiểm tra Hot Add status của tất cả VM trong cluster qua PowerCLI
Get-VM | Select-Object Name,
@{N="MemHotAdd";E={$_.ExtensionData.Config.MemoryHotAddEnabled}},
@{N="CPUHotAdd";E={$_.ExtensionData.Config.CpuHotAddEnabled}},
@{N="PowerState";E={$_.PowerState}} | Format-Table -AutoSize
Script trên cho ra bảng tổng quan toàn bộ cluster — nhanh chóng phát hiện VM nào chưa được bật Hot Add trước khi gặp sự cố.
Kết
Hot Add CPU/RAM là tính năng cực kỳ thực tế trong môi trường production nơi downtime bị hạn chế tối đa. Bật từ template ngay từ đầu là cách làm không tốn công nhớ, không lo quên. Kết hợp với PowerCLI để audit và cập nhật hàng loạt, việc đảm bảo toàn bộ VM trong cluster đều sẵn sàng cho Hot Add chỉ mất vài phút.
Nếu đang quản lý môi trường vSphere mà chưa có policy về Hot Add, đây là lúc tốt để thiết lập — trước khi cần gấp mà không có.

