Wake on Lan - trezire - prințesă adormită Sistem real

Dedic această notă proprietarilor de micro-centre de date, care sunt un ansamblu de servere care îndeplinesc niște sarcini care aduc unele venituri.

real
Totodată, problema puterii de rezervă este rezolvată adecvat rentabilității proiectului și, ca să spunem așa, aspectelor geografice, i.e. utilizarea generatoarelor pe benzină sau diesel pentru a menține un centru de date în funcțiune este neeconomică chiar și fără a lua în considerare costul echipamentului în sine. Cu toate acestea, oprirea de urgență a serverelor în caz de pană de curent în rețea nu este de dorit. Riscați să pierdeți unele fișiere de pe disc, precum și o întârziere la pornire din cauza verificărilor automate ale sistemului de fișiere ale unui server închis incorect.

Care este soluția problemei? Propun o optiune de buget bazata pe oprirea automata a serverelor principale in lipsa tensiunii de retea. Acest lucru necesită un server mereu pornit, să-i spunem un server de monitorizare, alimentat de o sursă de alimentare neîntreruptibilă de mare capacitate, care monitorizează cumva prezența tensiunii în rețeaua de alimentare. De asemenea, este necesar să furnizați energie serverelor principale timp de câteva minute. Strict vorbind, ideea este simplă: dacă tensiunea rețelei scade pentru o perioadă, să zicem 60 de secunde, serverul de monitorizare oprește serverele principale. Când apare tensiune în rețea, serverul de monitorizare trimite și o comandă de trezire către servere cu o oarecare întârziere.

Complexul hardware este un server de monitorizare bazat pe o platformă economică, adică. ar putea fi un sistem bazat pe Intel Atom sau o veche gazdă bazată pe Intel Pentium III și i815. Consumul de energie al unui astfel de computereste de aproximativ 20-40 wați. Când este alimentat de un UPS cu două baterii de 65Ah 12V, oferă, teoretic, mai mult de 36 de ore de funcționare offline. Acest lucru este suficient pentru a rezolva întreruperile de curent planificate sau de urgență care durează până la 12 ore, ceea ce este cel mai probabil în prezent. Un server productiv modern consumă aproximativ 150-180 W, așa că doar 2 servere pot fi scoase de cel mai bugetar UPS de 420 W (600 VAR). Sarcina unui astfel de UPS este să „reziste” timp de 4-5 minute până când serverele se închid cu grație. În plus, este important să înțelegeți un punct. Unii cred că în starea oprită, dar când se aplică tensiune pe placă de la PSU ATX, un astfel de PSU nu consumă energie, iar dacă o face, este neglijabil. Aceasta este o iluzie, care poate fi infirmata cu usurinta inarmandu-te cu un ampermetru AC. În funcție de hardware, diverse servere consumă curent de la 30 la 100 (!!) miliamperi, ceea ce corespunde la 7,5-25 wați. De aceea, conectarea serverelor la un UPS consumatoare de energie este un lux inaccesibil. Un UPS tipic cu o baterie de 12V, 7Ah are o capacitate de 75Wh. Dintre acestea, 25 Wh se consumă în 5 minute de funcționare a serverului. Cei 50 Wh rămași pot suporta puterea serverelor oprite pentru maximum o oră și jumătate până la două ore. În plus, UPS-ul se va opri pur și simplu din cauza descărcarii bateriei la un nivel minim critic și apoi se va porni automat, când apare tensiunea de la rețea, serverul se va porni în consecință (în BIOS, este permisă pornirea automată după restabilirea alimentării). ). Dacă tensiunea de rețea apare înainte ca UPS-ul să fie oprit, serverele nu se vor putea porni singure, aici ne va ajuta tehnologia Wake on Lan.

Peserverul de monitorizare trebuie să ruleze un script care controlează tensiunea rețelei cu o oarecare discreție, să zicem o dată la 10 secunde. Când există o pană de curent pentru 6 intervale, o comandă de închidere este trimisă către servere prin ssh. Când apare tensiunea cu o întârziere de 6 intervale, se generează un pachet de trezire pentru servere. Ca senzor de server de monitorizare, puteți utiliza un UPS cu o interfață de monitorizare (cum am făcut-o eu) sau, într-un mod complet necinstite, luați un fel de router/modem SOHO alimentat din rețea și controlați-l prin icmp sau interfață de rețea stare.

my $int_on_bat = 0 ; my $int_on_line = 0 ; my $int_all = 0 ;

în timp ce ( $int_all ( $sec , $min , $hour , $mday , $mon , $year , $wday , $yday , $isdst ) = ( ) ; $mon = $mon + 1 ; $an = $an + 1900 ; dacă ( $mday & lt ; 10 ) < $mday = '0' .$mday ;> dacă ($lun & lt ; 10 ) < $mon = '0' . $mon ; > $data = "$mday-$mon-$year $hour:$min:$sec" ; $cmd = '/usr/local/bin /upsc PowerMust /usr/bin/grep "ups.status:" /usr/bin/awk ' . "'" . '< print $2 >' . "'" ; my $status = `$cmd ` ; LOG "$date - $status \t takt`s pe baterie: $int_on_bat, takt`s on line: $int_on_line" ; ( $status ) ; if ($status eq ' OB' ) < $int_on_bat ++; $int_on_line = 0 ; > altfel < $int_on_bat = 0 ; $int_on_line ++; > if ( $int_on_bat == 6 ) < LOG " 60 de secunde după linia oprită \n " ; ( "/usr/bin/su -l si -c '/usr/bin/ssh -l si 192.168.0.3 /usr/local/bin/sudo shutdown -p now'" ); ( "/usr/bin/su -l si -c '/usr/bin/ssh -l si 192.168.0.3. 0.4 /usr/local/bin/sudo shutdown -p now'" ); ( "/usr/bin/touch /var/run/192.168.0.3.shut" ); ( „/usr/bin/touch /var/run/192.168.0.4.shut” ); Înregistrare " Oprire servere \n" ; > else < LOG " \n " ; > dacă ( $int_on_line == 6 ) < LOG " 60 de secunde după linia de pe \n " ; ( „/usr/local/bin/nut/wakeonlan.sh &” ); ( „/bin/rm -f /var/run/192.168.0.3.shut” ); ( "/bin/rm -f /var/run/192.168.0.4.shut" ) ; Înregistrare " Trimitere mesaj WakeOnLan pentru servere \n " ; > ( 10 ) ; $int_full++; > __END__

Creați un fișier /usr/local/bin/nut/wakeonlan.sh cu următorul conținut:

/usr/local/bin/wakeonlan -i 192.168.0.3 -p 40000 6c:62:8d:92:21:b6 /usr/local/bin/wakeonlan -i 192.168.0.4 -p 40000 00:19: d2:ce:b2:e8

Desigur, trebuie să puneți portul /usr/ports/net/wakeonlan sau doar să adăugați pachetul (pkg_add -r wakeonlan). Adăugați o sarcină la crontab la fiecare oră:

Asta e tot. Acum avem timpi de nefuncționare minim și daune minime din cauza căderii de curent în rețeaua de alimentare a centrului de date.