Si è possibile. Ecco i dettagli della mia configurazione simile.
Configurazione hardware:
APC Smart-UPS 1500 collegato all'host ESXi 5.1 tramite USB. Una macchina virtuale Linux in esecuzione su questo host ESXi. L'UPS è collegato a questa VM usando l'opzione pass-through USB ESXi.
Configurazione software:
master NUT (Network UPS Tools) in esecuzione nella VM e slave NUT ESXi nativo in esecuzione sull'host ESXi.
Logica di spegnimento:
VM sta eseguendo il driver UPS usbhid-up che è responsabile della comunicazione con UPS via USB. Il processo di upsd si collega all'UPS tramite il driver usbhid-up e monitora lo stato dell'UPS. Il processo master upmon in esecuzione sulla stessa macchina si collega a upsd e avvia l'arresto. L'host ESXi sta eseguendo la seconda istanza di upsmon che si collega anche alla stessa VM upsd tramite rete interna.
In caso di interruzione di corrente, si verifica la seguente sequenza:
- L'UPS tramite usbhid-up segnala di aver interrotto l'alimentazione.
- (facoltativo, utile se si desidera arrestare in pochi minuti invece di Batteria scarica), l'upmon sulla VM avvia un timer di 5 minuti upssched . Il timer viene interrotto se viene ripristinata l'alimentazione.
- Quando il timer si attiva o quando l'UPS segnala che la batteria è scarica, il upsmon alza il flag FSD (spegnimento forzato) per aumentare.
- In una configurazione NUT autonoma, il flag FSD spegne la macchina. Ma qui il comando di spegnimento viene sostituito da una semplice registrazione come "Dovrei chiudere ora ma invece sto aspettando l'host". E non fa niente.
- L'indicatore FSD viene letto anche dal upsmon ESXi, che avvia l'arresto dell'host ESXi.
- L'host ESXi arresta tutte le macchine virtuali una alla volta. L'importante è che la VM che esegue l'upd debba essere arrestata per ultima (utilizzando la configurazione della sequenza di avvio / arresto di ESXi).
- Importante: su questa VM devono essere installati strumenti vmware. Quando riceve il comando di arresto del guest dall'host, viene avviato lo script di spegnimento di vmware-tools. Questo script controlla il flag / etc / killpower . Se nessun flag, non fa nulla (questo significa che l'utente ha attivato l'arresto di Linux, non l'evento UPS). Ma se esiste il flag (FSD attivo), questo script invia a UPS il comando di spegnimento ritardato (diciamo, tra 3 minuti).
- Dopo aver eseguito lo script vmware-tools, la VM guest si spegne.
- ESXi vede l'ultimo stato di spegnimento della VM e si arresta da solo (richiede circa 1 minuto perché non ci sono altre macchine in esecuzione ora).
- In 2 minuti rimanenti l'UPS interrompe l'alimentazione.
- Quando viene ripristinata l'alimentazione, ESXi si avvia e si accende su tutte le macchine virtuali. La macchina di monitoraggio UPS deve essere avviata per prima (la stessa configurazione per l'ordine di spegnimento).
download:
NUT per Linux potrebbe essere installato dal pacchetto.
Il client NUT nativo per il server ESXi può essere scaricato utilizzando l'ultimo collegamento in questa pagina: http://www.networkupstools.org/download.html
Alcuni dei miei script e file di configurazione sono qui (vengono visualizzate solo le righe modificate): http://pastebin.com/KkEeanK1
Appunti:
Ovviamente ci sono più dettagli e mi ci è voluto del tempo per farlo funzionare come dovrebbe. Ma ora si comporta molto bene. Questo sistema tiene conto dei casi in cui è stato arrestato l'interno della VM di monitoraggio dall'interno (lo script vmware-tools non è in esecuzione) o se si tratta di un arresto della VM avviato dall'host ESXi (nessun flag / etc / killpower, quindi nessun carico dell'UPS), oppure se si tratta di un arresto ESXi (lo stesso). L'unica cosa importante è avere questa VM in esecuzione il prima possibile dopo l'avvio dell'host e spegnerla per ultima (quindi il tempo di inattività dell'host è prevedibile - come detto sopra, è circa 1 minuto per me e altri 2 minuti mi riservo per ogni evenienza).
Il mio UPS che controlla Linux VM è anche un server di condivisione Samba / NFS per l'archiviazione di backup, il server NAT / DHCP per VM e alcuni altri servizi leggeri. Richiede circa 22 MHz di condivisioni CPU ESXi e circa 10 MB di RAM attiva quando è inattivo. Utilizzando NUT è possibile alimentare più dispositivi dallo stesso UPS, se necessario, e tutti possono essere spenti con grazia. Non sono richiesti PowerChute e / o costose schede Network Monitor.