Articlename: auto. failover für ipvs Keywords: automatischer failover für ipvs linux virtual server bash script Date: 22.04.2007, 20:48 Views: 464 Categoryname: Bash ---------------------------------------- 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 (http://sourceforge.net/project/ showfiles.php?group_id=29880&package_id=21883) benötigt. Nach dem Start begibt sich das Skript in eine Endlosschleife. ------- Code: /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 ------- End-Code -------