Sourcecodes - auto. failover für ipvs

Sprachenübersicht/Bash

auto. failover für ipvs

Diese Seite wurde 1605 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: automatischer failover für ipvs linux virtual server bash script

Dieses kleine Bash-Skript sorgt bei einem IPVS-Cluster dafür, dass bei einem Ausfall die übrigen Server die Arbeit übernehmen.

Das Skript wurde für LinuxVirtualServer geschrieben. IP, Port und IPVS-Optionen (z.b. NAT, DR, IPIP) lassen sich am Anfang des Skripts anpassen.

Zusätzlich wird das Programm check_http von Nagios-Plugins benötigt.

Nach dem Start begibt sich das Skript in eine Endlosschleife.

/usr/local/sbin/check-nodes.sh:


#!/bin/bash

WORKER="192.168.1.11 192.168.1.12" # ip list of workers, seperated by commas
BAL_IP="192.168.0.65" # external ip of the balancer
NAGIOS="/usr/nagios/libexec" # path to nagios-plugins
PORT="80" # which port
IPVS_OPTS="-m" # options passed to ipvsadm

check_node() {
${NAGIOS}/check_http -H $i -t 5 &> /dev/null
NAG=$?
if [ ${NAG} -eq 0 ]; then
# echo $i "up"
 return 0
else
# echo $i "down"
 return 255
fi
}

W=0 #initialize the status-veriables
for a in ${WORKER}; do
  STATUS[${W}]=TRUE;
  ((W++))
done

echo "configuration:"
echo "balancer-ip: ${BAL_IP}"
echo "worker-ips:"
for i in ${WORKER}; do
echo ${i}
done
echo
echo

while (true); do
  X=0
  for i in ${WORKER}; do
    check_node
    RETURN=$?
    if [ ${RETURN} -eq 255 ] && [ ${STATUS[${X}]} = TRUE ]; then
      /sbin/ipvsadm -e -t ${BAL_IP}:${PORT} -r ${i}:${PORT} ${IPVS_OPTS} -w0
      STATUS[${X}]=FALSE
      echo "${i} went down"
    elif [ ${RETURN} -eq 0 ] && [ ${STATUS[${X}]} = FALSE ]; then
      /sbin/ipvsadm -e -t ${BAL_IP}:${PORT} -r ${i}:${PORT} ${IPVS_OPTS} -w1
      STATUS[${X}]=TRUE
      echo "${i} comes up"
    else
      echo "no status change for ${i}"
    fi
    ((X++))
  done
  sleep 1
  echo
done

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, der Artikel kann wiederhergestellt werden.

Sprachenübersicht/Bash/auto. failover für ipvs