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万円。サーバやストレージのハードウェアといったシステム全体から見ればそう高くはないですがスモール環境や検証環境用途では費用を節約したいときもありますよね。
構成見積例
手順
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 apcupsdCentOS7/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時間を #伸ばしてください。作成したスクリプトで、ESXiホストが仮想マシンを正常にシャットダウンしその後ホスト自体もシャットダウンするか、実行テストします。
sleep 180 poweroff
実行テスト *スクリプトの転送 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 に公開鍵をコピー
コメント
コメントを投稿