Wyłączenie VMware ESXi wywołane przez APC UPS podłączony przez USB

18

Wysyłam kilka serwerów ESXi 5.1 do zdalnych biur, gdzie będą zasilane przez UPS APC.

Chciałbym, aby UPS wyzwalał zamknięcie podłączonego serwera - wtedy polegałbym na konfiguracji ESXi, aby zająć się zamykaniem / zawieszaniem hostowanych na nim maszyn wirtualnych.

Widzę, że APC ma udokumentowane rozwiązanie przy użyciu wyłączania sieci PowerChute , ale wymaga to skonfigurowania dodatkowego serwera dla każdego biura i wymaga kart sieciowych na każdym UPS. Ogólnie używamy UPS bez karty sieciowej (np. Back-UPS Pro) - są one wyposażone w złącze USB i są łatwo dostępne w miejscach, w których znajdują się nasze biura.

Jak podłączyć zasilacz UPS do hosta ESXi przez USB, a następnie pozwolić ESXi wykryć awarię zasilania, a następnie podjąć odpowiednie działania? Czy ktoś zdołał to zrobić?

dunxd
źródło
1
Czy zaplanowałeś proces zamykania maszyn wirtualnych przez zamknięcie hosta? Czy akumulator może wytrzymać wystarczająco długo na ten okres?
ewwhite
Dzięki za zwrócenie na to uwagi. Jeszcze nie - na tym etapie wysyłam tylko serwery ESXi do uruchamiania kontrolera domeny, ale jestem pewien, że gdy będziemy mieć zasoby na miejscu, dodamy jeszcze kilka serwerów, w którym to momencie czas może się zmienić.
dunxd
Domyślnie zasady zamykania są dość długie. Ale szczerze mówiąc, nie uruchamiam wyłączania UPS na moich hostach lub klastrach ESXi. Wydaje się to sprzeczne z intuicją, ale nigdy nie było problemu.
ewwhite
Po co więc w ogóle męczyć się z UPS na swoich hostach ESXi? Jeśli dojdzie do awarii zasilania z powodu awarii lub z powodu wyczerpania się baterii, otrzymasz ten sam rezultat.
dunxd
Aby przetrwać krótkie przerwy w dostawie prądu. Ale w moich większych lokalizacjach mam 2-4 godziny zasilania UPS dla klastra VMWare, pamięci masowej i sieci.
ewwhite

Odpowiedzi:

5

Według APC nie jest to możliwe i konieczne jest zamknięcie sieci Powerchute. Próbowaliśmy tego kilka razy z USB i nie znaleźliśmy rozwiązania.

VMWare ma tutaj informacje na temat korzystania z rozwiązania zatwierdzonego przez APC.

Pomyślałby również, że SmartUPS byłby lepszym wyborem i można go dopasować do karty sieciowej. Oczywiście więcej pieniędzy, ale jeśli twoje serwery są w ogóle ważne, ten koszt powinien być tego wart. Zapewnia także więcej monitorowania i alertów, które mogą być przydatne w zdalnej witrynie. Musisz również zapewnić wystarczający czas działania dla wszystkich maszyn wirtualnych, aby czysto zamknąć, a następnie zamknąć hosta

Dave M.
źródło
1
Wydaje się, że jest to najbardziej rozsądna odpowiedź poparta przez obu dostawców. Niestety, VMware nie pomyślało o wbudowaniu w ESX / ESXi niczego, co działałoby natywnie. Rozwiązanie sieciowe wymaga, aby co najmniej jeden przełącznik sieciowy był zasilany również przez UPS.
dunxd
2
Nie ma sensu nie włączać przełączników sieciowych przez UPS ... zużywają bardzo mało prądu i są krytyczne dla każdej operacji sieciowej.
Massimo,
21

Tak, to możliwe. Oto szczegóły mojej podobnej konfiguracji.

Konfiguracja sprzętowa: APC Smart-UPS 1500 podłączony do hosta ESXi 5.1 przez USB. Maszyna wirtualna z systemem Linux działająca na tym hoście ESXi. UPS jest podłączony do tej maszyny wirtualnej za pomocą opcji ESXi USB pass through.

Konfiguracja oprogramowania: wzorzec NUT (Network UPS Tools) działający na maszynie wirtualnej i natywny podrzędny NUT ESXi działający na hoście ESXi.

Logika wyłączania: VM uruchamia usbhid-upy sterownika UPS , który jest odpowiedzialny za komunikację z UPS przez USB. Proces upsd łączy się z UPS poprzez sterownik usbhid-ups i monitoruje stan UPS. Proces główny programu upsmon działający na tej samej maszynie łączy się z programem upsd i inicjuje zamknięcie systemu. Host ESXi uruchamia drugą instancję programu upsmon, który również łączy się z tą samą maszyną wirtualną upsd za pośrednictwem sieci wewnętrznej.

W przypadku awarii zasilania następuje następująca sekwencja:

  1. UPS za pośrednictwem usbhid-up zgłasza do UPD informacje o awarii zasilania.
  2. (opcjonalnie, przydatne, jeśli chcesz wyłączyć się za kilka minut zamiast niskiego poziomu naładowania baterii) Upmon na maszynie wirtualnej inicjuje upsched 5 minutowy zegar. Timer jest przerywany, jeśli zasilanie zostanie przywrócone.
  3. Po uruchomieniu timera lub gdy UPS zgłasza niski poziom naładowania, upsmon podnosi flagę FSD (wymuszone wyłączenie) do upsd.
  4. W autonomicznej konfiguracji NUT flaga FSD wyłączyłaby maszynę. Ale tutaj polecenie zamknięcia zostało zastąpione zwykłym logowaniem, np. „Powinienem zamknąć teraz, ale zamiast tego czekam na hosta”. I nic nie robi.
  5. Flaga FSD jest również odczytywana przez UPX ESXi, który inicjuje zamknięcie hosta ESXi.
  6. Host ESXi zamyka wszystkie maszyny wirtualne jeden po drugim. Ważne jest to, że VM, która uruchamia aktualizację, powinna zostać zamknięta na końcu (przy użyciu konfiguracji sekwencji uruchamiania / zamykania ESXi).
  7. Ważne: na tej maszynie wirtualnej muszą być zainstalowane narzędzia vmware. Po otrzymaniu polecenia hosta z systemu gościa uruchamiany jest skrypt zamykania vmware-tools. Ten skrypt sprawdza flagę / etc / killpower . Jeśli nie ma flagi, nic nie robi (to oznacza, że ​​użytkownik aktywował zamknięcie systemu Linux, a nie zdarzenie UPS). Ale jeśli flaga istnieje (aktywny FSD), ten skrypt wysyła do UPS polecenie opóźnionego wyłączenia (powiedzmy za 3 minuty).
  8. Po uruchomieniu skryptu vmware-tools gość-maszyna wirtualna wyłącza się.
  9. ESXi widzi ostatni stan wyłączenia maszyny wirtualnej i sam się wyłącza (zajmuje to około 1 minuty, ponieważ nie ma teraz uruchomionych innych maszyn).
  10. W ciągu pozostałych 2 minut UPS odcina zasilanie.
  11. Po przywróceniu zasilania ESXi uruchamia się i włącza wszystkie maszyny wirtualne. Najpierw należy uruchomić maszynę monitorującą UPS (taka sama konfiguracja jak w przypadku polecenia wyłączenia).

Pliki do pobrania:

NUT dla Linuxa można zainstalować z pakietu.

Natywnego klienta NUT dla serwera ESXi można pobrać, korzystając z ostatniego linku na tej stronie: http://www.networkupstools.org/download.html

Niektóre moje skrypty i pliki conf są tutaj (pokazane są tylko zmienione linie): http://pastebin.com/KkEeanK1

Uwagi:

Oczywiście jest więcej szczegółów i zajęło mi trochę czasu, aby działało tak, jak powinno. Ale teraz działa bardzo dobrze. Ten system uwzględnia przypadki, w których po prostu wyłączasz monitorującą maszynę wirtualną od wewnątrz (skrypt vmware-tools nie jest uruchamiany) lub jeśli jest to inicjowane przez hosta ESXi zamykanie maszyny wirtualnej (brak flagi / etc / killpower, więc brak obciążenia UPS), lub jeśli jest to zamknięcie ESXi (to samo). Jedyne ważne jest, aby ta maszyna wirtualna działała JAK NAJSZYBCIEJ po rozruchu hosta i zamknęła ją na końcu (więc czas przestoju hosta jest przewidywalny - jak wspomniano powyżej, dla mnie jest to około 1 minuta i 2 minuty na wszelki wypadek).

Mój UPS monitorujący maszynę wirtualną z systemem Linux to także serwer udostępniania Samba / NFS do przechowywania kopii zapasowych, serwer NAT / DHCP dla maszyn wirtualnych i niektóre inne lekkie usługi. W stanie bezczynności zajmuje około 22 MHz udziałów procesora ESXi i około 10 MB aktywnej pamięci RAM. Dzięki zastosowaniu NUT możesz w razie potrzeby zasilać więcej urządzeń z tego samego UPS, a wszystkie można z wdziękiem wyłączyć. Nie jest wymagana PowerChute i / lub droga karta sieciowa.

Oleg Siemionow
źródło
14

Super pytanie. W rzeczywistości można to zrobić całkiem nieźle - przynajmniej w niektórych konfiguracjach. Wypróbowałem następujący przepis na kilku hostach ESXi 5.5. Zasadniczo rozwiązanie wygląda następująco:

  1. Włącz dostęp SSH na hoście ESXi
  2. Utwórz maszynę wirtualną z systemem Linux - używam Ubuntu. Potrzebujesz tylko bardzo minimalnej konfiguracji - bez GUI lub czegokolwiek.
  3. Podłącz urządzenie APC przez USB do hosta ESXi i przekaż je do maszyny wirtualnej z systemem Linux.
    • Upewnij się, że kontroler USB dodany do maszyny wirtualnej jest zgodny z faktycznym fizycznym kontrolerem USB, do którego podłączone jest urządzenie APC, tj. Dodaj kontroler XHCI tylko wtedy, gdy fizycznym urządzeniem jest urządzenie USB3. Niedopasowania wydają się powodować dziwne problemy w sterowniku urządzenia Linux USB.
    • Jeśli coś nie działa, a ty patrz błędy jak ctrl urb status -62w dmesg, są szanse, kontroler fizyczny nie zgadza się jeden w VM. Jeśli się zgadzają - to problem. Mam jedną konfigurację z tego rodzaju problemem i nie ma prawdziwego rozwiązania tego problemu.
  4. Zainstaluj apcupsdna maszynie wirtualnej z systemem Linux - w Ubuntu możesz sudo apt-get install apcupsdzainstalować najnowszą wersję. Projekt NUT jest również miły, ale jestem tradycjonalistą.
  5. Zainstaluj narzędzie Plink, wykonując sudo apt-get install putty-tools
  6. Połącz się z hostem ESXI, wykonując plink root@<your ESXi host IP>. Możesz natychmiast zamknąć połączenie. Celem jest zapisanie klucza hosta, aby program plink nie pytał go ponownie, gdy uruchomimy go za pomocą skryptu
  7. Edytuj /etc/apcupsd/apcupsd.confi zmień poniższe elementy, aby pasowały: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE Upewnij się również, że /etc/default/apcupsdtakISCONFIGURED=yes
  8. Edytuj /etc/apcupsd/apccontroli przewiń do doshutdownskrzynki. Niech to wygląda tak: doshutdown) echo "UPS ${2} initiated Shutdown Sequence" | ${WALL} # Shut down indirectly by triggering the ESXi host to do the # shutdown via VMWare tools /usr/bin/plink root@< your ESXi host IP > -pw < your root pw > "/sbin/shutdown.sh && /sbin/poweroff" ;;
  9. Uruchom ponownie apcupsd przy użyciu sudo service apcupsd restarti sprawdź, czy wszystko działa, wywołując apcaccess. Jeśli nie, sprawdź dzienniki i dmesg
  10. Upewnij się, że na wszystkich maszynach wirtualnych, które muszą się dobrze zamknąć w przypadku awarii zasilania, zainstalowano narzędzia VMWare. Upewnij się również, że są częścią listy uruchamiania / zamykania maszyny wirtualnej (w kliencie vSphere Web Client przejdź do:) vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown. Upewnij się, że zamknięcie ma na celu zamknięcie systemu-gościa.

Po uruchomieniu tych rzeczy doshutdownskryptlet z kroku 8 zostanie wywołany w przypadku awarii zasilania. To z kolei wywołuje skrypt shutdown.sh na hoście ESXi, który sygnalizuje pakiet VMWare Tools w każdej maszynie wirtualnej na hoście, aby wykonać czyste zamknięcie za pośrednictwem systemu-gościa. Z mojego doświadczenia wynika, że ​​działa lepiej niż oprogramowanie PowerChute firmy APC.

Jeśli chcesz monitorować rzeczy na swoich maszynach wirtualnych, możesz skonfigurować na nich podrzędne instancje apcupsd, które łączą się z głównym UPS-em sterującym maszyną wirtualną z systemem Linux. Twoje podrzędne pliki apcupsd.conf powinny mieć następujący wpis:
UPSTYPE net < your UPS control VM IP >:3551
Wpisy podobne UPSCABLEi takie nie mają znaczenia w tym przypadku. Działa to również z wersją systemu Windows apcupsd(dostępną tutaj ). Możesz użyć dołączonego apctray.exedo sprawdzenia aktualnego stanu rzeczy.

Myślę, że to prawie wszystko obejmuje.

MrMajestyk
źródło
+1 działało jak urok. Pierwszy raz!
Morten Kristensen
Ta odpowiedź działała idealnie, chociaż w biurze mojego klienta musieliśmy nieco poprawić doshutdownsekwencję. Dodaliśmy ${APCUPSD} --killpowertuż przed /usr/bin/plinkczęścią, dzięki czemu UPS wyłącza się po chwili i uruchamia się automatycznie po przywróceniu zasilania. Warto również zauważyć, że krok 6 należy wykonać tak, jak został rootnabyty za pośrednictwem sulub sudo su, ale nie sudo -s .
Andrea Lazzarotto,
4

Możesz rozważyć użycie funkcji przekazywania urządzenia USB do gościa z programem PowerChute lub innym oprogramowaniem zdolnym do monitorowania stanu UPS i mogącym spowodować zamknięcie hosta ESXi (np. Apcupsd ). ESXi oficjalnie obsługuje tylko bardzo ograniczoną liczbę urządzeń USB do przekazywania , ale ludzie już od jakiegoś czasu podłączają i przechodzą przez różne klasy urządzeń, ale APC UPS USB wydaje się działać zgodnie z tym przewodnikiem dla maszyny wirtualnej z systemem Windows lub ten dla maszyny Wirtualnej CentOS Linux .

the-wabbit
źródło
2

Spójrz na vSphere Management Assistant (vMA) stąd Używamy go w moim biurze do robienia tego, co próbujesz, jednak z Smart-UPS podłączonym przez USB, a nie przez Back-UPS.

deveneyi
źródło
Dodaj więcej szczegółów, ponieważ jest to nieudokumentowana konfiguracja w odniesieniu do APC lub vmware.
dunxd
1

Chociaż jest to możliwe (prawdopodobnie / ogólnie), nie sądzę, aby automatyczne wyłączanie komputera na zasilaniu bateryjnym było dobrym pomysłem. Jeśli zamierzasz to zrobić, to ze względów praktycznych powinieneś po prostu zaoszczędzić pieniądze na zasilaczu bateryjnym i pozwolić, aby utrata zasilania zamknęła za ciebie maszynę. (Oczywiście, czyste wyłączanie jest zawsze lepsze niż utrata zasilania, ale wydaje się, że brakuje ci czasu, który ma czas pracy baterii dłuższy niż kilka minut, jeśli automatycznie wyłączasz wszystkie rzeczy po utracie zasilania. )

Sposób, w jaki zawsze sobie z tym poradziłem, polega na tym, że monitorowanie ostrzega skojarzenia zabezpieczeń, gdy nastąpi przerwa w zasilaniu, dzięki czemu skojarzenia zabezpieczeń mogą wykorzystywać szarą materię do decydowania, kiedy (a nawet jeśli), aby zamknąć serwery. Jeśli jest to krótka przerwa w działaniu, zamknięcie serwerów może nie być dobrym pomysłem lub możesz chcieć pozostawić niektóre serwery działające tak długo, jak to możliwe, i wyłączać je tylko przed wyczerpaniem się baterii. Wydaje mi się, że jest to raczej zadanie decyzyjne bardziej odpowiednie dla człowieka niż prosta zasada.

Beznadziejny
źródło
Nie musisz konfigurować zasilacza UPS, aby natychmiast uruchamiał wyłączenie, ale chcesz, aby wyłączał się, zanim baterie całkowicie się wyczerpią, w przeciwnym razie będziesz musiał kupić więcej akumulatorów, szczególnie w niektórych lokalizacjach, w których pracuję i zasilanie codziennie. Oczywiście wspaniale jest zaangażować ludzi, ale nie zawsze masz Administratora Systemu w zdalnym biurze.
dunxd
@dunxd Dobra uwaga - jestem bardziej przyzwyczajony do środowisk HA, w których przynajmniej niektóre serwery muszą pozostać w górze, pójść do piekła lub podlewać, więc nazwa gry wymyśla, jak najlepiej racjonować moc (selektywne wyłączanie urządzenia w dół), aby uzyskać jak najmniejszy wpływ na usługi, który nie będzie przedmiotem zainteresowania wszystkich użytkowników ani przypadków użycia.
HopelessN00b
1

W dawnych czasach instalacji typu baremetal APC PowerChute Plus był istotną częścią mojego procesu instalacji. Za pomocą prostego kabla do komunikacji szeregowej i ich pliku binarnego tylko w Red Hat łatwo było skonfigurować reguły zarządzania lokalnie podłączonym serwerem. Dostępne były podstawowe powiadomienia e-mail o zdarzeniach bateryjnych UPC, zdarzeniach związanych z zasilaniem linii i wyłączaniem:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

i

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

lub

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Plus rozsądny interfejs, aby zobaczyć, co się dzieje ...

wprowadź opis zdjęcia tutaj

To oprogramowanie ostatecznie stało się komercyjne (lub zostało pochowane na stronie internetowej APC). Istnieje kilka podejść typu open source, aby zapewnić coś podobnego. Wszystko to jednak komplikuje się w przypadku pojedynczych hostów VMWare ESXi.

Wydaje się, że jest to coś, co VMWare powinno było włączyć do podstawowego hypervisora. Jest to podstawowy i może zapewnić przyzwoity poziom ochrony dla użytkowników. Najczęstsze środki zaradcze, które widzę teraz, to przejście przez USB na dedykowaną maszynę wirtualną, podejście demona sieciowego lub robienie tego, co robię; brak konfiguracji automatycznego wyłączania lub wyłączania baterii ...

To prawda, że ​​zwykle używam zasilacza UPS, który może obsługiwać obciążenie systemu przez godzinę lub dłużej, ale zdarzają się dłuższe przerwy w dostawie prądu. Być może alternatywą jest zebranie kilku tanich lub odnowionych kart sieciowych i planowanie zakupu urządzeń SmartUPS jako minimum ...

ewwhite
źródło
0

Sprawdź poniższy link . Nie jest to najbardziej eleganckie rozwiązanie, ale bardzo praktyczne, bardzo proste rozwiązanie. Możliwe są wady w zakresie bezpieczeństwa (w zależności od konkretnego projektu sieci, gości załadowanych na Hosty i dostępu użytkowników do tych gości, ale można wykonać to połączenie.

użytkownik207685
źródło
0

Użyłem rozwiązania MrMajestyk i zmieniłem dostęp ssh tylko przez łącze plink z dostępem ssh bez hasła przy użyciu klucza publicznego rsa. Klucz rsa wygenerowany w maszynie wirtualnej apcupsd musi być zawarty w pliku / etc / ssh / keys-root / uprawnione_ klucze hosta vmware.

Norberto Altalef
źródło