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.
źródło
Odpowiedzi:
Istnieje stary, ale sprawdzony sposób: użyj starego modemu analogowego. Oto jak
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:
źródło
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.
źródło
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.
źródło