Bối cảnh: Tiền điện chạy, server thở không khí
Nếu bạn đang quản lý một cụm ESXi host trong môi trường datacenter, chắc chắn đã từng thấy cảnh này: 3 giờ sáng, toàn bộ 8 server đều chạy full, nhưng tổng tải CPU của cả cluster chỉ có 15%. Điện vẫn chạy, quạt vẫn quay, tiền điện vẫn tính — trong khi phần lớn tài nguyên đang nhàn rỗi hoàn toàn.
Distributed Power Management (DPM) là tính năng của vSphere giải quyết đúng bài toán này. Nó tự động migrate VM sang ít server hơn khi tải thấp, sau đó tắt hẳn những server trống. Khi tải tăng trở lại, DPM tự wake-on-LAN hoặc IPMI để bật server dự phòng lên trước khi cluster bị quá tải.
Mình đã từng migrate từ VMware sang Proxmox cho lab cá nhân, và nhận ra rằng Proxmox không có tính năng tương đương DPM theo cách tích hợp sẵn như vSphere. Muốn làm điều tương tự trên Proxmox phải tự viết script ngoài, dùng Proxmox API kết hợp với IPMI tools — khá cồng kềnh. Điều đó cho thấy DPM thực sự là điểm mạnh của VMware enterprise, đặc biệt khi bạn có từ 4 host trở lên và điện năng là chi phí đáng kể.
DPM hoạt động như thế nào?
DPM dựa vào DRS (Distributed Resource Scheduler) — nên DRS phải được bật trước. Quy trình hoạt động:
- DRS liên tục theo dõi CPU và RAM của toàn cluster
- Khi cluster rảnh (dưới ngưỡng cấu hình), DRS migrate VM ra khỏi một số host
- DPM tắt các host trống đó (graceful shutdown qua VMware Tools)
- Khi tải tăng và host hiện tại sắp đầy, DPM bật server dự phòng qua Wake-on-LAN hoặc IPMI/iLO
- Sau khi host boot xong và join cluster, DRS migrate VM sang để cân bằng tải
Điều kiện tiên quyết
Server cần hỗ trợ ít nhất một trong các phương thức wake-up sau:
- Wake-on-LAN (WoL): phổ biến, cần NIC hỗ trợ WoL và switch layer-2 cùng subnet với management network
- IPMI/BMC: qua out-of-band management, đáng tin cậy hơn WoL vì không phụ thuộc OS
- iLO (HP), iDRAC (Dell), CIMC (Cisco): vendor-specific IPMI implementation
Ngoài ra bắt buộc phải có vCenter Server (không dùng được với standalone ESXi), cluster ít nhất 2 ESXi host, và DRS đã bật ở chế độ Automatic hoặc Partially Automated.
Cài đặt — Kiểm tra trước khi bật DPM
Trước khi cấu hình, cần xác nhận host hỗ trợ wake-up protocol. Dùng PowerCLI để kiểm tra nhanh:
# Kết nối vCenter
Connect-VIServer -Server "vcenter.lab.local" -User "[email protected]"
# Kiểm tra DPM wake capability của từng host trong cluster
$cluster = Get-Cluster -Name "Production-Cluster"
foreach ($vmhost in ($cluster | Get-VMHost)) {
$config = $vmhost.ExtensionData.Config.PowerSystemCapability
Write-Host "$($vmhost.Name): WakeOnLan=$($config.WakeOnLanCapable)"
}
Nếu WakeOnLanCapable = True, host hỗ trợ WoL. Kiểm tra tiếp trạng thái DRS:
# Kiểm tra DRS đã bật chưa
$cluster = Get-Cluster -Name "Production-Cluster"
Write-Host "DRS Enabled: $($cluster.DrsEnabled)"
Write-Host "DRS Mode: $($cluster.DrsAutomationLevel)"
DRS phải là FullyAutomated hoặc PartiallyAutomated. Nếu chưa bật, bật DRS trước rồi mới đụng đến DPM.
Cấu hình DPM từng bước
Bước 1: Bật DRS (nếu chưa có)
Trong vSphere Client:
- Vào Cluster → Configure → vSphere DRS
- Click Edit
- Bật Turn ON vSphere DRS
- Chọn Automation Level: Fully Automated
- Lưu lại
Bước 2: Bật DPM và chọn mức tự động hóa
Sau khi DRS đã bật, vào Cluster → Configure → vSphere DPM, click Edit và chọn mức độ tự động:
- Off: DPM tắt hoàn toàn
- Manual: DPM đề xuất hành động, admin tự quyết định có thực hiện không
- Automatic: DPM tự tắt/bật host không cần can thiệp
Môi trường production nên bắt đầu với Manual để theo dõi vài tuần trước khi chuyển sang Automatic. Lý do: cần đảm bảo DPM không tắt host vào giờ cao điểm hoặc khi VM đang chạy workload nhạy cảm.
Bước 3: Điều chỉnh ngưỡng DPM Threshold
Trong phần DPM settings có thanh trượt DPM Threshold từ 1 đến 5:
- 1 (Conservative): chỉ tắt host khi cluster thực sự rất nhàn — an toàn nhất nhưng tiết kiệm ít
- 3 (Moderate): cân bằng giữa tiết kiệm điện và rủi ro
- 5 (Aggressive): tắt host mạnh tay hơn, tiết kiệm nhiều nhưng host có thể bị wake thường xuyên hơn
Khuyến nghị cho production: mức 2 trong giai đoạn thử nghiệm, tăng lên 3 sau khi đã quen với hành vi của DPM. Mức 1 gần như không làm gì, mức 4-5 host có thể bị tắt ngay cả khi tải đang ở mức trung bình.
Bước 4: Cấu hình IPMI cho host (nếu dùng out-of-band)
Nếu server dùng IPMI/iLO thay vì WoL, cần cấu hình thông tin BMC cho từng host:
# Cấu hình IPMI cho host qua PowerCLI
$vmhost = Get-VMHost -Name "esxi-03.lab.local"
$spec = New-Object VMware.Vim.HostIpmiInfo
$spec.BmcIpAddress = "192.168.1.203"
$spec.BmcPort = 623
$spec.Login = "admin"
$spec.Password = "your-ipmi-password"
$vmhost.ExtensionData.UpdateIpmi($spec)
Write-Host "IPMI configured for $($vmhost.Name)"
Sau khi cấu hình, vCenter sẽ test kết nối IPMI và báo trạng thái trong phần Host → Configure → Power Management.
Bước 5: Exclude host quan trọng khỏi DPM
Không phải host nào cũng nên tắt như nhau. Host chạy vCenter, management VM, hoặc infrastructure quan trọng nên được override để không bị DPM tự động tắt:
# Override DPM cho host cụ thể — chỉ đề xuất, không tự tắt
$vmhost = Get-VMHost -Name "esxi-01.lab.local"
$cluster = Get-Cluster -Name "Production-Cluster"
$clusterView = Get-View $cluster
$hostConfig = New-Object VMware.Vim.ClusterDpmHostConfigSpec
$hostConfig.Key = $vmhost.ExtensionData.MoRef
$hostConfig.Info = New-Object VMware.Vim.ClusterDpmConfigInfo
$hostConfig.Info.Behavior = "manual" # Override cluster: chỉ gợi ý, không tự động
$hostConfig.Info.Enabled = $true
$hostConfig.Operation = "edit"
$clusterSpec = New-Object VMware.Vim.ClusterConfigSpecEx
$clusterSpec.DpmHostConfigSpec = @($hostConfig)
$clusterView.ReconfigureComputeResource_Task($clusterSpec, $true)
Write-Host "esxi-01 set to DPM Manual override"
Kiểm tra & Monitoring
Xem DPM recommendations trong vSphere Client
Sau khi bật DPM ở chế độ Manual, vào Cluster → Monitor → vSphere DPM để thấy danh sách đề xuất hiện tại. Mỗi recommendation sẽ hiển thị host nào được đề xuất tắt, VM nào sẽ migrate đi đâu, và lý do DPM đưa ra quyết định đó.
Kiểm tra qua PowerCLI
# Xem host nào đang standby (đã bị DPM tắt)
$cluster = Get-Cluster -Name "Production-Cluster"
Get-VMHost -Location $cluster |
Select-Object Name, ConnectionState, PowerState |
Format-Table -AutoSize
# Xem lịch sử DPM events trong 7 ngày qua
$start = (Get-Date).AddDays(-7)
$end = Get-Date
foreach ($vmhost in (Get-VMHost -Location $cluster)) {
$events = Get-VIEvent -Entity $vmhost -Start $start -Finish $end -Types Info |
Where-Object { $_.FullFormattedMessage -match "DPM|standby|powered off|powered on" }
if ($events) {
Write-Host "`n=== $($vmhost.Name) ==="
$events | Select-Object CreatedTime, FullFormattedMessage | Format-Table -AutoSize
}
}
Một số lưu ý thực tế
- Thời gian boot: Mỗi lần DPM phải wake một host, mất 3–10 phút để boot xong và sẵn sàng nhận VM. Cấu hình DPM threshold đủ “sớm” để host kịp boot trước khi cluster bị quá tải — đây là lý do không nên chọn mức 5.
- DPM và HA Admission Control: Hai tính năng này tương tác với nhau. Nếu HA cần dự trữ capacity, DPM sẽ không tắt host đến mức vi phạm HA policy — hành vi này là đúng thiết kế, không phải bug.
- Giờ cao điểm: Xem xét cấu hình DPM scheduled exceptions nếu cluster có pattern tải rõ ràng (ví dụ: không tắt host nào từ 8:00–20:00 thứ 2–6).
- Network requirement cho WoL: Magic packet WoL phải đi qua layer-2, tức là vCenter và host phải cùng subnet management. Nếu khác subnet, bắt buộc phải dùng IPMI.
Sau vài tuần chạy ở chế độ Manual và quan sát recommendations, nếu DPM đề xuất hợp lý — không tắt host vào giờ cao điểm, không gây VM bị lag khi cluster tight — thì mới chuyển sang Automatic. Trong môi trường 8 server với tải ban đêm thấp dưới 20%, DPM thường tiết kiệm được 30–50% điện năng so với để tất cả host chạy 24/7.

