VMware vSphere 6.7 をapcupsdでシャットダウン

無料でLinuxのapcupsdを使ってサクっとvSphere ESXiサーバをシャットダウンする構成を紹介します。

その前に、ふつうは VMware vSphereのホストサーバをUPS連動シャットダウンするにはAPC PCNSソフトを使ってこんな仕様で作りますよね。

  • APC PCNSソフト (PowerChure Network Shutdown for VMware)をESXiサーバ台数分のライセンス
  • APC製UPSとオプションのNetworkManagement Card 2 (AP9630J)

PCNSはアプライアンス版もあってインストール先には困らないとしても設定箇所が多くて面倒です。定価で15万円。サーバやストレージのハードウェアといったシステム全体から見ればそう高くはないですがスモール環境や検証環境用途では費用を節約したいときもありますよね。

構成見積例
品名型番標準価格(税込)
PowerChute Network Shutdown 1 Node VirtualizationSSPCNSV1J¥69,300
Network Management Card 2AP9630J¥81,070
VMware vSphere Essentials Kit
¥76,469
¥226,839

手順

vCenterサーバ不要で、無料版のESXiもUPS連動が可能です。慣れたapcupsdで使えるのが助かります。


環境:
vSphere ESXi 6.7(7.0もいけると思う)

用意するもの:
そのへんに転がっている適当なAPCのUPSと、Linux仮想マシンか適当なLinuxサーバ実機(Raspbery Piを使ってもいい)と、USBケーブルかNetworkでつなぐならNMC NetworkManagement Card 2(AP9630J/AP9631J)。旧型のNetworkManagement Card (AP9617J)も可。仮想マシンでUSBでつなぐ場合はUSBポートを「ホストの USB デバイス」でつなぎます。


手順:
1. まずLinuxサーバにapcupsdをインストールします。debianやraspbery piのraspbianなら

apt install apcupsd
CentOS7/8なら
yum install apcupsd

2. ESXiサーバで sshサービスを有効化します。ESXi6.5/6.7で
ホスト→サービス →TSM-SSH を右クリックしてポリシー→ホストと連動して起動及び停止します

3. SSHでLinuxサーバからESXiサーバにパスワード無しsshログインできるようにします。
Linuxで以下の操作をします。

公開鍵を作成
sudo -s
ssh-keygen

シャットダウンしたいESXiサーバホストに公開鍵をコピー
cat /root/.ssh/id_rsa.pub | ssh root@ESXiサーバホストのIPアドレス "cat >> /etc/ssh/keys-root/authorized_keys"
ssh -l root ESXiサーバホストのIPアドレスでLinuxサーバからESXiホストにパスワード無しでログインできることを確認します。

4. ESXiシャットダウンスクリプトを Linuxサーバに作成します。
もう一度念を押します。Linuxサーバで作成します。というのはESXiホストに自作のシェルスクリプトを置いても再起動時に勝手に置いたファイルは消去されるからです。 (データストアは別ですが)
シャットダウン実行時には、このスクリプトを毎回ESXiにコピーして実行することにします。

SANYO-DENKIが公開しているPDFのmyshutdown.shスクリプトに2行追加しています。
https://sanups.sanyodenki.us/wp-content/uploads/2017/12/JP_PS-40175VMwareESXi6.0_shut_down_PRLANIF003.pdf
P18

/etc/apcupsd/myshutdown.sh
#!/bin/sh
for VMID in $(vim-cmd vmsvc/getallvms |awk '/^[0-9]/ {print $1}');
do
	isalive=$(vim-cmd vmsvc/power.getstate ${VMID})
	val=$(echo $isalive | sed -e "s/Retrieved runtime info Powered //")
	if [ $val = "on" ]; then
		$(vim-cmd vmsvc/power.shutdown ${VMID})
	fi
done

#ここまでで動作中の仮想マシンすべてがシャットダウンされます。
#以下付け足します。
#poweroff コマンドはESXiの標準コマンドでESXiサーバ自身をシャットダウンするコマンドです。
#当然ですがESXiサーバ自身のシャットダウン時にはESXi上で「自動起動・自動停止」を設定して
#ある仮想マシンも適切にシャットダウンされますが、「自動起動・自動停止」設定していない
#仮想マシンは突然の電源断となります。
#それで上記のスクリプトが必要になってくるわけです。

#仮想マシンのシャットダウンに時間のかかるものがある場合はsleep時間を
#伸ばしてください。
sleep 180 poweroff
作成したスクリプトで、ESXiホストが仮想マシンを正常にシャットダウンしその後ホスト自体もシャットダウンするか、実行テストします。

実行テスト
*スクリプトの転送
scp myshutdown.sh root@ESXiサーバホストのIPアドレス:/

*実行権を与えます 
ssh ESXiサーバホストのIPアドレス -l root chmod +x /myshutdown.sh

*実行テスト(nohupと最後の& はSSH接続が切れても実行するため)
ssh ESXiサーバホストのIPアドレス -l root nohup /myshutdown.sh &

上手く動作したらapcupsdに連動させます。

5. Linuxサーバで/etc/apcupsd/apcupsd.confを確認します。
デフォルトはTIMEOUT=0でバッテリーがある限り動作を続けようとするので、適当な時間TIMEOUT 300や600などを設定するとバッテリーに優しい。

・Linux実機とUSBケーブル接続の場合 32行目と169行目付近
UPSCABLE usb
TIMEOUT 300
・Linux仮想マシンとNMC AP9630Jのネットワーク接続の場合 32行目と89行目と169行目付近。AP9630JのIPアドレスをここに書きます。「admin user phrase」というのはpcnetプロトコル時のAP9630Jカードのデフォルト認証フレーズなので変えないでこのまま記述します。SNMPプロトコルのデフォルトも「public」。ほか例では192.168.1.10になっていますがそれぞれの環境に応じて変更してください。
(pcnetプロトコル)
UPSCABLE ether
UPSTYPE pcnet
DEVICE 192.168.1.10:apc:admin user phrase
TIMEOUT 300
とするか
(SNMP)
UPSCABLE ether
UPSTYPE snmp
DEVICE 192.168.1.10:161:APC:public
TIMEOUT 300
のどちらでも好みな方で。pcnetプロトコルかSNMPかの違いだけで大差は無いです。apcaccessで取得できる内容が少し違うくらい。apcaccessを実行して正常にUPSを認識していることを確認します。

6. /etc/apcupsd/apccontrol の109行目付近に3行追加します。
    doshutdown)
	echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
	scp /etc/apcupsd/myshutdown.sh root@ESXiホストのIPアドレス:/
	ssh ESXiホストのIPアドレス -l root chmod +x /myshutdown.sh
	ssh ESXiホストのIPアドレス -l root nohup /myshutdown.sh &
	${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
    ;;

ESXiホストが複数台ある場合この追加する3行を、台数分だけ増やします。
UPSの電源ケーブルを抜いて、ESXiホストがシャットダウンすればOKです。
忘れずにapcupsdを動かすLinuxが仮想マシンの場合は、ESXi上で自動起動の設定をします。せっかく設定しても動かすのを忘れるとだめですから。

今回、起動中の仮想マシンをシャットダウンするためのスクリプトを使いましたが、ESXiの標準コマンド poweroff を実行するだけでもESXiは自身で自動起動自動停止を設定した仮想マシンのシャットダウンなら処理します。それで十分ならスクリプト不要かつ、apccontrolの修正は3行追加ではなく

ssh ESXiホストのIPアドレス -l root poeweroff
の1行でOKです。


記事参考
SANYO-DENKI
https://sanups.sanyodenki.us/wp-content/uploads/2017/12/JP_PS-40175VMwareESXi6.0_shut_down_PRLANIF003.pdf
  P18 実行中の仮想マシンをシャットダウンさせるスクリプト

apcupsdでコマンド実行する方法
https://ameblo.jp/emuame/entry-10938589125.html
  記事はESXi4.1の環境で、ESXi6.7ではいろいろ変わっているのですが考え方は参考になりました。

ESXiをシャットダウンする方法
https://aose.hatenablog.jp/entry/20160813/1471177300
  esxiホストはpoweroffコマンドで実行中の仮想マシンとともにシャットダウンできると紹介。ただナカノがESXi6.7で検証すると、自動起動自動停止設定をしている仮想マシンのみシャットダウンし、設定していない動作中の仮想マシンのシャットダウンはしてくれませんでした。

ESXiにパスワード無しsshログインする方法
http://sig9.hatenablog.com/entry/2015/05/27/185218
  /etc/ssh/keys-root/authorized_keys に公開鍵をコピー


コメント

このブログの人気の投稿

OfficeのISOダウンロード直リンク

FortiGateシリーズ 40F/50E/60E/60F/80F/90E/100E/100F/200FのCPU

ネクストのIPv6網内折り返し通信で高速VPN