====== Rebooter Persan ======
===== Actions préalables =====
==== Vérifier si un fsck va être déclenché ====
Une vérification de disque peut rallonger énormément la durée du redémarrage. Vérifier :
df | awk '/^\/dev\/mapper/ {print $1}' | xargs -I {} sh -c 'echo {}; tune2fs -l {}' | awk '/^\/dev/ {print $1} /^Filesystem state/ {print $3, " ",$4}'
==== Prévenir les usagers ====
=== Sur status.chapril.org ===
Ouvrir une action de maintenance sur https://status.chapril.org/ :
* Utiliser le modèle ''reboot cluster'' ;
* Renseigner ''When is this maintenance scheduled for?'' ;
* Ne pas remplir ''When did this maintenance complete?'' ;
* Cocher ''Notifier les abonnés ?''.
=== Sur chapril@april.org puis sur admins@chapril.org ===
Envoyer deux courriels séparés aux listes : [[chapril@april.org]] puis [[admins@chapril.org]] :
From: François Poulain
To: chapril@april.org
Subject: [Chapril] Reboot du cluster
Coucou,
Je vais rebooter le cluster pour tenir compte du dernier upgrade
noyal de sécurité.
François
--
François Poulain
=== Sur pouet.chapril.org ===
À l'aide du compte https://pouet.chapril.org/@chapriladmin :
Nous allons redémarrer les serveurs de notre Chapril https://chapril.org pour tenir compte des mises à jour.
L'opération prendra environ 30 minutes, durée pendant laquelle les services seront indisponibles.
=== Sur les machines ===
Vérifier qui est présent sur les VM :
cluster_guests=$(ssh root@persan.chapril.org "virsh list --name"; ssh root@korat.chapril.org "virsh list --name")
for guest in $cluster_guests ;
do
echo "===== $guest ====="
cmd='for i in $(ps auxwww|grep "\-bash" | awk '\''{ print $2 }'\'' ); do cat "/proc/$i/environ" ; done 2>/dev/null |strings |grep GIT_AUTHOR_NAME | sort | uniq'
ssh root@$guest.cluster.chapril.org "$cmd"
done
Pour le cas où un animateur travaillerait sur sa VM sans avoir vu ni le courriel ni ''status.chapril.org'', envoyer un avertissement sur chaque machine.
./do.sh "wall 'Bonjour. Reboot SI Chapril à 13h15. Cpm.'"
=== Sur IRC et XMPP ===
* IRC : salon ''#chapril'' sur ''irc.libera.chat:6697'' ([[https://webchat.april.org/|webchat]]) ;
* XMPP : ''chapril@muc.chapril.org''.
==== Couper le monitoring ====
* Mettre les //hosts// concernés en //downtime// ;
* Propager les //downtimes// en questions sur les services des //hosts//.
Le script suivant peut être utilisé pour couper le monitoring sur les hôtes et propager les //downtimes// sur les services hébergés.
Les identifiants sont définis dans le fichier ''/etc/icinga2/conf.d/api-users.conf'' sur la machine ''admin.cluster.chapril.org''.
L'utilitaire ''[[https://github.com/jpmens/jo|jo]]'' ([[https://packages.debian.org/stable/jo|paquet Debian]]) est requis.
curl -k -s -S -i -u ${ICINGA_USER}:${ICINGA_PASSWORD} -H 'Accept: application/json' \
-X POST 'https://icinga.chapril.org:5665/v1/actions/schedule-downtime' \
-d "$(jo -p \
pretty=true \
type=Host \
filter="match(\"persan*\", host.vars.hote)" \
all_services=true \
author="${GIT_AUTHOR_NAME}" \
comment="Persan upgrade maintenance" \
fixed=true \
start_time=$(date +%s -d "+0 hour") \
end_time=$(date +%s -d "+1 hour"))"
==== Lister les VM actives ====
Noter la liste des VM actives pour comparer avec après le redémarrage.
virsh list
===== Arrêt de Persan =====
Arrêter les VM avant de redémarrer Persan.
==== Arrêter les VM ====
cd /etc/libvirt/qemu
virsh list --state-running --name | xargs -I{} virsh shutdown {}; watch virsh list
===== Redémarrage de Persan =====
reboot
==== Remise en marche de Persan ====
Attendre que le système ait fini de démarrer (état à //running//) :
watch "systemctl status | grep State | head -1"
Démarrer les VM :
Ne pas redémarrer la VM ''template''.
virsh list --state-shutoff --name | grep -v template | xargs -I{} virsh start {}; watch virsh list
==== Lister les VM actives ====
virsh list
Et comparer à la liste avant ''reboot''.
==== Vérifier le bon démarrage des VM ====
Parfois les VM démarre mais en statut //degraded//.
Il convient de vérifier par une commande :
./do.sh "systemctl status | head -2"
Et pour les VM n'ayant pas un statut //running//, faire la commande suivante pour identifier le service en souffrance :
systemctl list-units
==== Vérifier les sondes dans Icinga ====
Si un problème subsiste alors les sondes devraient le faire apparaître dans Icinga.
Vérifier que les alertes actives sont acceptables.
==== Clôturer l'action de maintenance status.chapril.org ====
Éditer l'action de maintenance :
* //Status// : sélectionner ''complete'' ;
* //When did this maintenance complete?// : mettre la date et l’horaire de fin.