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


10

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

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

質問は次のとおりです。UPSが1つだけバッテリ切れになった場合、シャットダウンしないようにするにはどうすればよいですか。

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

回答:


13

現在、2つのUPSの1つが停止すると、doshutdownイベントがトリガーされ、apccontrolを介してデフォルトのスクリプトが実行されます。doshutdownの彼らはイベント-接続されていない、とシャットダウンを正常に進めるようスクリプトは、秒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スクリプトの先頭に、次のようなものを追加できます

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ダウンファイルが作成されたかどうかを確認します。あれば何も、ダウンファイルがアップダウンしている、して終了するために作成されません。はいの場合、つまり他の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]

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

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


1
通常のユーザーはtouch /tmp/ups1.is.downでサーバーを停止できます。touch /tmp/ups0.is.down:Dしたがって、たとえば/ var / runを使用することをお勧めします。ところで 誰かがソリューションをカットアンドペーストした場合、rm -f /tmp/usp[01].is.downはタイプミスです。ちなみに、電源が回復したら、apccontrolのオフバッテリのケースから/tmp/ups[01].is.downを削除する必要があります。
Harka Gyozo

1
もう1つのis.downファイルをチェックする前に、自分のis.downファイルに触れてみることをお勧めします。
Michael Kohne 2017年

4

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.