Eteindre son ESXI avec un onduleur USB

Bon, vous n’êtes pas sans savoir (si vous fouillez sur ce blog) que j’ai 2 ESXI qui font tourner un vingtaine de machine.
Elles sont toutes sauvegardées grâce à VEEAM (dont j’ai déjà parlé).
Les sauvegardes sont sur un NAS Synology vi un partage NFS.
Les sauvegardes sont régulièrement copiées sur un disque qui n’est pas chez moi.
Oui, je sais … on est jamais trop prudent !

MAIS quid de l’énergie électrique qui alimente tout ça ?
Forcément, pour assurer une certaine robustesse à l’ensemble, je me suis motivé pour acheter un UPS (un onduleur quoi) en USB.
Quelle erreur … sans carte réseau sur l’engin autant dire impossible de gérer les ESXI pour qu’ils s’éteignent normalement via un message de l’onduleur.
Mais ça c’était avant 😉

Il y a une petite méthode qui fonctionne pas mal.

Installation de CENTOS

Déjà, un petit téléchargement de CENTos.
Il faut créer une VM avec CENTos dessus et surtout pour la partie réseau ne pas oublier d’activer le DHCP sur eth0 (perso, je me suis fait avoir et j’ai oublié).
Au pire en post-install, via la console VMware :
Editer : /etc/sysconfig/network-scripts/ifcfg-eth0
Changer : set onboot to yes reboot
un yum upgrade
Puis vous accrocher via vsphere l’onduleur UPS en USB.
Un coup de yum install usbutils

Installation de APCUPSD

Ajout du repo epel :
rpm -Uvh http://ftp.osuosl.org/pub/fedora-epel/6/i386/epel-release-6-7.noarch.rpm
Un coup de :
yum install apcupsd
chkconfig apcupsd on
edit /etc/apcupsd/apcupsd.conf

Il faut alors modifier :
• UPSNAME – on choisit un nom – UPSNAME myups01
• UPSCABLE – usb – UPSCABLE usb
• UPSTYPE – usb – UPSTYPE usb
• DEVICE – on touche pas – DEVICE
service apcupsd start

On teste avec : apcaccess qui doit remonter des informations sur l’UPS (genre voltage, minutes restentes, etc …)

Installation des VMware TOOLS

Il est très important de les installer.
Via le menu vsphere Vm -> Guest -> Install Tools (mon Vsphere est en anglais).
• yum install gcc kernel-devel
• mount /dev/cdrom /mnt
• cp /mnt/VMwareTools* /tmp
• cd /tmp
• tar xzvf VMWareTools…
• cd vmware-tools-distrib
• ./vmware-install.pl
On reboot la VM et normalement les outils sont vu comme installés dans vsphere.

Installation du serveur web UPS

Ça fait un petit plus pour voir en GUI ce qui se passe sur l’UPS.
• yum install apcupsd-cgi
• chkconfig httpd on
• service httpd start
• edit /etc/sysconfig/iptables (ajouté une ligne pour autoriser le port 80 – je copie la ligne ssh/22. Oui je suis une fainéant je sais.)
• service iptables restart
• edit /etc/httpd/conf.d/apcupsd.conf (commenter avec # Allow from lines et add Allow from all)
• service httpd reload

Naviguer avec une autre machine sur l’IP du CENTos
http://x.x.x.x/apcupsd

Autoriser l’accès SSH par certificat sans mot-de-passe

Il faut se loguer en SSH sur le centOS (pas besoin de détailler ça.. hein ?)

On commence par générer une clée
ssh-keygen -t rsa -b 4096 -C « [email protected] »
à la génération ne tapez surtout aucune mot de passe sinon aucun intérêt !

Puis on copie vers l’ESXI (dont le SSH doit évidemment être activé et surtout activé au reboot machine)
cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Et on finit par du chmod:
chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

Si tout a bien fonctionné, lorsque vous etes en console SSH sur le CENTos et que vous tapez :
ssh [email protected] « ls »

La commande LS s’exécute sans demande de password et renvoi le contenu du répertoire.

Paramétrage de l’extinction des machines

Je résume.
Votre UPS fonctionne en USB et est raccordé à la machine CENTOS.
Cette machine fait tourner APCUPSD et peut se connecter en SSH vers l’ESXI sans mot de passe grâce à un certificat.
Pour fermer les ESXI en cas de panne de courant. Il y a plusieurs méthodes. Perso je préfère un custom-script que le sh stop && shutdown.

Il faut modifier la ligne shutdown –h pour ajouter ssh [email protected] « disque/scripts/shutdown-all-vms.sh »
Disque étant un emplacement de disque dans l’ESXI (il suffit de copier un chemin accessible).

D’abord connectez vous en SSH sur l’ESXI.
Puis listez les VM :
vim-cmd vmsvc/getallvms

Après il faut écrire dans shutdown-all-vms.sh le script suivant : (le numéro après le # est ici fictif. Vous le récupérez de la commande juste au dessus)

#!/bin/sh
#Vmid Name File Guest OS Version Annotation
#156 nomdevm1
#157 nomdevm3

# shutdown VM in order
echo « Shutting down on essential… »
vim-cmd vmsvc/power.shutdown 157
vim-cmd vmsvc/power.shutdown 156

# leave the ups station running to continue exeuting this script

# sleep for X to ensure everything shutdown
echo « Sleeping for 180 seconds… »
sleep 180s

# shutdown the esx server
echo « Shutting down self… »
poweroff
Voila … tout le monde se ferme et l’ESXI en se fermant va couper correctement la VM CENTos si vous l’avez réglé dans vSphere :
HOST -> configuration -> virtual machine startup/shutdown -> Propertie -> allow VM to startup and shutdown with system
Dernier conseil.
Il faut branchez sur l’UPS : le ou les switch (sinon pas de communication réseau). Il faut ajouter dans le script de l’HOST la fermeture du NAS (et brancher le NAS sur l’UPS).