【自動シャットダウンスクリプト】PowerCLIを使用してvSphereを自動シャットダウンする方法(vCSA,ESXi,仮想マシン)
こんにちは!
インフラ関連のシステムエンジニアをやっているカユラ(@kayura_SE )です。
今回は、「PowerCLIを使用してvSphereを自動シャットダウンする方法(vCSA,ESXi,仮想マシン)」について紹介したいと思います。
UPSに仮想基盤を接続して、停電などが発生したことでUPSがバッテリー稼働になったら、仮想基盤を安全に停止したいなという要件がよくあるのではないでしょうか。
今回は、vSphereを自動シャットダウン(vCSA,ESXi,仮想マシン)を実現する手段として、
「PowerCLI」を使用した”自動シャットダウンスクリプト”を紹介したいと思います。
※復旧時の「自動スタートアップスクリプト」は、別の記事で紹介します。
- 【自動シャットダウンスクリプト】PowerCLIを使用してvSphereを自動シャットダウンする方法(vCSA,ESXi,仮想マシン)
- 本記事で想定している構成
- 設計時に考慮しなければならにポイント
- 自動シャットダウンスクリプトの流れ
- スクリプトの配置
- 各機能のスクリプト内容(PowerCLI:ps1)
- まとめ(PowerCLI:ps1)
本記事で想定している構成
仮想基盤は企業ごとに様々な構成があると思いますが、「vCSA」、「ESXi」、「仮想マシン」はどこの企業でも使用しているかと思います。
今回は、流用できるように部分的な紹介も行うため、ぜひご参照ください。
設計時に考慮しなければならにポイント
自動シャットダウンの設計を行う上で考慮しなければならいないポイントは以下のとおりです。
- vSphere DRSやvSphere HAを使用しているか?
- 仮想マシンを停止する順序
- 停電してからどのくらいの時間が経過してから停止するか?
vSphere DRSやvSphere HAを使用しているか?
これが一番重要だとしても過言ではありません。
昔のシステムでは「vMA」と呼ばれる仮想アプライアンスを使用して仮想マシンをシャットダウンしていたそうです。(私は好きじゃない方法です。)
vSphere DRSやvSphere HAが動作していると運用中に仮想マシンはクラスタ内のESXi上をうろちょろして停電時にどこにいるのかが分かりません。
そのような時こそ、vMAではなくPowerCLIを使用した自動シャットダウンが本領を発揮します。
vMAのダメな理由vSphere DRSおよびvSphere HA環境での使用をサポートしていません。
仮想マシンを停止する順序
多くのシステムでは停止する仮想マシンの順序はとても重要になります。
例えば、「DNSサーバーは停止したい」、「セカンダリ→プライマリの順で停止したい」、「WEBサーバー→DBサーバーの順で停止したい」など理由を上げればキリがありません。
これも昔のシステムでよく使われていた「vMA」では出来ません。
なぜなら、「vMA」はESXiごとに専属で存在する必要があり、異なるESXi上の仮想マシンを停止したり、他の「vMA」と連携したり出来ません。
vMAのダメな理由異なるESXi上の仮想マシンの順番を意識して操作できない。
停電してからどのくらいの時間が経過してから停止するか?
これもとても重要な設計項目となります。
例えば、”3秒間停電した”事象が発生した時に、「自動シャットダウンスクリプト」が動作してしまうとUPSが存在している意味の9割が無くなってしまいます。
「自動シャットダウンスクリプト」を実行するタイミングをUPS側で設定してください。
※「自動シャットダウンに要する時間」と「UPSのみで稼働可能な時間」を元に算出ください。(UPSのバッテリーは日々劣化するため、計算に入れてくださいね。)
自動シャットダウンスクリプトの流れ
自動シャットダウンスクリプトは以下のような流れで動作します。
環境に応じてチューニングしてご使用ください。
スクリプトの配置
「.ps1」の拡張子をバックアップサーバー(物理)に配置してください。配置後はUPSより、実行出来るようにUPS側を設定してください。PowerCLIはWindowsでもLinuxでも動作します。
そもそも「PowerCLI」を使ったことが無く、事前設定から知りたい方は、別記事の「初めてPowerCLIを使用する方法」をご参照ください。
各機能のスクリプト内容(PowerCLI:ps1)
最後にスクリプトの最終形をまとめますが、各項目の内容は「Shutdown-VM.ps1」に全て記載します。
ログ取得設定、変数の宣言(IPアドレス、パスワードなど)
本項目はPowerCLI上のログ取得設定や変数の宣言の処理を記載しております。他の用途でも流用しやすいと思います。
vCSAにログインする
本項目はPowerCLI上のvCSAにログインする処理を記載しております。他の用途でも流用しやすいと思います。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
【任意】停止前の仮想マシンの稼働状態の確認
本項目はPowerCLI上の停止前の仮想マシンの稼働状態の確認処理を記載しております。
処理の証跡として活用ください。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
事前に定義した順番で仮想マシンをシャットダウン
本項目はPowerCLI上の事前に定義した順番で仮想マシンをシャットダウン処理を記載しております。
順序は同じ階層内の「Shutdown-VMlist.txt」に記載ください。(上から順番に停止です。)
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
※仮想マシンのインベントリ名を記載してください。(記載しただけ動作します)
※最終行に空行をいれないでください。
自動シャットダウンの除外定義(vCSAなどを定義)
本項目はPowerCLI上の自動シャットダウンの除外定義(vCSAなどを定義)処理を記載しております。
本項目以降は無差別に仮想マシンを停止するため、除外仮想マシンを定義します。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
※仮想マシンのインベントリ名を「,」区切りで記載してください。
その他の仮想マシンのゲストOSのシャットダウン(VMware Tools導入済み)
本項目はPowerCLI上のその他の仮想マシンのゲストOSのシャットダウン(VMware Tools導入済み)処理を記載しております。
ゲストOSのシャットダウンはVMware Toolsが必要になります。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
その他の仮想マシンのパワーオフ(VMware Tools導入無し)
本項目はPowerCLI上のその他の仮想マシンのパワーオフ(VMware Tools導入無し)処理を記載しております。
パワーオフは強制停止のため、最後の手段です。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
【任意】停止後の仮想マシンの稼働状態の確認
本項目はPowerCLI上の【任意】停止後の仮想マシンの稼働状態の確認処理を記載しております。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
【任意】停止前のESXiの稼働状態の確認
本項目はPowerCLI上の【任意】停止前のESXiの稼働状態の確認処理を記載しております。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
vCSAのシャットダウン&切断
本項目はPowerCLI上のvCSAのシャットダウン&切断処理を記載しております。他の用途でも流用しやすいと思います。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
ESXiのログイン→メンテナンスモード→シャットダウン→切断
本項目はPowerCLI上のESXiのログイン→メンテナンスモード→シャットダウン→切断処理を記載しております。
※Write-Host:ログ出力時のコメント用(英語推奨)
※Get-Date:実行時の時間を記録する用
まとめ(PowerCLI:ps1)
各フェーズがどのような動作を行っているかを把握するとPowerCLIを使うのが楽しくなってきます。
今回のスクリプトの全量は以下のとおりです。「.ps1」として保存してください。
PowerCLIを使用してvSphereを自動シャットダウンする方法。(vCSA,ESXi,仮想マシン)は以上となります。
次回は停電復旧時のスタートアップスクリプトについて説明したいと思います。
現在悩んでいる方はTwitterでご連絡ください。
私も辛い日々を経験したのであなたの助けになりたいです。
カユラ(@kayura_SE )