Jak mogę automatycznie hibernować serwery pamięci masowej w chmurze?

13

Mam centra danych w chmurze z systemem Ubuntu 16.04 lts i NextCloud / OwnCloud, które nie muszą być dostępne 24/7 i potrzebują rozwiązań do zarządzania energią. Serwery to Dell PowerEdge 1950 Gen II i Dell PowerEdge 2950 Gen II

Ogólny cel

Hibernacyjne serwery pamięci masowej w chmurze przekroczyły czas bezczynności, na przykład 20 minut, i zostały poddane hibernacji za pomocą WOL, aby zredukować 6272,09 kg dwutlenku węgla rocznie, co stanowi 6680 kW z samego naszego centrum danych, dane osiągnięte podczas szczegółowego audytu energii.

Wypróbowano nieskuteczne rozwiązanie

Krajobraz

Krajobraz w miejscach pracy / cron oferuje jedynie zaplanowane uruchamianie i zamykanie systemu, co jest nieskuteczne dla naszych osiągnięć.

Powernap

powernap wydaje się być dobrym rozwiązaniem, ale usługa nie uruchamia się w systemie Ubuntu 16.04

XXXXXXX ~ $ status powernap usługi sudo
● powernap.service - PowerNap
   Załadowano: załadowano (/lib/systemd/system/powernap.service; wyłączone; preset dostawcy
   Aktywny: nieaktywny (martwy)

ponwernap wydaje się używać zdeprecjonowanych usług, takich jak usługa sieciowa, które nie są już dostępne w Ubuntu 16.04

Osiągalne cele

Wake on LAN (WOL)

Włączenie WOL jest proste, wykonując ręczną konfigurację tego łącza . lub za pomocą bułki powewake

Hibernacja serwera

Do tej pory udało mi się tylko hibernować serwery za pomocą sudo systemctl hibernateisudo systemctl hibernate-sleep

  1. powernap - Składam raporty o błędach w celu usunięcia wyczerpanych zależności
  2. systemctl - może gdzieś prowadzić
  3. pm-utils - może również do czegoś doprowadzić

Ulepszenia sprzętu

Zaktualizowałem procesory podwójnego Xeon E5335 Dell 1950 Gen II z procesorami Xeon X5365. X5365 umożliwia zarządzanie energią i ustawia zarządzanie energią z BIOS-u. Szczerze mówiąc, nie popierałem takiej aktualizacji, ponieważ X5365 zużywa 70 watów na procesor więcej niż E5335, ale zrobiłem to na korzyść testów hibernacji.

Aktualizacja 1

W tej chwili pm-utilsjest to jedyny sposób, aby odejść od ustawiania wolnici. Obecnie badam optymalną konfigurację, aby utworzyć hak zasilający dla ustawień prądu przemiennego na czas bezczynności.

Wszelkie zalecenia proszę.

Fab
źródło
1
Witamy w Ask Ubuntu. Proszę, jakie jest twoje pytanie? Proszę być bardziej szczegółowym .
MadMike,
Hibernacja serwerów w chmurze minęła bezczynność i taka hibernacja nastąpiła dzięki WOL. Dodatkowym szczegółem jest podanie przykładu scenariusza roboczego.
Fab
1
Nie mogłem do końca zrozumieć, jakie są twoje przeszkody. Czego próbowałeś, co nie działa i / lub czego konkretnie potrzebujesz pomocy w zrozumieniu?
Zanna
3
Czy hibernacja nie jest niepraktyczna? W zależności od rozmiaru pamięci RAM i prędkości odczytu / zapisu dysku hibernacja i wznawianie może potrwać do kilku minut. Jak obsługiwane są wnioski w tym czasie? Czy Twoi użytkownicy będą chcieli czekać tak długo? Zwykłe zawieszenie może być lepszym kompromisem w celu oszczędzania energii przy zachowaniu zwinności. A może wirtualizacja serwerów i hostowanie ich na jednej potężnej maszynie lub klastrze, który pozwala na zawieszanie / wznawianie części przy jednoczesnym równoważeniu obciążenia innych, może również pomóc w oszczędzaniu energii. Zauważ, że nie mam doświadczenia z systemami serwerów na dużą skalę, tylko zgaduję.
Bajt Dowódca
1
Zgadzam się z Byte Commander. Aby uzyskać informacje od osób z faktycznym doświadczeniem w obsłudze centrum danych, prawdopodobnie powinieneś zapytać o awarię serwera .
David Foerster,

Odpowiedzi:

0

Przygotowałem mały skrypt, który można uruchamiać w cronjob co 15 minut lub używając systemowych timerów:

#/bin/bash

NActiveUsers=$(who -q | awk -F'#' '{printf $2}' | awk -F'=' '{printf $2}')
AvgLoad15Min=$(cat /proc/loadavg | awk -F' ' '{print $3}')

ActiveUsersThresh=2
AvgLoadThresh=0.15

if [ "$NActiveUsers" -lt "$ActiveUsersThresh" ]
then
    LoadBelowThresh=$(echo $AvgLoad15Min'<'$AvgLoadThresh | bc -l)
    if [ "$LoadBelowThresh" -eq 1 ]
    then
        systemctl hibernate
    fi
fi

Najpierw pobiera liczbę użytkowników zalogowanych do systemu i średnie obciążenie w ciągu ostatnich 15 minut. Powinieneś być w stanie sprawdzić swoje średnie obciążenie w trybie bezczynności za pomocą cat /proc/loadavg. Trzecie liczby zmiennoprzecinkowe dają średnią z ostatnich 15 minut. Ta wartość pomaga zdefiniować próg ustawiony w zmiennej AvgLoadThresh. To z pewnością będzie wymagało strojenia. Inną rzeczą, którą możesz zdefiniować, jest liczba użytkowników, którzy mogą się zalogować, a system i tak przechodzi w stan hibernacji. To jest ustawione ActiveUsersThresh. Tylko po to, aby upewnić się, że system nie zawsze hibernuje, gdy przeprowadzasz konserwację lub coś takiego.

Wydaje mi się, że można wymyślić bardziej inteligentne kontrole, więc postrzegaj to jako pierwsze proste podejście. Na przykład nie wiem, która baza danych lub serwer sieciowy jest używany w instalacji własnej chmury, ale możesz spróbować zatrzymać je z wdziękiem przed poleceniem hibernacji, aby nikt nagle nie stracił połączenia.

romed
źródło