PrettyPrint

lundi 31 mars 2014

Load balancing & Failover script

La répartition des charges (load balancing en anglais) est un mécanisme permettant à plusieurs éléments actifs d'un réseau de partager une charge du travail; les éléments actifs étant généralement identique.
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.1
192.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

Aucun commentaire :

Enregistrer un commentaire