Wykrywanie, kiedy serwer działa na baterii UPS

24

Mam serwer domowy (HP Proliant ML310 G4), który kupiłem od mojego pracodawcy mniej więcej miesiąc temu. Na serwerze działa Debian Linux i używam go do wszystkiego. Mogę to zrobić, ponieważ moje potrzeby nie są tak wymagające, więc serwer rzadko jest obciążony w danym momencie. Ten serwer ma macierz RAID1 2 TB (z jednym hot spare) zarządzanym przez mdadm, którego używam do udostępniania plików w mojej sieci za pośrednictwem Samby. Korzystam z systemu operacyjnego na mniejszym dysku twardym, który nie jest częścią tablicy.

Serwer jest zasilany przez mały zasilacz UPS o mocy 255 W, ponieważ muszę go wytrzymać bez większych wahań zasilania. Jest to bardzo ważne, ponieważ nagłe nieczyste wyłączenie (spowodowane spadkiem lub zanikiem zasilania) może zepsuć macierz RAID, co zdarzyło się już kiedyś.

W przypadku awarii zasilania szacuję, że zasilacz UPS ma tylko 10-15 minut mocy. Może być ich więcej, ale nie chcę automatycznie zakładać, że jest. To wystarczy, aby przejść przez przerwy w dostawie energii trwające kilka minut lub krócej. Jeśli jednak zasilanie zostanie wyłączone na kilka godzin, serwer musi się automatycznie wyłączyć automatycznie przed awarią zasilania UPS. Miejmy nadzieję, że w takich sytuacjach powstrzyma się integralność macierzy RAID.

Tego rodzaju rzeczy są łatwe na laptopie, ponieważ mają wbudowane czujniki, aby określić, kiedy działa na zasilaniu bateryjnym, ale ten serwer nie (o ile wiem). Mam nietypową konfigurację sieci, w której mój modem DSL jest oddzielony od routera. Router znajduje się również na zasilaczu UPS, co pozwala mi na SSH przez mój laptop i wyłączenie serwera w przypadku awarii zasilania. Niestety działa to tylko wtedy, gdy jestem tam, aby to zrobić. Potrzebuję rozwiązania, które zawsze działa, niezależnie od tego, czy jestem tam, aby interweniować, czy nie.

Ponieważ mojego modemu DSL nie ma na zasilaczu UPS, zepsuje się ze wszystkim innym, jeśli nastąpi awaria zasilania. Tak to skonfigurowałem, ponieważ mam pomysł, jak rozwiązać ten problem: myślałem o napisaniu skryptu, który mógłby pingować google.com lub inną witrynę o dużym ruchu / wysokiej dostępności. Jeśli polecenie ping zakończy się pomyślnie, serwer będzie nadal działać. Jeśli ping nie powiedzie się (ponieważ modem jest wyłączony), skrypt pomyśli, że zasilanie jest wyłączone i nakazałby serwerowi wyłączenie. Dodałbym skrypt do Crona i uruchamiałby go co 5 minut. Miejmy nadzieję, że dałoby to serwerowi wystarczająco dużo czasu na zamknięcie się, zanim UPS się wyczerpie.

Zanim zacznę pisać scenariusz, chciałbym wiedzieć, czy istnieje lepszy sposób na zrobienie tego, czego potrzebuję. Z góry dziękuję za wszelką pomoc.

Will Kraft
źródło
15
Nie należy pingować zewnętrznego serwisu, ale pingować adres IP modemu DSL.
LawrenceC
1
@ultrasawblade ... brzmi jak odpowiedź, pachnie jak odpowiedź ... to jest odpowiedź!
Pureferret,
1
Jak wspomniało @ultrasawblade, NIGDY nie należy polegać na źródłach zewnętrznych do wewnętrznej konfiguracji. Na przykład, jeśli twój Internet nagle zawiedzie, utracisz łączność i serwer przestanie działać. Jeśli Google.com z jakiegokolwiek powodu zdecyduje się zmienić nazwę, serwer nie działa. Jeśli wykonasz polecenie ping za pomocą adresu IP, a konkretna farma serwerów ulegnie awarii, Twój serwer również ulegnie awarii. tak jest w przypadku dowolnego zewnętrznego źródła. O ile nie masz 100% pewności, że twój serwer MUSI być włączony TYLKO wtedy, gdy ten inny serwer jest dostępny, nie chcesz polegać na tym innym serwerze z jakiegokolwiek powodu.
Nzall
Czy żadna z tych odpowiedzi Ci nie odpowiada?
Dave

Odpowiedzi:

34

Istnieje stary, ale sprawdzony sposób: użyj starego modemu analogowego. Oto jak

  • Podłącz modem do serwera przez port szeregowy (np. TtyS0)
  • Podłącz zasilacz modemu nie do UPS, ale bezpośrednio do sieci
  • NIE podłączaj niczego do linii telefonicznej modemu

Teraz odpytuj modem co kilka sekund wysyłając ATZ[Enter]i spodziewaj się OK[Enter]- jeśli modem nie odbierze, możesz założyć, że nie ma zasilania, co oznacza, że ​​UPS jest na baterii.

Edytować

Najważniejsze jest to, że jeśli połączenie internetowe zostanie przerwane z innego powodu, serwer nie zostanie zamknięty tak, jak powinien.

Edytuj 2

Z komentarzy:

  • Oczywiście powinieneś zachować pewien stan od jednego czeku do drugiego, wyłączając się dopiero po nieudanej kontroli N. Nie wspomniałem o tym, ponieważ dotyczy to wszystkich możliwych kontroli, nie tylko modemu
  • Różnica między używaniem modemu a używaniem czegokolwiek , co ma związek z siecią, polega na tym, że nastąpi przejściowa utrata łączności sieciowej: nie chcesz się przejmować „Logowanie wyłączone, serwer na USV”, jeśli uruchomisz ponownie przełącznik lub ponownie skonfiguruj sieć VLAN. Z mojego doświadczenia wynika, że ​​linia szeregowa jest tak solidna, jak to tylko możliwe.
Eugen Rieck
źródło
1
Dobra odpowiedź, ale sugeruję dodanie bezpieczeństwa, w którym sprawdza się kilka razy, zanim faktycznie się wyłączy. (abyś nie musiał się wyłączać podczas 5-minutowej przerwy w pracy). I myślę, że pingowanie przełącznika byłoby wystarczające (po prostu nic poza siecią).
HTDutchy,
@HTDutchy Zobacz moją edycję!
Eugen Rieck,
Wiem, ale ponieważ mógł nie mieć połączenia szeregowego lub starego modemu wiszącego wokół pingowania w sprzęcie domowym, byłoby najlepszą rzeczą. a jeśli przełącznik przestanie działać, serwer i tak się pojawi.
HTDutchy,
22

UPS zwykle ma złącze USB lub COM1. Po podłączeniu tego do serwera możesz rozpocząć monitorowanie zasilacza UPS.

W środowisku systemu Windows, bez instalowania oprogramowania, wiadomości są już zarejestrowane i spowoduje to wyłączenie serwera. Nie wiem, jak to działa na Linuksie, ale założę się, że jest kilka pakietów oprogramowania dostępnych do połączenia z twoim UPS.

LPChip
źródło
Właśnie sprawdziłem UPS i niestety nie ma czegoś takiego. Ma tylko 8 wtyczek zasilania (4 na akumulatorze i 4 bez) oraz gniazda wejścia i wyjścia dla przewodów telefonicznych.
Will Kraft
27
Następnie zdobądź UPS, który może komunikować się z komputerem.
Ramhound
@Ramhound To może nie być opcja, UPS-y mogą być dość drogie i istnieją tańsze sposoby.
Rzeczywistość
Nie zgadzam się, że istnieją inne sposoby na wykrycie, że korzystasz z baterii ups, których nie możesz nawet wykryć na poziomie podstawowym
Ramhound
1

Jeśli korzystasz z Debiana, spróbuj użyć NUT (sieciowe narzędzia UPS). Używam NUT do robienia dokładnie tego, co opisujesz na moim Synology NAS (który jest zajęty) i na domowym serwerze internetowym z systemem Ubuntu 12.04 LTS. Mam NAS podłączony do UPS przez USB z tego samego powodu co Ty, potencjalna utrata wszystkich moich plików.

Wierzę, że demon orzechów co sekundę wysyła zapytanie do UPS, aby ustalić status. Kiedy UPS znajduje się w trybie bateryjnym, można go skonfigurować tak, aby z wdziękiem wyłączał się lub czekał najpierw przez X minut itp. Można również skonfigurować wielu klientów, aby byli podłączeni do demona orzechowego, który uruchamiasz na serwerze. Dzięki temu Twój serwer może nakazać wielu komputerom w sieci, aby zamknęły się również z wdziękiem. Aby wykonać zamknięcie, możesz podać własny skrypt do usług zamykania w określony sposób lub użyć wbudowanego skryptu, który po prostu wywołuje zamknięcie -h, jeśli dobrze pamiętam.

Strona internetowa NUT

Były lepsze strony do wyszukiwania informacji, ale teraz ich nie pamiętam. Konfiguracja może być uciążliwa, ale jeśli mówisz o potencjalnej utracie RAID, sprawdź to! W zależności od potrzeb możesz nie potrzebować całego pakietu NUT, możesz poradzić sobie tylko z częścią UPSMON. Myślę, że możesz to uzyskać w pakiecie Ubuntu „nut-client”.

Istnieje również klient NUT dla systemu Windows, ale w systemie Windows lepiej byłoby użyć czegoś takiego jak PowerChute lub coś podobnego.

zako42
źródło
Jak wspomniano wcześniej, wygląda na to, że UPS OP nie ma żadnego sposobu komunikacji z komputerem, ani USB, ani sieci.