Advertisement
Guest User

Failover

a guest
Apr 3rd, 2011
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.35 KB | None | 0 0
  1. #!/bin/bash --
  2.  
  3. # Joaquín Moreno 2011
  4. # FailOver 1.0
  5.  
  6. #Funcionamiento
  7. #Comprueba si tiene acceso a google.es, sino, intenta con 8.8.8.8, si falla entonces:
  8. #   Repite la operación en cada ejecución del script hasta tantas veces como el valor
  9. #   de la variable INTENTOS. Si sigue fallando y se consumen todos los INTENTOS entonces:
  10. #       Se cambia la ruta a la secundaria. Mientras se encuentre en este estado:
  11. #           Cada RESTAURAR veces de la ejecución del script comprobara si el sistema se ha
  12. #           restablecido. Para ello restaurará la ruta principal, comprobará conexión, si falla
  13. #           entonces vuelve a pone la de backup.  
  14.  
  15. #Requisitos:
  16. #Poner la ruta de la principal únicamente
  17. #Anyadir en el contrab una ejecución cada 5 minutos */5 * * * * script
  18.  
  19.  
  20. ### Variables ###
  21. #
  22. CONFIG="/usr/local/failover/config"
  23. #Interfaz primaria
  24. PRINCIPAL="eth0"
  25. #Interfaz de backup
  26. SECUNDARIA="eth1"
  27. #Numero de intentos antes de cambiar a BackUp
  28. INTENTOS=3
  29. #Es donde escribimos los intentos realizados
  30. TIMEOUT="/usr/local/failover/timeout"
  31. #Numero de intentos antes de restaurar
  32. RESTAURAR=6
  33. #Es donde escribimos los intentos realizados
  34. FICREST="/usr/local/failover/restaurar"
  35. #Vale 0 si estamos en principal o 1 si estamos en backup
  36. BACKUP="/usr/local/failover/backup"
  37. #Log del agente
  38. LOG="/usr/local/failover.log"
  39. #Dominios a los que consultamos
  40. DOMAIN1="www.google.com"
  41. DOMAIN2="8.8.8.8"
  42.  
  43. ### Funciones ###
  44. #Comprobamos si existe las dependencis del agente
  45. checkDep()
  46. {
  47.     [ -f $TIMEOUT ] ||
  48.     {
  49.         echo "Intento" > $TIMEOUT
  50.     }
  51.         [ -f $FICREST ] ||
  52.     {
  53.         echo "Esperar" > $FICREST
  54.     }
  55.     [ -f $BACKUP ] ||
  56.     {
  57.         echo "0" > $BACKUP
  58.     }
  59. }
  60.  
  61. #Configura las puertas de enlace
  62. checkConfig()
  63. {
  64.     [ -f $CONFIG ] ||
  65.     {
  66.         GW=""
  67.         getGW $PRINCIPAL
  68.         echo "$GW" > $CONFIG
  69.         getGW $SECUNDARIA
  70.         [ "$GW" != "" ] &&
  71.         {
  72.             echo "$GW" >> $CONFIG
  73.             /sbin/route del default gw $GW
  74.         }
  75.     }
  76. }
  77.  
  78. #Obtención del gateway
  79. getGW()
  80. {
  81.     #GW=`/sbin/ip route  | grep default | grep $1 | awk {'print $2'}`
  82.     GW=`/sbin/route -n | grep $1 | grep 0.0.0.0 | grep ^'0.0.0.0' | awk {'print $2'}`
  83. }
  84.  
  85. #Cambio a la linea de backup
  86. setBackup()
  87. {
  88.     #Obtenemos las puertas de enlace
  89.     GW=`tail -1 $CONFIG`
  90.     #Cambiamos la ruta
  91.     /sbin/ip route flush cache
  92.     /sbin/route del default
  93.     /sbin/route add default gw $GW
  94. }
  95.  
  96. #Cambio a la linea principal
  97. setPrincipal()
  98. {
  99.     #Configuramos la principal
  100.     GW=""
  101.     GW=`head -1 $CONFIG`
  102.     #Cambiamos la ruta
  103.     /sbin/ip route flush cache
  104.     /sbin/route del default
  105.     /sbin/route add default gw $GW
  106.    
  107.     #Comprobar conectividad contra google
  108.     if /bin/ping -c3 $DOMAIN1 >/dev/null 2>&1;
  109.     then
  110.         echo "[OK] $DATE -> RESTAURADO" >> $LOG
  111.         echo "0" > $BACKUP
  112.     else   
  113.         #Comprobamos contra la IP
  114.         if /bin/ping -c3 $DOMAIN2 >/dev/null 2>&1;
  115.         then
  116.             echo "[OK] $DATE -> RESTAURADO $DOMAIN2, ¿DNS ERROR?"  >> $LOG
  117.             echo "0" > $BACKUP
  118.         else
  119.             setBackup
  120.             echo "[INFO] $DATE -> NO RESTAURADO" >> $LOG
  121.         fi
  122.     fi
  123. }
  124.  
  125. #Generación de evento
  126. setEvento()
  127. {
  128.     DESC="La linea principal ha caido, se pasa a backup"
  129.     #Enviar un correo mediante mail o usar el gestor de tickets que tengamos
  130. }
  131.    
  132. ### Principal ###
  133. #Hora
  134. DATE=`date +%Y-%m-%d_%H:%M`
  135.  
  136. #Dependencias
  137. checkDep
  138.  
  139. #Configuracion de las puertas de enlace
  140. checkConfig
  141.  
  142. #SI ESTAMOS EN LINEA BACKUP
  143. FOUND=`cat $BACKUP`
  144. [ "$FOUND" == "1" ] &&
  145. {
  146.     FOUND=`cat $FICREST | wc -l`
  147.  
  148.     if [ "$FOUND" == "$RESTAURAR" ] ;
  149.     then
  150.         setPrincipal
  151.         echo "Esperar" > $FICREST
  152.     else
  153.         echo "Esperar" >> $FICREST
  154.     fi
  155.    
  156.     exit 0
  157. }
  158.  
  159. #SI ESTAMOS EN LINEA PRINCIPAL
  160. #Comprobar conectividad contra google
  161. if /bin/ping -c3 $DOMAIN1 >/dev/null 2>&1;
  162. then
  163.     echo "[OK] $DATE -> $DOMAIN1"
  164.     echo "Intento" > $TIMEOUT
  165. else   
  166.     #Comprobamos contra la IP
  167.     if /bin/ping -c3 $DOMAIN2 >/dev/null 2>&1;
  168.     then
  169.         echo "[OK] $DATE -> $DOMAIN2, ¿DNS ERROR?" >> $LOG
  170.         echo "Intento" > $TIMEOUT
  171.     else
  172.         #Si hay $INTENTOS(lineas) en el timeout, cambiamos la ruta a la de backup
  173.         FOUND=`cat $TIMEOUT | wc -l`
  174.         if [ "$FOUND" == "$INTENTOS" ];
  175.         then
  176.             #Cambiamos de línea  
  177.             echo "[ERROR] $DATE -> BACKUP ACTIVADO" >> $LOG
  178.             setBackup
  179.             #Generamos evento
  180.             setEvento
  181.             #Se restaura el estado
  182.             echo "Intento" > $TIMEOUT
  183.             #Notificamos que estamos en línea de backup
  184.             echo "1" > $BACKUP
  185.         else
  186.             echo "[ERROR] $DATE -> Fallo numero $FOUND"  >> $LOG
  187.             echo "Intento" >> $TIMEOUT
  188.         fi
  189.     fi
  190. fi
  191.  
  192. exit 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement