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:
- UPS za pośrednictwem usbhid-up zgłasza do UPD informacje o awarii zasilania.
- (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.
- Po uruchomieniu timera lub gdy UPS zgłasza niski poziom naładowania, upsmon podnosi flagę FSD (wymuszone wyłączenie) do upsd.
- 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.
- Flaga FSD jest również odczytywana przez UPX ESXi, który inicjuje zamknięcie hosta ESXi.
- 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).
- 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).
- Po uruchomieniu skryptu vmware-tools gość-maszyna wirtualna wyłącza się.
- 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).
- W ciągu pozostałych 2 minut UPS odcina zasilanie.
- 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.