ホストの再起動後、なぜ仮想マシンを「眠らせたまま」にしてはいけないのか?
システム管理者であれば、深夜に物理サーバーが突然再起動したという通知を受け、肝を冷やした経験が一度はあるはずです。もしホストが20〜30台の仮想マシン(VM)を抱えていた場合、一台ずつログインして手動で「開始」ボタンを押していくのは、まさに苦行と言えるでしょう。
しかし、最大の懸念は手間の多さではなく、起動の順序にあります。例えば、データベース(順位1)がサービスのロード中であるにもかかわらず、Webサーバー(順位3)が先に立ち上がり接続を試みたとします。その結果、アプリケーションは即座に「500エラー」を吐き出し、画面が真っ白になってしまいます。
実プロジェクトで8台のホストクラスターを運用してきた経験から断言しますが、Autostartは不可欠な機能です。これによって、優先順位(Order)と遅延(Delay)を設定できます。データベースが先に、次にバックエンドAPI、最後にフロントエンドという流れです。これこそが、人の手を介さずにシステムを復旧させる、標準的な「自己修復(Self-healing)」プロセスなのです。
Autostartの有効化:ホストの「窒息」を防ぐ
デフォルトでは、VMwareはこの機能をオフにしています。これは、すべてのVMが一斉に起動することでIOPSが10,000を超え、ホストの起動直後にディスクの輻輳やCPUの過負荷が発生するのを防ぐためです。
設定を開始するには、以下の手順を実行します:
- ブラウザからVMware Host Clientにアクセスします。
- 左メニューの「管理(Manage)」を選択します。
- 「システム(System)」タブに移動し、「Autostart」を見つけます。
- 「設定の編集(Edit settings)」をクリックして構成を開始します。
この設定画面では、特に以下の3つの主要パラメータに注意してください:
- 開始遅延(Start delay): 私は通常120秒に設定しています。この待機時間により、前のVMがOSやバックグラウンドサービスを完全にロードしてから、次のVMが起動する余裕が生まれます。
- ハートビートを待機(Wait for heartbeat): 非常に重要です。「はい」を選択すると、ESXiはVMのVMware Toolsからの信号を確認してから次の仮想マシンを起動します。単に時間をカウントするよりも、はるかにインテリジェントな方法です。
- 停止アクション(Stop action): 「シャットダウン」を選択してください。データを安全にディスクに書き込みたい場合は、「サスペンド」は避けるべきです。
優先順位の設定:「司令塔」を最優先で起動する
全体の機能を有効にしたら、次は個々の仮想マシンに役割を割り当てます。すべてのVMを自動起動させる必要はありません。
Webインターフェースでの操作
Autostartの画面で、重要なVM(SQL Serverなど)を選択し、「構成(Configure)」をクリックします。
- Autostart: 「有効(Enabled)」に切り替えます。
- 開始順序(Start order): 数値が小さいほど優先度が高くなります。鉄則として、DBは1、Appは2、Web/LBは3と設定します。
ヒント: このリストには本番環境(Production)のVMのみを含めるべきです。開発・テスト用やバックアップ用のマシンは、システム復旧時のリソース節約のため、手動起動のままにしておくのが賢明です。
コマンド操作(自動化)を好むエンジニア向け
大量のホストを構成する必要がある場合は、SSHを使用する方がはるかに高速です。VMのリストとIDを確認するには、以下のコマンドを使用します:
vim-cmd vmsvc/getallvms
次に、現在の起動シーケンスを確認します:
vim-cmd hostsvc/autostartmanager/get_autostartseq
vCenterとHAクラスター運用における「手痛い」注意点
これは多くの人が混同しやすいポイントです。ESXiホストがvSphere HA(High Availability)を有効にしたクラスター内にある場合、ホストレベルでのAutostart設定は無効化されます。
このような環境では、vSphere HA Orchestratorが制御権を持ちます。ホストがダウンすると、HAが別のホスト上でVMを自動的に再起動します。この場合、個別のESXiで設定するのではなく、vCenterにログインして「VMオーバーライド(VM Overrides)」または「VMの開始優先順位(VM Startup Priority)」で順序を設定する必要があります。
また、すべてのVMにVMware Toolsがインストールされていることを100%確認してください。これが欠けていると、ESXiは「ハートビート」を受信できず、タイムアウトを待つためにAutostartプロセス全体が遅延してしまいます。
DevOps向けのクイック状態確認スクリンスクリプト
再起動後にVMがすべて正常に起動したかを確認し、必要に応じてTelegramにアラートを送信するための簡単なPythonコードを紹介します:
from pyVim.connect import SmartConnect
import ssl
# 自己署名証明書のSSLチェックをスキップ
scontext = ssl._create_unverified_context()
si = SmartConnect(host="192.168.1.100", user="root", pwd="password", sslContext=scontext)
for child in si.RetrieveContent().rootFolder.childEntity:
if hasattr(child, 'vmFolder'):
for vm in child.vmFolder.childEntity:
print(f"VM: {vm.name} -> Status: {vm.runtime.powerState}")
これらの実務に基づいた共有が、皆さんのシステムの円滑な運用に役立ち、物理サーバーの不調のたびに「夜通し監視」するような事態が減ることを願っています。

