背景:電気代は嵩むのにサーバーは遊んでいる
ESXiホストのクラスターをデータセンター環境で管理しているなら、こんな光景を見たことがあるはずです。深夜3時、8台のサーバーがすべてフル稼働しているのに、クラスター全体のCPU負荷はたった15%。電力は消費され続け、ファンは回り続け、電気代は積み上がっていく——リソースの大半はまったく使われていないのに。
Distributed Power Management(DPM)は、vSphereがこの問題を解決するために用意した機能です。負荷が低いときにVMをより少数のサーバーに集約してマイグレーションし、空になったサーバーの電源を自動的に落とします。負荷が再び上がってきたら、クラスターが過負荷になる前にWake-on-LANまたはIPMIでスタンバイホストを起動します。
以前、個人ラボをVMwareからProxmoxに移行したことがあります。その際、ProxmoxにはvSphereのようにDPMに相当する機能が統合されていないことに気づきました。Proxmoxで同じことをやろうとすると、外部スクリプトを自作してProxmox APIとIPMIツールを組み合わせる必要があり、かなり手間がかかります。これはDPMがVMwareエンタープライズの強みであることを示しており、特にホストが4台以上あって電力コストが無視できない場合に真価を発揮します。
DPMの仕組み
DPMはDRS(Distributed Resource Scheduler)に依存しているため、DRSを先に有効にする必要があります。動作の流れ:
- DRSはクラスター全体のCPUとRAMを常時監視します
- クラスターがアイドル状態(設定したしきい値以下)になると、DRSは一部のホストからVMをマイグレーションします
- DPMは空になったホストをシャットダウンします(VMware Toolsによるグレースフルシャットダウン)
- 負荷が上がり、現在のホストがほぼ満杯になったら、DPMはWake-on-LANまたはIPMI/iLOでスタンバイサーバーを起動します
- ホストが起動してクラスターに参加したら、DRSがVMをマイグレーションして負荷を分散します
前提条件
サーバーは以下のウェイクアップ方式のうち少なくとも1つをサポートしている必要があります:
- Wake-on-LAN(WoL):最も一般的。WoL対応NICと、管理ネットワークと同一サブネット上のレイヤー2スイッチが必要
- IPMI/BMC:アウトオブバンド管理経由。OSに依存しないためWoLより信頼性が高い
- iLO(HP)、iDRAC(Dell)、CIMC(Cisco):ベンダー固有のIPMI実装
また、vCenter Server(スタンドアロンESXiでは使用不可)、クラスターに最低2台のESXiホスト、そしてDRSがAutomaticまたはPartially Automatedモードで有効になっていることが必須です。
設定前の確認事項
設定を行う前に、ホストがウェイクアッププロトコルをサポートしているか確認する必要があります。PowerCLIで素早くチェックできます:
# vCenterに接続
Connect-VIServer -Server "vcenter.lab.local" -User "[email protected]"
# クラスター内の各ホストのDPMウェイクアップ機能を確認
$cluster = Get-Cluster -Name "Production-Cluster"
foreach ($vmhost in ($cluster | Get-VMHost)) {
$config = $vmhost.ExtensionData.Config.PowerSystemCapability
Write-Host "$($vmhost.Name): WakeOnLan=$($config.WakeOnLanCapable)"
}
WakeOnLanCapable = Trueの場合、ホストはWoLをサポートしています。次にDRSの状態を確認します:
# DRSが有効になっているか確認
$cluster = Get-Cluster -Name "Production-Cluster"
Write-Host "DRS Enabled: $($cluster.DrsEnabled)"
Write-Host "DRS Mode: $($cluster.DrsAutomationLevel)"
DRSはFullyAutomatedまたはPartiallyAutomatedである必要があります。まだ有効でない場合は、DPMを設定する前にDRSを有効にしてください。
DPMの設定手順
ステップ1:DRSを有効にする(まだの場合)
vSphere Clientで:
- Cluster → Configure → vSphere DRSに移動
- Editをクリック
- Turn ON vSphere DRSを有効化
- Automation Level: Fully Automatedを選択
- 保存
ステップ2:DPMを有効にして自動化レベルを設定する
DRSが有効になったら、Cluster → Configure → vSphere DPMに移動し、Editをクリックして自動化レベルを選択します:
- Off:DPMを完全に無効化
- Manual:DPMが推奨アクションを提示し、管理者が実行するかどうかを決定
- Automatic:DPMが介入なしに自動でホストの電源を制御
本番環境では、まずManualで数週間監視してからAutomaticに切り替えることをお勧めします。理由:ピーク時間帯や、VMがシビアなワークロードを処理中にDPMがホストをシャットダウンしないことを確認するためです。
ステップ3:DPMしきい値を調整する
DPM設定には1〜5のDPM Thresholdスライダーがあります:
- 1(Conservative):クラスターが本当に余裕があるときだけシャットダウン——最も安全だが節電効果は少ない
- 3(Moderate):節電と安全性のバランス
- 5(Aggressive):積極的にホストをシャットダウン、節電効果は高いがホストの起動頻度が増える
本番環境での推奨:テスト段階ではレベル2、DPMの動作に慣れてきたらレベル3に引き上げる。レベル1はほとんど何もしない。レベル4〜5は負荷が中程度でもホストがシャットダウンされる可能性がある。
ステップ4:ホストのIPMI設定(アウトオブバンドの場合)
サーバーがWoLの代わりにIPMI/iLOを使用する場合、各ホストのBMC情報を設定する必要があります:
# PowerCLIでホストのIPMIを設定
$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)"
設定後、vCenterはIPMI接続をテストし、Host → Configure → Power Managementセクションにステータスを表示します。
ステップ5:重要なホストをDPMから除外する
すべてのホストを同様にシャットダウンすべきではありません。vCenter、管理VM、または重要なインフラを実行しているホストは、DPMが自動的にシャットダウンしないようにオーバーライドを設定する必要があります:
# 特定のホストのDPMをオーバーライド——提案のみ、自動シャットダウンなし
$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" # クラスター設定をオーバーライド:提案のみ、自動制御なし
$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"
確認とモニタリング
vSphere ClientでのDPM推奨事項の確認
DPMをManualモードで有効にしたら、Cluster → Monitor → vSphere DPMに移動して現在の推奨事項リストを確認できます。各推奨事項には、シャットダウンが提案されているホスト、VMの移行先、そしてDPMがその判断を下した理由が表示されます。
PowerCLIでの確認
# スタンバイ状態のホストを確認(DPMによりシャットダウン済み)
$cluster = Get-Cluster -Name "Production-Cluster"
Get-VMHost -Location $cluster |
Select-Object Name, ConnectionState, PowerState |
Format-Table -AutoSize
# 過去7日間のDPMイベント履歴を確認
$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
}
}
実運用での注意点
- 起動時間:DPMがホストを起動する際、ブートが完了してVMを受け入れられる状態になるまで3〜10分かかります。クラスターが過負荷になる前にホストが間に合うよう、DPMしきい値を「早め」に設定してください——これがレベル5を選ばない理由です。
- DPMとHA Admission Control:この2つの機能は互いに影響します。HAがキャパシティの予約を必要とする場合、DPMはHAポリシーに違反するレベルまでホストをシャットダウンしません——これは設計上の正しい動作であり、バグではありません。
- ピーク時間帯:クラスターの負荷パターンが明確な場合(例:月〜金の8:00〜20:00はホストをシャットダウンしない)、DPMスケジュール除外の設定を検討してください。
- WoLのネットワーク要件:Wake-on-LANのマジックパケットはレイヤー2を通過する必要があります。つまり、vCenterとホストは同じ管理サブネットに存在する必要があります。異なるサブネットの場合はIPMIを使用するしかありません。
数週間Manualモードで運用して推奨事項を観察し、DPMがピーク時間帯にホストをシャットダウンせず、クラスターが逼迫しているときもVMのパフォーマンスが低下しないことを確認できたら、Automaticに切り替えましょう。夜間の負荷が20%以下の8台構成では、DPMによって24時間365日全台稼働と比べて電力を30〜50%削減できることが多いです。

