vSphere4環境でAPC製UPSと連携を行うために必要なことまとめ

<環境>

  • UPS APC Smart-UPS
  • ESX vSphere4

<必要な手順>

  1. ESX側にPCNSをインストールする
  2. UPSにESX(PCNS)を登録する
  3. ESXに稼働中のゲストOSをシャットダウンするスクリプトを設置する
  4. PCNSのシャットダウン時に実行されるスクリプトに先のスクリプトを指定する
    <以下格闘の記録>

非HA環境の場合は、ESXのシャットダウン時にゲストOSは連動してシャットダウンされるが、HA環境の場合、ESXの停止がUPSからのシャットダウンなのかホスト障害による停止なのか判別がつかずもう一方のESXにゲストOSをHAしてしまう。

それを回避するため、UPS交換からのシャットダウン指示の場合は、稼働中のゲストOSをシャットダウンしESXを停止するような設定(スクリプト)が必要となる。

現在のところ、PCNSのv2.2.4(最新版)はvSphereのESX,ESXiの 4.0.0 update 1までの対応。ESX,ESXi 4.0.0 update2及び、最新のESX,ESXi 4.1には未対応。

2010/11/02追記

上記の取り消し部分について追記。

2010/10/29付の対応OS表によると4.1および4.0.0 update2に対応したとのこと。ESX、ESXi双方が対応。しかもESXi向けにVIMA用カスタムインストールスクリプトまで用意された。時間が無いので未検証だが、これで一応ESXiでもPCNSが利用出来ることになった。

ここで、ESXとESXiの場合の設定が異なることについてメモ。

ESXにはServiceConsole(COS)があるので、そこにPCNS(ESX版)をインストールする。ESXiにはCOSがないのでVIMA(vMA)という仮想アプライアンスを稼働させ、そこにPCNS(ESXi版)をインストールする。

つまりUPSからのシャットダウンシグナルを前者は直接ESXが受け取り、後者ではVIMA(vMA)が受け取ることになる。

シグナル受信後の振る舞いはPCNSの設定に依存する。通常はShutdown Configurationでシャットダウン時に実行するスクリプトを指定し、Configuration EventsでOn Battery等のイベント時にシャットダウンするよう設定しておく。

設定するスクリプトについてはAPCがサンプルをWEBに公開しているが、一部修正しないと動かなかった。

情報共有のために書いておく。

stopVMs.pl : ESX Server上で稼動しているゲストOSを確認しShutdownを行う。
——
#
# stop running VMs
#
$vmwarecmd = "/usr/bin/vmware-cmd";
# enumerate all VMs
@configs = `$vmwarecmd -l`;
chomp(@configs);
# stop VM if its running
foreach $config (@configs) {
$isalive = `$vmwarecmd "$config" getstate`;
chomp($isalive);
if ($isalive =~ /=.on/) {
print "Stopping $confign";
$retval = `$vmwarecmd "$config" stop`;

$retval = `$vmwarecmd "$config" stop soft`;

}
}
——
stopHAs.sh : stopVMsの呼び出し用シェルスクリプト。
——
/usr/bin/perl /usr/local/bin/PowerChute/stopVMs.pl

——

vmware-cmdの仮想マシンの停止を行うコマンドで、stop soft(=シャットダウン)するように明示しないといけない模様。

stopHAs.shをPCNSのShutdown Scriptで指定してやれば、UPSからの信号受信時にスクリプトが実行され稼働中のゲストOSが停止する。

動作確認がとれているのはESXのみだが、同様の理屈でESXi(VIMA(vMA))でも稼働するはず…なのだが、VIMA(vMA)がUPSからのシャットダウン信号を受信してもシャットダウンがかからない、という状況。

結果的にはESXiでの実装を諦め、ESXでの実装に切替えた。

VMware、及びAPCから正式なドキュメントが出ていない状況なので、しばらくESXiの実装は避けようと思う。