Table des matières

Check oco

oco (Ovh Check Out) est un petit serveur en perl “made in ovh”, qui sert à sortir ou rentrer une machine d'une ip load balancing.

Installation

(cf. http://guides.ovh.net/Oco)

cd /root
wget ftp://ftp.ovh.net/made-in-ovh/oco/oco-ded.tar.gz -O oco-ded.tar.gz
tar xf oco-ded.tar.gz
cd oco-ded-1.15
./install.sh
# on vérifie
telnet localhost 79
# normalement, ça répond KO (pas de http sur le host) mais ça répond
cd /usr/local/oco/
# on vire le test par defaut
mv bin/60sec/http bin/examples/
# et on met le notre
touch bin/60sec/http
chmod +x bin/60sec/http

Ensuite, pour sortir une machine du cluster

# sortie cluster, depuis le host
echo 305 > /usr/local/oco/result/KOvolontaire
# remise dans le cluster
rm /usr/local/oco/result/KOvolontaire

Personnalisation

Par rapport au script “de base” livré avec oco, on peut personnaliser ses tests, par exemple :

cd /usr/local/oco/
# on vire le test par defaut
mv bin/60sec/http bin/examples/
# et on met le notre
touch bin/60sec/http
chmod +x bin/60sec/http

Ce fichier bin/60sec/http contient par ex

#!/bin/bash
TMP=/tmp/http.oco
# on met la liste des résultats considérés comme bon (on peux en mettre un seul)
EXPECTED_RESULTS='truc1_OK truc2_OK truc3_OK'
IPLB=<notre ip lb>
OUT_VALUE=302
OUT_FILE=/usr/local/oco/result/$(basename $0)
 
echo KO > $TMP
wget http://${IPLB}/ -O $TMP > /dev/null 2>&1
 
for r in $EXPECTED_RESULTS
do
  [ $r = $(<$TMP) ] && OUT_VALUE=200 # On a trouvé une valeur correcte
done
echo $OUT_VALUE > $OUT_FILE

Il reste à coder ce que vous voulez tester (dans le langage que vous voulez) dans le script appellé par défaut sur http:${IPLB}/ ===== Monitoring ===== Pour vérifier le résultat d'oco, et remonter un mail d'alerte <code bash> #!/bin/sh LOG=/tmp/$(basename $0).$(date '+%Y-%m-%d_%H') LOGOLD=/tmp/$(basename $0).$(date –date '1 hours ago' '+%Y-%m-%d_%H') DATE=$(date '+%Y-%m-%d_%H%M') # Les binaires TELNET=/usr/bin/telnet SED=/bin/sed MAIL=/usr/bin/mail MV=/bin/mv res=$(TELNET 127.0.0.1 79 2>/dev/null|$SED -nre '4 s/[0-9]+ ([OK]+).*/\1/p') if [ “$res” != “OK” ] then # Ce script est appelé fréquemment, on envoie un mail par heure max if [ ! -f $LOG ] then echo “Résultat d'un appel oco ($TELNET 127.0.0.1 79) :” > $LOG $TELNET 127.0.0.1 79 » $LOG 2>&1 $MAIL -a “Content-Type: text/plain; charset=UTF-8” -s “$DATE OCO HS sur $(hostname)” root < $LOG else if [ -f $LOGOLD ] then echo -e “$DATE Le raid est rétabli sur $(hostname)” » $LOGOLD $TWC info c0 » $LOGOLD $MAIL -a “Content-Type: text/plain; charset=UTF-8” -s “$DATE RAID OK sur $(hostname)” root < $LOGOLD $MV $LOGOLD $LOGOLD.ok fi fi fi </code>