System/Backup

From LunaSys
Revision as of 14:32, 20 April 2012 by Eadam (talk | contribs) (→‎The backup servers)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

main sync scripts

On the controller server (always up)

  • Put the des3 key in a file called des3.txt, only retrievable trhough rsync (+ssh)
  • Edit backup.php:
<?
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); 
$vals = array(
	"time_before_shutdown"=>600,
	"mail_to"=>"etienne.adam@gmail.com",
	"backup_list"=>"",
);
$laptop = "192.168.1.2";
$lunasys = "lunasys.lunasys.fr";
$tania = "tania.lunasys.fr";
switch( $_POST["host"] ) {
case "server":
	$vals["backup_list"] = "$laptop:root:home/yves/Documents/:yves/ $laptop:root:var/lib/mysql/:laptop_mysql/";
	$vals["time_before_shutdown"] = "1800";
break;
case "locked-desktop":
	$vals["backup_list"] = "$lunasys:locked:data/music/:music/:--delete-after";
	$vals["time_before_shutdown"] = "-1";
break;
case "heisei":
	//...
break;
}
foreach( $vals as $k=>$v ) {
	setcookie($k, $v, time()+36000);
}
echo "OK";
  • Finally, Edit sync:
set -x

export BACKUP_MASTER=backup.lunasys.fr

export HOST_ID=$(hostname)

export BASE_PATH="/data"


if [ -f "/tmp/backup.log" ];
then
  rm /tmp/backup.log
fi

echo "OK, get my commands ("$HOST_ID")..." >> /tmp/backup.log

wget --save-cookies=/tmp/backup.txt --post-data="host=$HOST_ID" -O /dev/null http://$BACKUP_MASTER/backup.php
VAL_SLEEP=$(grep time_before_shutdown /tmp/backup.txt | awk '{ print $7 }')

VAL_MAIL=$(grep mail_to /tmp/backup.txt | awk '{ gsub(/%40/, "@", $7); print $7 }')

TO_BACKUPS=$(grep backup_list /tmp/backup.txt | awk '{ gsub(/%2F/, "/", $7); gsub(/\+/, " ", $7); gsub(/%3A/, ":", $7); print $7 }')

echo "OK, syncing... ("$TO_BACKUPS")"
echo "OK, syncing... ("$TO_BACKUPS")" >> /tmp/backup.log

for TO_BACKUP in $TO_BACKUPS
do
 set -- "$TO_BACKUP"
 IFS=":"; declare -a Array=($*)
 BACKUP_SERVER="${Array[0]}"
 BACKUP_USER="${Array[1]}"
 SRC="${Array[2]}"
 DEST="${Array[3]}"
 OPTIONS="${Array[4]}"
 echo "srv:"$BACKUP_SERVER" user:"$BACKUP_USER" src:/"$SRC" dest:"$BASE_PATH/$DEST" opts:"$OPTIONS
 if [ "$BACKUP_SERVER" == "fastprod" ]; then
  echo "FP special case" >> /tmp/backup.log
  rsync -avz -e ssh backup@$BACKUP_MASTER:/data/hosting/backup/backup_fastprod /scripts/
  /scripts/backup_fastprod >> /tmp/backup.log 2>&1
 elif [ "$BACKUP_SERVER" == "mails" ]; then
  echo "Mails backup" >> /tmp/backup.log
  rsync -avz -e ssh backup@$BACKUP_MASTER:/data/hosting/backup/backup_mail /scripts/
  /scripts/backup_mail >/tmp/backup_mail.log 2>&1
  cat /tmp/backup_mail.log >> /tmp/backup.log
 else
  echo "START SYNC [$BACKUP_SERVER:$SRC]" >> /tmp/backup.log
  rsync --dirs -avz $OPTIONS -e ssh "$BACKUP_USER@$BACKUP_SERVER:/$SRC" "$BASE_PATH/$DEST" >> /tmp/backup.log 2>&1
 fi
done

df -H >> /tmp/backup.log

echo "Done, send mail..."

SUBJECT="Backup report from "$HOST_ID
cat << EoF | cat - /tmp/backup.log | /usr/lib/sendmail -F "backup server" -t etienne.adam@gmail.com
Subject: $SUBJECT
Backup done
EoF

if [ "$VAL_SLEEP" == "-1" ]; then
  echo "Done. Do not shutdown."
else
  echo "Done, wait "$VAL_SLEEP" seconds..."

  # Wait
  sleep $VAL_SLEEP

  if [ -f "/tmp/donotshutdown" ]; then
    echo "abort shutdown."
  else
    echo "shutdown NOW !"
    sleep 60
    shutdown -h now
  fi
fi


The backup servers

A backup server wake up once a day, retrieve its commands, execute those, and shut down.

Edit /etc/rc.local and add:

...
set -x
set +e

sleep 5
i=0
while [ $i -lt 3 ]; do
  echo "rsync $i"
  rsync -avz -e ssh root@backup.lunasys.fr:/data/hosting/backup/sync /root/sync
  if [ $? -eq 0 ]; then
    break
  fi
  sleep 30
  i=$(i + 1)
done

/root/sync > /var/log/sync.log 2>&1 &
...