web-dev-qa-db-ja.com

1台のサーバー、2台の冗長電源のAPC UPS:シャットダウンをトリガーする方法?

サーバーをラックに搭載し、その冗長電源を2つのAPC Smart-UPS 3000 XLMに差し込みました。各UPSは2つの異なる主電源に接続されています。

Apcupsdの2つのインスタンスが実行されており、それぞれが独自のUPSに接続されています。どちらもUPSがバッテリーに接続されていることを検出でき、各UPSはサーバーのシャットダウンをトリガーできます。

質問は:1つのUPSだけがバッテリーを使い果たした場合にシャットダウンしない方法は?

注:Smart-UPS 3000 XLMには、ピアに接続してそのステータスを検出できる「電源同期」機能があります。しかし、そのうちの1つからプラグを抜くと、とにかくシャットダウン命令が送信されました。他のupsがダウンしているかどうかを「apcaccess」でチェックするようにシャットダウンスクリプトを変更することを考えています。これに関する経験をいただければ幸いです。

10
Falken

現在、2つのUPSのいずれかが停止すると、doshutdownイベントがトリガーされ、apccontrolを介してデフォルトのスクリプトが実行されます。 doshutdownスクリプトは、2番目のUPSがイベントに接続されていないため、それらを無視し、通常どおりシャットダウンを続行します。

doshutdownイベントをある程度接続するには、apcupsdの2つのインスタンスに特別にカスタマイズされた構成ファイルが必要です。違いは、イベントスクリプトを実行する必要のあるディレクトリにあります。

/etc/apcupsd/apcupsd.ups0.confの最初のアップの主なプロパティ

SCRIPTDIR /etc/apcupsd/ups0
UPSNAME ups0
DEVICE /dev/ups0
PWRFAILDIR /etc/apcupsd/ups0
NOLOGINDIR /etc/apcupsd/ups0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.0.events

そしてups1については、/etc/apcupsd/apcupsd.ups1.conf

SCRIPTDIR /etc/apcupsd/ups1
UPSNAME ups1
DEVICE /dev/ups1
PWRFAILDIR /etc/apcupsd/ups1
NOLOGINDIR /etc/apcupsd/ups1
NISPORT 3552
EVENTSFILE /var/log/apcupsd.1.events

scriptdirは、デフォルトスクリプトのコピーを取得する必要があります。
doshutdownスクリプトをカスタマイズします。このスクリプトは、マシンを直接シャットダウンしませんが、他のUPSがまだオンになっているか、シャットダウンモードになっているかを確認する必要があります。 。

doshutdownスクリプトの上部に、次のようなものを追加できます。

for ups0

if [ ! -f /tmp/ups1.is.down ]
then
  touch /tmp/ups0.is.down
  exit 99
fi

ups1の場合

if [ ! -f /tmp/ups0.is.down ]
then
  touch /tmp/ups1.is.down
  exit 99
fi

ステータス99には特別な意味があり、進行中のアクションを停止するようにapccontrolに指示します。 5行は、他のUPS-down-fileが作成されているかどうかを確認します。 noの場合、ダウンファイルはダウンしているアップに対して作成され、終了します。 yesの場合、つまり他のUPSがダウンしている場合、このUPSもダウンしているため、スクリプトを続行してマシンをシャットダウンする必要があります。

ファイル/tmp/usp[01].is.downは、ups [01]が現在ダウンしているかどうかを示します。

重要:apcupsdのinit.d開始スクリプトは、前のセッションで作成されている場合、これらのファイルを削除する必要があります。

rm -f /tmp/usp[01].is.down

最後に、上記で作成したディレクトリ/ etc/apcupsd/ups [01]には、apcupsdユーザー(またはインスタンスを実行している関連ユーザー)へのアクセス権を付与する必要があります。

chown -R apcupsd /etc/apcupsd/ups[01]

詳細なドキュメント をご覧ください。

edit/tmp/ups[01].is.downの名前を修正しましたが、.isがありませんでした。

13
Ring Ø

NUTを見てください。これをうまく処理します。各UPSからの電源の数と必要な電源の数を定義します。 UPSに十分な電源がない限り、シャットダウンはトリガーされません。

4
BillThor