Advertisement
flipje

cluster-backup-script

Aug 20th, 2012
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.85 KB | None | 0 0
  1. #!/bin/bash -x
  2. # +-----------------------------------------------------------------------------------------+
  3. # | Dit script bepaald welke node live is, en doet vervolgens de andere node backupen.      |
  4. # | We doen een arping om het mac adres te bepalen en gebruiken dit om de actieve node te   |
  5. # | En draaien een backup van de andere node (minder belasting van de fileserver en dus     |
  6. # | beter performance van het forum.                                                        |
  7. # +-----------------------------------------------------------------------------------------+
  8.  
  9. # Global variables:
  10.  
  11. PATH='/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin'
  12. SCRIPT_PATH="${0}"
  13. ARGS="${#}"
  14. ARG1="${1}"
  15.  
  16. NODE1='1.1.1.1'
  17. CONF1='/etc/rsnapshot/rsnapshot-data-node1.conf'
  18.  
  19. NODE2='1.1.2.2'
  20. CONF1='/etc/rsnapshot/rsnapshot-data-node2.conf'
  21.  
  22. CLUSTERIP='1.1.1.1'
  23.  
  24.  
  25. # Functions:
  26.  
  27.   # exit function
  28.   function die()
  29.   {
  30.     echo "${SCRIPT_PATH}:\n${1}"
  31.     exit 2
  32.   }
  33.  
  34.   # Shows usage function.
  35.   function fShowUsage()
  36.   {
  37.     echo "Usage: ${SCRIPT_PATH}"
  38.     exit 0
  39.   }
  40.  
  41.   # check for.......
  42.   function fCheck()
  43.   {
  44.     # script depends on:
  45.     [ -x /usr/bin/arping ] || die "This script depends on Arping"
  46.  
  47.     # user must be root:
  48.     [ "$(whoami)" = root ] || die "User must be root!"
  49.  
  50.     # check for arguments:
  51.     [ "${ARGS}" = '1' ] || fShowUsage
  52.  
  53.     return 0
  54.   }
  55.  
  56.   # The main function.
  57.   function fMain()
  58.   {
  59.    case "${ARG1}"
  60.    in
  61.      usage)
  62.        fUsage
  63.        ;;
  64.      daily)
  65.        fBackup "daily"
  66.        ;;
  67.      hourly)
  68.        fBackup "weekly"
  69.        ;;
  70.      monthly)
  71.        fBackup "monthly"
  72.        ;;
  73.      *)
  74.        fUsage
  75.        ;;
  76.    esac
  77.  
  78.    return 0
  79.    }
  80.  
  81.    # the backup function
  82.    function fBackup()
  83.    {
  84.     # get arguments
  85.     if [ "${1}" = 'daily' ] ; then
  86.        BACKUP='daily'
  87.     elif [ "${2}" = 'weekly' ]
  88.        BACKUP='weekly'
  89.     elif [ "${ARG1}" = 'monthly' ]
  90.        BACKUP='monthly'
  91.     else
  92.        fUsage
  93.     fi
  94.  
  95.    # get mac from first and second node:
  96.    local MAC1="$( arping -f ${NODE1} | grep 'Unicast reply from'  | awk '{print $5}' | tr -d "[]" )"
  97.    local MAC2="$( arping -f ${NODE2} | grep 'Unicast reply from'  | awk '{print $5}' | tr -d "[]" )"
  98.  
  99.    # get cluster node
  100.    local CLUSTERMAC="$( arping -f ${CLUSTERIP} | grep 'Unicast reply from'  | awk '{print $5}' | tr -d "[]" )"
  101.  
  102.    # do the magic:
  103.    if [ "${CLUSTERMAC}" = ${MAC1} ] ; then
  104.       CONF="${CONF2}"
  105.       NODE="${NODE2}"
  106.    elif [ "${CLUSTERMAC}" = ${MAC2} ]
  107.       CONF="${CONF1}"
  108.       NODE="${NODE1}"
  109.    fi
  110.  
  111.    # backup :
  112.    { /usr/bin/rsnapshot -c "${CONF}" "${BACKUP}" > /dev/null 2>&1; } || die "Failed to backup ${NODE}"
  113.  
  114.    return 0
  115.    }
  116.  
  117.  
  118.  # check environment:
  119.   fCheck
  120.  
  121.  # Start the program:
  122.   fMain "${@}"
  123.  
  124.  # Exit with previous return code:
  125.   exit "${?}"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement