Rilevamento quando un server è in esecuzione su una batteria UPS


24

Ho un server di casa (HP Proliant ML310 G4) che ho acquistato dal mio datore di lavoro circa un mese fa. Il server esegue Debian Linux e lo uso praticamente per tutto. Posso farcela perché le mie esigenze non sono così esigenti, quindi il server è raramente sottoposto a carichi pesanti in qualsiasi momento. Questo server ha un array RAID1 da 2 TB (con un hot spare) gestito da mdadm che utilizzo per la condivisione di file sulla mia rete tramite Samba. Sto eseguendo il sistema operativo da un disco rigido più piccolo che non fa parte dell'array.

Ho il server alimentato da un piccolo UPS da 255 watt perché ne ho bisogno per resistere a piccole fluttuazioni di potenza senza scendere. Questo è molto importante perché un arresto improvviso e impuro (causato da un'interruzione di corrente o blackout) può rovinare l'array RAID, cosa che è già avvenuta in un'occasione.

In caso di mancanza di corrente, sto stimando che l'UPS abbia solo 10-15 minuti di alimentazione. Potrebbero essercene di più ma non voglio presumere automaticamente che ci sia. Questo è sufficiente per superare i blackout che durano pochi minuti o meno. Tuttavia, se l'alimentazione viene interrotta per diverse ore, è necessario che il server si spenga automaticamente correttamente prima che l'alimentazione dell'UPS si interrompa. Si spera che ciò mantenga l'integrità del RAID non venir meno in quelle situazioni.

Questo genere di cose è facile su un laptop b / c ha sensori integrati per determinare quando funziona a batteria, ma questo server non lo fa (per quanto ne so). Ho una configurazione di rete insolita in cui il mio modem DSL è separato dal mio router. Il router si trova anche sull'UPS, il che mi consente di accedere a SSH tramite il mio laptop e di spegnere il server in caso di mancanza di corrente. Sfortunatamente, questo funziona solo se sono lì al momento per farlo. Ho bisogno di una soluzione che funzioni sempre sia che io sia lì per intervenire o meno.

Dal momento che il mio modem DSL non è sull'UPS, andrebbe giù con tutto il resto se l'alimentazione si interrompe. L'ho impostato deliberatamente in quel modo perché ho un'idea di come risolvere questo problema: stavo pensando di scrivere uno script che eseguisse il ping di google.com o di altri siti ad alto traffico / disponibilità elevata. Se il ping si completa correttamente, il server continuerà a funzionare. Se il ping fallisce (perché il modem è spento), lo script penserà che sia spento e dire al server di spegnersi. Vorrei aggiungere lo script a Cron e farlo funzionare ogni 5 minuti. Si spera che darebbe al server abbastanza tempo per spegnersi prima che l'UPS si esaurisca.

Prima di andare al problema di scrivere la sceneggiatura, vorrei sapere se esiste un modo migliore per fare ciò di cui ho bisogno. Grazie in anticipo per qualsiasi aiuto.


15
Non si dovrebbe eseguire il ping di un sito esterno, ma eseguire il ping dell'IP del modem DSL.
LawrenceC,

1
@ultrasawblade ... sembra una risposta, profuma di risposta ... è una risposta!
Pureferret,

1
Come menziona @ultrasawblade, MAI affidarsi a fonti esterne per una configurazione interna. Ad esempio, se Internet si guasta improvvisamente, si perde la connettività e il server si arresta. Se Google.com decide di cambiare il nome per qualsiasi motivo, il tuo server non funziona. Se esegui il ping tramite IP e quella particolare server farm si arresta, anche il tuo server si arresta. questo è il caso di qualsiasi fonte esterna. A meno che tu non sia sicuro al 100% che il tuo server DEVE essere acceso SOLO quando l'altro server è disponibile, non vuoi fare affidamento su quell'altro server per nessun motivo.
Nzall

Nessuna di queste risposte funziona per te?
Dave,

Risposte:


34

Esiste un modo vecchio ma provato: utilizzare un vecchio modem analogico. Ecco come

  • Collegare il modem al server tramite porta seriale (ad es. TtyS0)
  • Collegare l'alimentatore del modem non all'UPS, ma direttamente alla rete elettrica
  • NON collegare nulla alla linea telefonica del modem

Ora esegui il polling del modem ogni pochi secondi inviando ATZ[Enter]e aspettandoti OK[Enter]: se il modem non risponde, potresti pensare che non sia alimentato, il che significa che l'UPS è a batteria.

modificare

Il punto principale è che se la connessione Internet si interrompe per qualche altro motivo, il server non si spegnerà, come dovrebbe essere.

Modifica 2

Dai commenti:

  • Ovviamente dovresti mantenere un po 'di stato da un controllo a quello successivo, spegnendo solo dopo che N controlli ha fallito. Non ho menzionato questo, poiché vale per tutti i possibili controlli, non solo per il modem
  • La differenza tra l'uso del modem e l'utilizzo di qualsiasi cosa abbia a che fare con la rete è che si verificherà una perdita temporanea della connettività di rete: non si desidera essere disturbati con "Accesso disabilitato, server su USV", se si riavvia uno switch o riconfigurare una VLAN. Nella mia esperienza, la linea seriale è robusta come si arriva.

1
Buona risposta, ma suggerirei di aggiungere una sicurezza in cui controlla alcune volte prima che si spenga effettivamente. (quindi non dovrai spegnerlo durante un brown out di 5 minuti) E penso che anche il ping di uno swich sarebbe sufficiente (proprio niente al di fuori della tua rete).
HTDutchy,

@HTDutchy Vedi la mia modifica!
Eugen Rieck,

Lo so, ma poiché potrebbe non avere una connessione seriale o un vecchio modem in giro a pingare nell'hardware della casa sarebbe la prossima cosa migliore. e se lo switch smettesse di funzionare il server apparirebbe comunque inattivo.
HTDutchy,

22

A up di solito viene fornito con un connettore USB o COM1. Quando lo colleghi al server, puoi quindi iniziare a monitorare l'UPS.

In un ambiente Windows, senza installare il software, i messaggi sono già registrati e il server verrà chiuso automaticamente. Non so come funziona su Linux, ma scommetto che ci sono alcuni pacchetti software disponibili per l'interfaccia con il tuo UPS.


Ho appena controllato il mio UPS e sfortunatamente non ha nulla del genere. Ha solo 8 spine di alimentazione (4 con batteria e 4 senza) e jack line-in e line-out per cavi telefonici.
Will Kraft,

27
Quindi ottenere un UPS in grado di comunicare con il computer.
Ramhound,

@Ramhound Potrebbe non essere un'opzione, gli UPS possono essere piuttosto costosi e ci sono modi più economici.
Valità,

Non sono d'accordo che ci sono altri modi per rilevare che stai funzionando con una batteria di un up che non riesci nemmeno a rilevare al livello is
Ramhound

1

Se stai usando Debian, prova a cercare NUT (strumenti UPS di rete). Uso NUT per fare esattamente ciò che descrivi sul mio Synology NAS (che esegue la scatola occupata) e su un server Web di casa che esegue Ubuntu 12.04 LTS. Ho collegato il NAS tramite USB all'UPS per lo stesso motivo per te, potenziale perdita di tutti i miei file.

Credo che il daemon nut interrogi l'UPS ogni secondo per determinare lo stato. Quando l'UPS è in modalità batteria, può essere configurato per spegnersi con grazia o attendere prima X minuti, ecc. È inoltre possibile configurare più client per essere collegati al daemon nut eseguito sul server. In questo modo il tuo server può dire a più PC della tua rete di spegnersi con grazia. Per l'esecuzione dell'arresto, è possibile fornire il proprio script per arrestare i servizi in un modo specifico, oppure è possibile utilizzare lo script incorporato che chiama semplicemente shutdown -h, se ricordo correttamente.

Sito web NUT

C'erano siti migliori per trovare informazioni, ma non riesco a ricordarmeli in questo momento. La configurazione può essere una seccatura, ma se stai parlando di perdere potenzialmente il tuo RAID, dai un'occhiata! A seconda delle tue esigenze, potresti non aver bisogno dell'intera suite NUT, potresti riuscire a cavartela solo con la parte UPSMON. Penso che puoi ottenerlo nel pacchetto Ubuntu "nut-client".

C'è anche un client NUT per Windows, ma su Windows potresti stare meglio usando qualcosa come PowerChute o qualcosa di simile.


Come detto prima, sembra che l'UPS dell'OP non abbia alcun modo di comunicare con il computer, né USB né rete.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.