Arresto VMware ESXi attivato dall'UPS APC collegato tramite USB


18

Sto spedendo un sacco di server ESXi 5.1 a uffici remoti dove saranno alimentati tramite UPS APC.

Vorrei che l'UPS innescasse l'arresto del server collegato, quindi farei affidamento sulla configurazione ESXi per occuparmi dell'arresto / sospensione delle macchine virtuali ospitate su di esso.

Vedo che APC ha una soluzione documentata utilizzando la chiusura di rete di PowerChute , ma ciò comporta la configurazione di un server aggiuntivo per ufficio e richiede schede di rete su ciascun UPS. In genere utilizziamo UPS senza una scheda di rete (ad esempio Back-UPS Pro): sono dotati di un connettore USB e sono prontamente disponibili nei luoghi in cui si trovano i nostri uffici.

Come posso collegare un UPS a un host ESXi tramite USB, quindi fare in modo che ESXi rilevi un'interruzione di corrente e quindi agisca di conseguenza? Qualcuno è riuscito a farlo.


1
Hai programmato il processo di spegnimento delle macchine virtuali tramite l'arresto dell'host? La batteria può durare abbastanza a lungo per quel periodo?
ewwhite,

Grazie per averlo segnalato. Non ancora - in questa fase sto solo spedendo i server ESXi per eseguire un controller di dominio, ma sono sicuro che una volta che avremo la risorsa in atto aggiungeremo altri server, a quel punto i tempi potrebbero cambiare.
Dunxd,

La politica di spegnimento è piuttosto lunga per impostazione predefinita. Ma ad essere sincero, non eseguo lo spegnimento UPS sui miei host o cluster ESXi. Sembra controintuitivo, ma non è mai stato un problema.
ewwhite,

Perché preoccuparsi di avere UPS sui vostri host ESXi allora? Se l'alimentazione si interrompe a causa di un'interruzione o perché la batteria è scarica, si ottiene lo stesso risultato.
Dunxd,

Per superare brevi interruzioni. Ma nei miei siti più grandi, ho 2-4 ore di alimentazione UPS disponibili per il cluster, l'archiviazione e la rete VMWare.
ewwhite,

Risposte:


5

Secondo APC, questo non è possibile e è necessario l'arresto della rete Powerchute. Lo abbiamo provato diverse volte con USB e non abbiamo trovato alcuna soluzione.

VMWare ha informazioni qui sull'uso della soluzione approvata APC.

Penserebbe anche che SmartUPS sarebbe una scelta migliore e puoi adattarti con la scheda di rete. Naturalmente più soldi, ma se i tuoi server sono importanti, quel costo dovrebbe valerne la pena. Ti dà anche più monitoraggio e avvisi che potrebbero essere utili in un sito remoto. È inoltre necessario garantire un runtime sufficiente affinché tutte le macchine virtuali possano arrestare in modo pulito e quindi arrestare l'host


1
Questa sembra la risposta più sensata supportata da entrambi i fornitori. Peccato che VMware non abbia pensato di integrare nulla in ESX / ESXi che lo faccia in modo nativo. La soluzione di rete richiede che almeno uno switch di rete sia alimentato tramite UPS.
Dunxd,

2
Non avrebbe molto senso non alimentare gli switch di rete tramite UPS ... consumano pochissima corrente e sono fondamentali per qualsiasi operazione di rete.
Massimo

21

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:

  1. L'UPS tramite usbhid-up segnala di aver interrotto l'alimentazione.
  2. (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.
  3. Quando il timer si attiva o quando l'UPS segnala che la batteria è scarica, il upsmon alza il flag FSD (spegnimento forzato) per aumentare.
  4. 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.
  5. L'indicatore FSD viene letto anche dal upsmon ESXi, che avvia l'arresto dell'host ESXi.
  6. 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).
  7. 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).
  8. Dopo aver eseguito lo script vmware-tools, la VM guest si spegne.
  9. 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).
  10. In 2 minuti rimanenti l'UPS interrompe l'alimentazione.
  11. 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.


14

Super domanda. In realtà è possibile farlo abbastanza bene - almeno su alcune configurazioni. Ho provato la seguente ricetta su un numero di host ESXi 5.5. Fondamentalmente, la soluzione è la seguente:

  1. Abilita l'accesso SSH sul tuo host ESXi
  2. Crea una VM Linux - Uso Ubuntu. Hai solo bisogno di una configurazione molto minimale - nessuna interfaccia grafica o altro.
  3. Connetti il ​​tuo dispositivo APC tramite USB all'host ESXi e passalo attraverso la VM Linux.
    • Assicurati che il controller USB che aggiungi alla VM corrisponda al controller USB fisico effettivo a cui è collegato il dispositivo APC, ovvero aggiungi un controller XHCI solo se il dispositivo fisico è un dispositivo USB3. Le mancate corrispondenze sembrano causare strani problemi nel driver del dispositivo USB Linux.
    • Se le cose non funzionano e vedi errori come ctrl urb status -62in dmesg, è probabile che il controller fisico non corrisponda a quello nella tua VM. Se corrispondono, beh, allora è un problema. Ho una configurazione con questo tipo di problema e nessuna soluzione reale ad esso.
  4. Installa apcupsdsulla VM Linux - in Ubuntu, puoi fare sudo apt-get install apcupsdper installare l'ultima versione. Anche il progetto NUT è bello, ma io sono un tradizionalista.
  5. Installa l'utility plink facendo sudo apt-get install putty-tools
  6. Connettiti al tuo host ESXI facendo plink root@<your ESXi host IP>. È possibile chiudere immediatamente la connessione. L'obiettivo è salvare la chiave host in modo che Plink non la richieda più quando la eseguiamo tramite uno script
  7. Modifica /etc/apcupsd/apcupsd.confe modificare gli elementi sottostanti in modo che corrispondano: UPSNAME < the name you'd like your UPS to have > UPSCABLE usb UPSTYPE usb # DEVICE DIRECTIVE should be blank for USB DEVICE anche assicurarsi che /etc/default/apcupsdhaISCONFIGURED=yes
  8. Modifica /etc/apcupsd/apccontrole scorri fino al doshutdowncaso. Fallo in questo modo: 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. Riavvia apcupsd usando sudo service apcupsd restarte vedi se le cose funzionano invocando apcaccess. In caso contrario, controlla i registri e dmesg
  10. Assicurarsi che tutte le VM che devono essere arrestate correttamente in caso di mancanza di corrente abbiano VMWare Tools installato. Accertarsi inoltre che facciano parte dell'elenco di avvio / arresto della macchina virtuale (in vSphere Web Client, andare a:) vCenter -> <your host> -> Manage -> Settings -> VM Startup/Shutdown. Assicurarsi che l'azione di arresto sia l'arresto del sistema operativo guest.

Una volta che hai queste cose in esecuzione, lo doshutdownscriptlet dal passaggio 8 viene invocato in caso di interruzione di corrente. Questo è il turno invoca lo script shutdown.sh sull'host ESXi, che segnala al pacchetto Strumenti VMWare in ogni VM sull'host di eseguire un arresto pulito tramite il sistema operativo guest. Nella mia esperienza, funziona meglio del software PowerChute di APC.

Se ti piace monitorare le cose dalle tue VM, puoi impostare istanze di apcupsd slave su di esse che si collegano alla VM Linux di controllo UPS principale. I file slave apcupsd.conf devono avere una voce come questa:
UPSTYPE net < your UPS control VM IP >:3551
voci simili UPSCABLEe simili non contano in questo caso. Funziona anche con la versione di Windows apcupsd(disponibile qui ). È possibile utilizzare il incluso apctray.exeper verificare lo stato corrente delle cose.

Questo praticamente lo copre, penso.


+1 ha funzionato come un fascino. Prima volta!
Morten Kristensen,

Questa risposta ha funzionato perfettamente, anche se presso l'ufficio del mio cliente abbiamo dovuto modificare doshutdownun po ' la sequenza. Abbiamo aggiunto ${APCUPSD} --killpowersubito prima della /usr/bin/plinkparte in modo che l'UPS si spenga dopo un po 'e si riavvii automaticamente quando viene ripristinata l'alimentazione. Inoltre, vale la pena notare che il passaggio 6 deve essere eseguito come rootacquisito tramite suo sudo su, ma non sudo -s .
Andrea Lazzarotto,

4

Si consiglia di utilizzare la funzionalità passthrough del dispositivo USB a un guest che esegue PowerChute o altro software in grado di monitorare lo stato dell'UPS e in grado di innescare un arresto sull'host ESXi (ad es. Apcupsd ). ESXi supporta ufficialmente solo un numero molto limitato di dispositivi USB per il passthrough , ma le persone si stanno collegando e passando attraverso diverse classi di dispositivi già da un po 'con successo variabile, ma l'APC UPS USB sembra funzionare secondo questo walkthrough per una VM Windows o questo per una VM Linux CentOS .


2

Dai un'occhiata a vSphere Management Assistant (vMA) da qui Lo usiamo nel mio ufficio per fare ciò che stai tentando, tuttavia con Smart-UPS collegato tramite USB anziché Back-UPS.


Si prega di aggiungere maggiori dettagli in quanto si tratta di un'installazione non documentata per quanto riguarda APC o vmware.
Dunxd

1

Sebbene possibile (probabilmente / in generale), non penso che uno spegnimento automatico di un computer con alimentazione a batteria sia una buona idea. Se lo farai, quindi per gli scopi e gli scopi più pratici, probabilmente dovresti semplicemente risparmiare i soldi di un UPS alimentato a batteria e lasciare che la perdita di energia spenga la macchina per te. (Certo, uno spegnimento pulito è sempre preferibile a una perdita di potenza, ma sembra che ti stia perdendo sul punto di avere un tempo della batteria superiore a un paio di minuti se spegni automaticamente tutto quando si perde l'alimentazione. )

Il modo in cui l'ho sempre gestito è quello di avere un monitoraggio che avvisa le SA quando l'alimentazione si interrompe, così le SA possono usare la loro materia grigia per decidere quando (o anche se) arrestare i server. Se si tratta di una breve interruzione, potrebbe non essere una buona idea arrestare i server, oppure potresti voler lasciare alcuni server attivi e funzionanti il ​​più a lungo possibile e spegnerli solo prima che la batteria stia per esaurirsi. Mi sembra davvero un compito decisionale più adatto a un essere umano che a una semplice regola.


Non è necessario configurare l'UPS per attivare immediatamente uno spegnimento, ma si desidera che si spenga prima che le batterie si scarichino completamente, altrimenti sarà necessario acquistare più batterie, in particolare in alcuni dei luoghi in cui lavoro e l'alimentazione viene interrotta quotidiano. È bello coinvolgere l'essere umano, ovviamente, ma non hai sempre un amministratore di sistema in un ufficio remoto.
Dunxd,

@dunxd Un buon punto: sono più abituato agli ambienti HA in cui almeno alcuni server devono rimanere alzati, venire all'inferno o in acqua alta, quindi il nome del gioco è capire come razionare al meglio la potenza (chiudendo selettivamente dispositivi down) per creare il minor impatto possibile sul servizio, che non sarà il focus o il caso d'uso di tutti.
HopelessN00b,

1

Ai vecchi tempi delle installazioni baremetal , APC PowerChute Plus era una parte essenziale del mio processo di installazione. Utilizzando il semplice cavo di segnalazione seriale e il relativo binario solo Red Hat , è stato facile impostare le regole per governare un server collegato localmente. Sono disponibili le notifiche di posta elettronica di base per eventi batteria UPC, eventi di alimentazione di linea e azioni di spegnimento:

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

UPS on battery: Blackout 000.0 V. 

e

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Normal power restored: UPS on line.  

o

POWERCHUTE MAIL MESSAGE
Message from PowerChute@Bonanza:

Shutdown started.  

Inoltre un'interfaccia ragionevole per vedere cosa stava succedendo ...

inserisci qui la descrizione dell'immagine

Tale software alla fine divenne commerciale (o fu sepolto sul sito Web APC). C'erano alcuni approcci open source per fornire qualcosa di simile. Ma tutto ciò si complica con i singoli host VMWare ESXi.

Sembra che questo sia qualcosa che VMWare avrebbe dovuto incorporare nell'hypervisor di base. È di base e potrebbe offrire un livello decente di protezione per gli utenti. I rimedi più comuni che vedo ora sono il passthrough USB a una VM dedicata, un approccio daemon di rete o fare ciò che faccio; non configurare alcun arresto automatico o della batteria ...

Certo, di solito vado con un UPS in grado di supportare il carico del sistema per un'ora o più, ma si verificano interruzioni prolungate. Forse un'alternativa è quella di raccogliere alcune schede di interfaccia di rete a basso costo o rinnovate e pianificare l'acquisto di dispositivi SmartUPS come minimo ...


0

Dai un'occhiata al seguente link . Non la soluzione più elegante, ma una soluzione molto pratica, molto semplice. Ci sono possibili inconvenienti in termini di sicurezza (a seconda del particolare progetto di rete, degli ospiti caricati sugli host e degli utenti che gli utenti hanno accesso a tali ospiti, ma è possibile effettuare quella chiamata.


0

Ho usato la soluzione MrMajestyk e ho modificato l'accesso ssh solo tramite plink con accesso ssh senza password usando la chiave pubblica rsa. La chiave rsa generata nella macchina virtuale apcupsd deve essere inclusa in / etc / ssh / keys-root / authorized_keys dell'host vmware.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.