Erkennen, wenn ein Server mit USV-Batterie betrieben wird

24

Ich habe einen Heimserver (HP Proliant ML310 G4), den ich vor ungefähr einem Monat bei meinem Arbeitgeber gekauft habe. Auf dem Server läuft Debian Linux und ich benutze es für so ziemlich alles. Ich kann damit durchkommen, weil meine Anforderungen nicht so hoch sind und der Server zu einem bestimmten Zeitpunkt selten unter hoher Last steht. Dieser Server verfügt über ein RAID1-Array mit 2 TB (mit einem Ersatzlaufwerk), das von mdadm verwaltet wird und das ich für die gemeinsame Nutzung von Dateien über mein Netzwerk über Samba verwende. Ich starte das Betriebssystem von einer kleineren Festplatte, die nicht Teil des Arrays ist.

Ich habe den Server über eine kleine 255-Watt-USV mit Strom versorgt, da ich ihn benötige, um geringfügigen Stromschwankungen standzuhalten, ohne herunterzufahren. Dies ist sehr wichtig, da ein plötzliches, unsauberes Herunterfahren (verursacht durch einen Stromausfall oder einen Stromausfall) das RAID-Array zerstören kann, was bereits einmal vorgekommen ist.

Im Falle eines Stromausfalls schätze ich, dass die USV nur 10-15 Minuten Strom hat. Es kann mehr geben, aber ich möchte nicht automatisch davon ausgehen, dass dies der Fall ist. Dies reicht aus, um Stromausfälle zu überstehen, die einige Minuten oder weniger dauern. Wenn die Stromversorgung jedoch für mehrere Stunden unterbrochen wird, muss sich der Server ordnungsgemäß selbstständig herunterfahren, bevor die USV ausfällt. Dies verhindert hoffentlich, dass die RAID-Integrität in solchen Situationen beeinträchtigt wird.

So etwas ist bei einem Laptop einfach, da es eingebaute Sensoren hat, um festzustellen, wann es mit Batteriestrom betrieben wird, aber dieser Server nicht (soweit ich weiß). Ich habe ein ungewöhnliches Netzwerk-Setup, bei dem mein DSL-Modem von meinem Router getrennt ist. Der Router befindet sich auch in der USV, sodass ich über meinen Laptop SSH ausführen und den Server bei einem Stromausfall herunterfahren kann. Leider funktioniert das nur, wenn ich gerade dabei bin. Ich brauche eine Lösung, die immer funktioniert, ob ich da bin, um einzugreifen oder nicht.

Da mein DSL-Modem nicht an der USV angeschlossen ist, würde es bei einem Stromausfall mit allem anderen ausfallen. Ich habe es absichtlich so eingerichtet, weil ich eine Idee zur Lösung dieses Problems habe: Ich wollte ein Skript schreiben, das google.com oder eine andere Website mit hohem Datenverkehr und hoher Verfügbarkeit pingt. Wenn der Ping erfolgreich abgeschlossen wird, wird der Server weiter ausgeführt. Wenn der Ping fehlschlägt (weil das Modem ausgeschaltet ist), würde das Skript annehmen, dass die Stromversorgung ausgeschaltet ist, und den Server anweisen, herunterzufahren. Ich würde das Skript zu Cron hinzufügen und es alle 5 Minuten ausführen lassen. Das würde dem Server hoffentlich genug Zeit geben, um herunterzufahren, bevor die USV keinen Strom mehr hat.

Bevor ich mir die Mühe mache, das Skript zu schreiben, möchte ich wissen, ob es eine bessere Möglichkeit gibt, das zu tun, was ich brauche. Vielen Dank im Voraus für jede Hilfe.

Will Kraft
quelle
15
Sie sollten keine externe Site anpingen, sondern die IP Ihres DSL-Modems anpingen.
LawrenceC
1
@ultrasawblade ... klingt wie eine Antwort, riecht wie eine Antwort ... es ist eine Antwort!
Pureferret
1
Wie @ultrasawblade erwähnt, sollten Sie sich NIEMALS auf externe Quellen für ein internes Setup verlassen. Wenn beispielsweise Ihr Internet plötzlich ausfällt, verlieren Sie die Verbindung und Ihr Server fällt aus. Wenn Google.com beschließt, den Namen aus irgendeinem Grund zu ändern, fällt Ihr Server aus. Wenn Sie sie über IP anpingen und diese bestimmte Serverfarm ausfällt, fällt auch Ihr Server aus. Dies ist bei jeder externen Quelle der Fall. Sofern Sie nicht zu 100% sicher sind, dass Ihr Server NUR eingeschaltet sein darf, wenn dieser andere Server verfügbar ist, möchten Sie sich aus irgendeinem Grund nicht auf diesen anderen Server verlassen.
Nzall
Funktioniert keine dieser Antworten für Sie?
Dave

Antworten:

34

Es gibt einen alten, aber bewährten Weg: Verwenden Sie ein altes analoges Modem. Hier ist, wie

  • Verbinden Sie das Modem über die serielle Schnittstelle (z. B. ttyS0) mit dem Server.
  • Stecken Sie das Netzteil des Modems nicht in die USV, sondern direkt in die Steckdose
  • Schließen Sie KEINE Gegenstände an die Telefonleitung des Modems an

Fragen Sie das Modem nun alle paar Sekunden nach dem Senden ab ATZ[Enter]und erwarten Sie OK[Enter]- wenn das Modem nicht antwortet, können Sie davon ausgehen, dass es keinen Strom hat, was bedeutet, dass die USV im Akkubetrieb ist.

Bearbeiten

Der wichtigste Punkt ist, dass der Server nicht heruntergefahren wird, wenn Ihre Internetverbindung aus einem anderen Grund unterbrochen wird , als es sein sollte.

Bearbeiten 2

Aus den Kommentaren:

  • Natürlich sollten Sie einen Zustand von einem Scheck zum nächsten beibehalten und erst herunterfahren, nachdem N Schecks fehlgeschlagen sind. Ich habe dies nicht erwähnt, da dies für alle möglichen Prüfungen gilt, nicht nur für das Modem
  • Der Unterschied zwischen der Verwendung des Modems und der Verwendung von Gegenständen , die mit dem Netzwerk zu tun haben, besteht darin, dass die Netzwerkverbindung vorübergehend unterbrochen wird: Wenn Sie einen Switch neu starten, möchten Sie sich nicht mit "Anmeldung deaktiviert, Server auf USV" belästigen oder konfigurieren Sie ein VLAN neu. Nach meiner Erfahrung ist die serielle Leitung so robust wie es nur geht.
Eugen Rieck
quelle
1
Gute Antwort, aber ich würde vorschlagen, eine Sicherheit hinzuzufügen, die einige Male überprüft wird, bevor sie tatsächlich heruntergefahren wird. (Sie müssen also nicht während eines 5-minütigen Brown-Outs herunterfahren.) Und ich denke, ein Ping-Befehl würde auch ausreichen (nur nichts außerhalb Ihres Netzwerks).
HTDutchy
@HTDutchy Siehe meine Bearbeitung!
Eugen Rieck
Ich weiß, aber da er vielleicht keine serielle Verbindung hat oder ein altes Modem rumhängt, wäre es das nächstbeste, in der Haushardware zu pingen. und wenn der Schalter nicht mehr funktioniert, wird der Server trotzdem heruntergefahren.
HTDutchy
22

Ein USV wird normalerweise mit einem USB- oder COM1-Anschluss geliefert. Wenn Sie dies an Ihren Server anschließen, können Sie mit der Überwachung der USV beginnen.

In einer Windows-Umgebung ohne Installation der Software sind die Nachrichten bereits registriert, und der Server wird für Sie heruntergefahren. Ich weiß nicht, wie das unter Linux funktioniert, aber ich wette, es gibt einige Softwarepakete, die mit Ihrer USV verbunden werden können.

LPChip
quelle
Ich habe gerade meine USV überprüft und leider hat sie so etwas nicht. Es hat nur 8 Netzstecker (4 auf Akku und 4 ohne) und Line-In und Line-Out-Buchsen für Telefonkabel.
Will Kraft
27
Dann besorgen Sie sich eine USV, die mit dem Computer kommunizieren kann.
Ramhound
@Ramhound Das ist vielleicht keine Option, UPSs können ziemlich teuer sein und es gibt billigere Möglichkeiten.
Vality
Ich bin nicht einverstanden, dass es andere Möglichkeiten gibt, zu erkennen, dass Sie mit einer Batterie von Ups fahren, die Sie nicht einmal auf der
Ist-
1

Wenn Sie Debian verwenden, versuchen Sie, NUT (Network UPS Tools) zu verwenden. Ich verwende NUT, um genau das zu tun, was Sie auf meinem Synology NAS (der busybox ausführt) und auf einem Heim-Webserver mit Ubuntu 12.04 LTS beschreiben. Ich habe den NAS aus dem gleichen Grund wie Sie über USB an die USV angeschlossen, potenzieller Verlust aller meiner Dateien.

Ich glaube, der Nut-Daemon fragt die USV jede Sekunde nach dem Status. Wenn sich die USV im Batteriemodus befindet, kann sie so konfiguriert werden, dass sie ordnungsgemäß heruntergefahren wird oder zuerst X Minuten wartet. Sie können auch mehrere Clients für die Verbindung mit dem Nut-Daemon einrichten, den Sie auf Ihrem Server ausführen. So kann Ihr Server mehreren PCs in Ihrem Netzwerk anweisen, ordnungsgemäß herunterzufahren. Für die Ausführung des Herunterfahrens können Sie Shutdown-Diensten auf bestimmte Weise Ihr eigenes Skript zur Verfügung stellen, oder Sie können das integrierte Skript verwenden, das Shutdown -h aufruft, wenn ich mich richtig erinnere.

NUT-Website

Es gab bessere Websites, auf denen man Informationen finden konnte, aber ich kann mich derzeit nicht an sie erinnern. Die Konfiguration kann mühsam sein, aber wenn Sie über einen potenziellen RAID-Verlust sprechen, lesen Sie es nach! Abhängig von Ihren Anforderungen benötigen Sie möglicherweise nicht die gesamte NUT-Suite. Möglicherweise können Sie auch nur mit dem UPSMON-Anteil auskommen. Ich denke, das gibt es im Ubuntu-Paket "nut-client".

Es gibt auch einen NUT-Client für Windows, aber unter Windows ist es möglicherweise besser, PowerChute oder ähnliches zu verwenden.

zako42
quelle
Wie bereits erwähnt, kann die USV des OP nicht mit dem Computer kommunizieren, weder über USB noch über ein Netzwerk.