Come promesso qualche giorno fa ad alcuni utenti del blog, abbiamo realizzato questo post per spiegare come utilizzare un ups APC in congiunzione con i server ESXi, e invocare lo spegnimento delle virtual machines e di ESXi stesso.
Per realizzare il tutto, avrete bisogno di due cose:
– vmware VMA, ovvero la management appliance di vmware, basata su CentOS
– un ups APC dotato di scheda di rete
Nel nostro esempio, avremo un server vma all’indirizzo 192.168.1.17, e la scheda apc all’indirizzo 192.168.1.7. Modificate i valori in base al vostro ambiente. Ricordatevi inoltre che l’utente per comandare vma non è root ma vi-admin.
Per prima cosa, dobbiamo aggiungere all’ups il server vma tra i client a cui notificare lo shutdown. Tecnicamente in un sistema completamente virtualizzato questa sarà l’unica macchina registrata, a meno di non voler installare il network shutdown di APC su tutte le virtual machines. Per questa impostazione recarsi nella sezione come da figura:
Effettuiamo adesso la login via ssh su vma.
Per prima cosa, procuriamoci da questo indirizzo il pacchetto rpm a 64 per EL5, ovvero Red Hat Enterprise Linux 5, cui corrisponde la nostra vma CentOS. Scarichiamolo e salviamolo in /tmp.
Installiamo il pacchetto: sudo rpm -ivh apcupsd-3.14.8-1.el5.x86_64.rpm
Adesso dobbiamo crearci il nostro file di configurazione:
sudo rm /etc/apcupsd/apcupsd.conf
sudo nano /etc/apcupsd/apcupsd.conf
## apcupsd.conf v1.1 ## UPSCABLE ether UPSTYPE pcnet LOCKFILE /var/lock DEVICE 192.168.1.7:apc:"admin_password" UPSCLASS standalone UPSMODE disable
Sostituiremo ovviamente nella riga DEVICE la password con quella che avrete impostato per l’utente apc del vostro ups. Inoltre, sebbene sia un commento, NON togliete la prima riga racchiusa tra #.
Disabilitiamo il firewall che normalmente gira su VMA e avviamo il demone apc:
sudo chkconfig iptables off
sudo service iptables save
sudo service iptables stop
sudo /etc/init.d/apcupsd start
Tramite il comando apcaccess potremo interrogare l’ups, e se avremo come risposta i vari parametri e valori dell’ups stesso, avremo la conferma che la connessione sta funzionando correttamente.
Passiamo ora agli scripts. Siccome sono ogni tanto difficili da recuperare, vi linko i due script da utilizzare, scaricateli da qua e salvateli in /home/vi-admin(lo zip contiene i due script perl):
Rendiamoli eseguibili:
chmod +x /home/vi-admin/ghettoShutdown.pl
chmod +x /home/vi-admin/upsVIShutdown.pl
Aggiungiamo e verifichiamo i server ESXi mappati su vma:
sudo vifp addserver IP_ADDRESS_ESX1
sudo vifp addserver IP_ADDRESS_ESX2
sudo vifp listservers (ci elencherà i server ESX registrati in vma).
Editiamo adesso upsVIShutdown.pl e modifichiamo la riga my @hosts in modo che elenchi i server ESX che dovremo spegnere. Fate attenzione a mettere il nodo che ha in carico VMA per ultimo, ovviamente per consentirgli di spegnere prima tutte le altre VM… Il comando precedente (vifp listservers) permette di elencare i server ESX così come conosciuti da vma. E’ importante che questi nomi compaiano allo stesso modo all’interno dello script perl.
Modificate inoltre la stringa my $ups_vm_name = “vma”; dovete indicare tra virgolette il nome con cui la virtual machine VMA è stata registrata su ESX o vcenter.
C’è infine il parametro my $sec_to_sleep = 15; indica quanto deve attendere lo script tra l’invio del comando di shutdown delle VM e l’avvio dello schutdown dell’host ESX. 15 secondi sono decisamente troppo pochi, fate delle prove ma in ogni caso prevedete di alzarlo almeno a 60.
Editiamo adesso il file /etc/apcupsd/apccontrol. Trovate la sezione doshutdown e modificatela come segue:
doshutdown)
echo "UPS ${2} initiated Shutdown Sequence" | ${WALL}
/home/vi-admin/upsVIShutdown.pl
${SHUTDOWN} -h now "apcupsd UPS ${2} initiated shutdown"
;;
Praticamente abbiamo aggiunto la riga che chiama lo script perl.
Adesso, come ultima cosa, non vi resta che spegnere l’ups e verificare la partenza dello script!!!