Le basculement (failover en anglais) est un mécanisme permettant à un élément actif de basculer vers un élément alternatif en cas de non réponse du primaire.
Dans ce billet, je présente un script que j'ai écris, mettant en oeuvre les 2 mécanismes; load balancing et failover.
Supposons que nous ayons n serveurs identiques (d'un point de vue fonctionnel), et que nous voulons répartir la charge sur ces serveurs et implémenter le mécanisme de basculement (failover) en cas de panne d'un d'entre eux; le script suivant choisira de façon aléatoire l'IP d'un nœud actif. Chaque nœud actif a donc une probabilité de 1/n d'être choisie.lbfo.sh: nom du script;
nodes.txt: liste des différentes IP de chaque nœud;
n.b: L'utilitaire fping doit être installé.
lbfo.sh
#!/bin/bash
#lbfo.sh
loadBalance() {
count=0
while read node
do
fping -qt1 -c1 $node &>/dev/null && count=$(($count+1)) && TEST[$count]=$node
done < ./nodes.txt
JETON=$(( RANDOM%$count + 1))
echo ${TEST[$JETON]}
}
loadBalance
nodes.txt
192.168.5.1192.168.5.3
192.168.5.4
Pour des raisons de latences, le test d'un nœud est positif si son temps de réponse < 1ms en une seule requête.
Temps d'exécution:
Pour 3 noeuds dont 1 non actif: real 0m0.042s
Pour 254 noeuds dont 76 non actifs: real 0m3.264s