web-dev-qa-db-ja.com

サーバーがUPSバッテリーで実行されていることを検出する

1か月ほど前に雇用主から購入したホームサーバー(HP Proliant ML310 G4)を持っています。サーバーはDebian Linuxを実行しており、私はそれをほぼすべてに使用しています。私のニーズはそれほど要求が厳しくなく、サーバーに常に大きな負荷がかかることはめったにないので、これをやめることができます。このサーバーには、2 TB RAID1アレイ(ホットスペアが1つ)があり、Sambaを介してネットワーク経由でファイル共有に使用するmdadmによって管理されています。配列の一部ではありません。

サーバーは、ダウンすることなく小さな電力変動に耐える必要があるため、小さな255ワットのUPSを介して電力を供給しています。これは非常に重要です。突然の汚れたシャットダウン(電源の低下または停電によって引き起こされる)がRAIDアレイを台無しにする可能性があるためです。これは、すでに1回発生しています。

停電が発生した場合、UPSには10〜15分の電力しかないと推定しています。もっとあるかもしれませんが、私は自動的にあると思いたくありません。これは、数分以下の停電を回避するのに十分です。ただし、電源が数時間ダウンしている場合は、UPSの電源が故障する前に、サーバーが自動的に適切にシャットダウンする必要があります。これにより、これらの状況でRAIDの整合性が損なわれるのを防ぐことができます。

この種のことは、バッテリー電源で実行されているかどうかを判断するセンサーが組み込まれているラップトップb/cでは簡単ですが、このサーバーは(私が知る限り)そうではありません。 DSLモデムがルーターから分離されているという異常なネットワーク設定があります。ルーターはUPSにもあり、電源障害が発生した場合はラップトップからSSHで接続し、サーバーをシャットダウンできます。残念ながら、これは私がその時にそこにいる場合にのみ機能します。介入するかどうかに関係なく、常に機能するソリューションが必要です。

私のDSLモデムはUPSにないので、電源が落ちると他のすべてのモデムがダウンします。この問題を解決する方法がわかったので、意図的にそのように設定しました。google.comやその他のトラフィックが多い/可用性の高いサイトにpingを送信するスクリプトを作成することを考えていました。 pingが正常に完了すると、サーバーは実行を継続します。 pingが失敗した場合(モデムがオフになっているため)、スクリプトは電源がオフであると判断し、サーバーにシャットダウンするように指示します。スクリプトをCronに追加し、5分ごとに実行します。これにより、UPSの電力がなくなる前にサーバーをシャットダウンするのに十分な時間が与えられることを願っています。

スクリプトを書く手間をかける前に、必要なことを行うためのより良い方法があるかどうかを知りたいと思います。助けてくれてありがとう。

24
Will Kraft

古いが実績のある方法があります。古いアナログモデムを使用します。ここに方法があります

  • シリアルポート(例:ttyS0)経由でモデムをサーバーに接続します。
  • モデムの電源をUPSに接続するのではなく、主電源に直接接続します
  • モデムの電話回線には何も接続しないでください

ここで、数秒ごとにモデムをポーリングしてATZ[Enter]を送信し、OK[Enter]を期待します。モデムが応答しない場合は、電源がない、つまりUPSがバッテリーに接続されていると見なすことができます。

編集

重要な点は、インターネット接続が他の理由で切断された場合、サーバーはnotシャットダウンするはずです。

編集2

コメントから:

  • もちろん、あるチェックから次のチェックまでいくつかの状態を維持し、N個のチェックが失敗した後にのみシャットダウンする必要があります。モデムだけでなく、考えられるすべてのチェックに当てはまるので、これについては触れませんでした。
  • モデムの使用とネットワークに関係するanythingの使用の違いは、ネットワーク接続の一時的な損失が発生することです。「ログインが無効です。USV上のサーバー」に煩わされることはありません。 "、スイッチを再起動するか、VLANを再構成する場合。私の経験では、シリアルラインは可能な限り堅牢です。
34
Eugen Rieck

Upsには通常、USBまたはCOM1コネクタが付属しています。これをサーバーに接続すると、UPSの監視を開始できます。

Windows環境では、ソフトウェアをインストールせずに、メッセージはすでに登録されており、サーバーをシャットダウンします。これがLinuxでどのように機能するかはわかりませんが、UPSとのインターフェースに使用できるソフトウェアパッケージがいくつかあると思います。

22
LPChip

Debianを使用している場合は、NUT(ネットワークUPSツール)の使用を検討してみてください。 Synology NAS(busyboxを実行))とUbuntu 12.04 LTSを実行しているホームウェブサーバーで正確にNUTを使用します。NASあなたと同じ理由でUSB経由でUPSに接続すると、すべてのファイルが失われる可能性があります。

ナットデーモンは毎秒UPSにクエリを送信してステータスを判断すると思います。 UPSがバッテリーモードの場合、正常にシャットダウンするか、最初にX分間待機するように構成できます。サーバーで実行しているnutデーモンに接続するように複数のクライアントを設定することもできます。そのため、サーバーはネットワーク上の複数のPCに正常にシャットダウンするように指示することもできます。シャットダウンの実行については、特定の方法でサービスをシャットダウンするための独自のスクリプトを提供するか、正しく思い出せば、shutdown-hを呼び出すだけの組み込みスクリプトを使用できます。

NUTウェブサイト

情報を見つけるためのより良いサイトがありましたが、私は今それらを思い出せません。構成は面倒な場合がありますが、RAIDが失われる可能性について話している場合は、それを確認してください。必要に応じて、NUTスイート全体を必要としない場合もあり、UPSMON部分だけで問題を解決できる場合もあります。これはUbuntuパッケージ「nut-client」で入手できると思います。

Windows用のNUTクライアントもありますが、Windowsでは、PowerChuteなどを使用した方がよい場合があります。

1
zako42