Arrêt automatique de XCP-NG lors de pannes de courant à l'aide d'un UPS USB

Arrêt automatique de XCP-NG lors de pannes de courant à l'aide d'un UPS USB
Photo de Kelly Sikkema

Pour éviter les dommages causés par une panne de courant, il est important d'avoir des dispositifs de protection comme un onduleur (ou UPS, Uninterruptible Power Supply) pour sauvegarder votre équipement et vos données. Cependant, l'UPS ne garantit pas un fonctionnement ininterrompu en cas de coupure de courant prolongée. Vous devez arrêter correctement vos serveurs et les rallumer une fois la perturbation terminée. Pour automatiser le processus d'arrêt des services en cas de coupure de courant, vous pouvez configurer l'arrêt automatique des machines virtuelles et de l'hôte en utilisant un UPS connecté en USB. Ce guide concerne spécifiquement l'hyperviseur open-source XCP-NG, et j'utiliserai l'UPS EATON Ellipse ECO 1200 comme exemple.

Image de crast.net

Prérequis

Vous allez commencer par vous connecter à votre hôte XCP-NG en SSH.

# Remplacez l'ip par celle de votre hôte
ssh root@192.168.1.2

Maintenant, vous allez installer NUT. C'est un programme de surveillance d'UPS open source, qui déclenchera la procédure d'arrêt lorsque les batteries de l'UPS sont trop basses.

yum -y install nut --enablerepo=epel
yum -y install nut-client --enablerepo=epel

Une fois NUT installé, téléchargez xen-shutdown.sh. Ce script permet d'éteindre correctement toutes les VMs, et finalement l'hôte XCP-NG.

# Ouvrez le dossier de configuration du server NUT
cd /etc/ups

# Téléchargez le script
wget https://raw.githubusercontent.com/serrc-techops/NUT-Configuration/master/slave/xen/xen-shutdown.sh

# Et n'oubliez pas de rendre le script executable
chmod +x xen-shutdown.sh

Configuration

Vous allez maintenant configurer les fichiers dans /etc/ups comme ca :

# Exemple de commande pour editer un fichier de configuration
# Si vous lisez ce guide vous devriez deja la connaître
nano /etc/ups/fichier.conf

upsmon.conf

# Vers la ligne 6 
RUN_AS_USER root

# Vers la ligne 33
MONITOR mon_ups@localhost 1 admin "mon_mot_de_passe" master

# Vers la ligne 111
SHUTDOWNCMD "/etc/ups/xen-shutdown.sh"

nut.conf

# Vers la ligne 33
MODE=netserver

ups.conf

# Ajoutez ces lignes au début du fichier.
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# Pour obtenir ces informations, 
# lancez la commande "nut-scanner -U".
# Pour les autres champs, laissez les valeurs ci-dessous.
# @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

pollinterval = 1
maxretry = 3
[mon_ups]
driver = usbhid-ups
port = auto
desc = "mon_ups"
vendorid = "0463"
productid = "FFFF"
product = "Ellipse ECO"
serial = "000000000"
vendor = "EATON"
bus = "005"

upsd.users

# Ajoutez ces lignes au début du fichier.
[admin]
password = "mon_mot_de_passe"
actions = set
actions= fsd
instcmds = ALL

Pour finir

Une fois la configuration terminée, vous pouvez activer les services NUT.

systemctl enable --now nut-server
systemctl enable --now nut-monitor

Si le lancement du service échoue, redémarrez votre hôte.

Finalement, vous pouvez tester cette configuration en coupant/rétablissant le courant de votre UPS. Un message devrait s'afficher dans votre session SSH.

# Courant coupé
Broadcast message from root@xcp1 (Tue May 16 19:00:44 2023):
UPS ups@localhost on battery

# Courant rétabli
Broadcast message from root@xcp1 (Tue May 16 19:01:09 2023):
UPS ups@localhost on line power