SUNScholar/Disaster Recovery/Backups

From Libopedia
Revision as of 14:21, 10 August 2012 by Hgibson (talk | contribs) (Created page with "==Local Backup== ===Example script=== Here is a sample script to use for backups. It backups each day at midnight for a week only. A cron job entry is added to the root crontab t...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Local Backup

Example script

Here is a sample script to use for backups. It backups each day at midnight for a week only. A cron job entry is added to the root crontab to run the script at midnight each day. To add the script to the root crontab type the following as the root user:

crontab -e
@midnight /usr/local/bin/backup.sh

Save and exit the crontab editor.

Type the following.

nano /usr/local/bin/backup.sh

Now copy and paste the following into the open editor and modify the backup variables to suit your location and server.

#!/bin/bash

## Setup the backup variables ##
LOCAL_SERVER="etd.sun.ac.za"
LOCAL_FOLDER="/var/backup"  
BACKUP_LOGFILE="/var/log/backup.log"
# Day Of the Week
DOW=`date +%a`
TIME=`date`

{
## Timestamp the beginning of the backup ##
echo "Backup for $LOCAL_SERVER started: $TIME"

## Check that we have a backup folder ##
if [ ! -d $LOCAL_FOLDER ]; then
  mkdir -p $LOCAL_FOLDER
  echo "New backup folder created"
  else
  echo "Backup started: $TIME"
fi

## Make sure we're in / since backups are relative to that ##
cd /

## Get a list of the installed software ##
dpkg --get-selections > $LOCAL_FOLDER/installed-software.$DOW

## Backup the server config files ##
echo "Archive '/etc' folder"
tar czf $LOCAL_FOLDER/etc.tgz.$DOW etc/

## Backup the '/root' folder ##
echo "Archive '/root' folder"
tar czf $LOCAL_FOLDER/root.tgz root/

## Backup the '/usr/local' folder which houses customised software ##
echo "Archive '/usr/local' folder"
tar czf $LOCAL_FOLDER/usr-local.tgz usr/local/

## Backup the Dspace postgres database which houses the catalog of the digital assets ##
su - postgres -c "pg_dump dspace > /tmp/dspace-db.sql"
cp /tmp/dspace-db.sql $LOCAL_FOLDER/dspace-db.sql-$DOW
su - postgres -c "vacuumdb --analyze dspace > /dev/null 2>&1"

## View the backup folder ##
ls -lhS $LOCAL_FOLDER

## Timestamp the end of the backup ##
TIME=`date`
echo "Backup for $LOCAL_SERVER ended: $TIME"
} > $BACKUP_LOGFILE

## Make a daily copy of the backup log file ##
cp $BACKUP_LOGFILE $BACKUP_LOGFILE.$DOW

## Email the backup logfile to the root user ##
cat $BACKUP_LOGFILE.$DOW | mail -s "Daily backup log from $HOSTNAME" root

### EOF ###

Save the file with CTL+O and exit with CTL+X.

Now we make the backup script executable.

sudo chmod 0755  /usr/local/bin/backup.sh

Invoke Local Manual Backup

After you have completed the above, you can start a backup anytime by typing the following as the root user:

/usr/local/bin/backup.sh

Then check the files in the backup folder by typing the following:

ls -lh /var/backup

Backup to Remote Server

The intention is to backup the files in /var/backup to a remote backup server. On our campus we have a server in a secure location for housing the remote backups. This server has a very large RAID disk storage and has Ubuntu 10.04 LTS installed. BackupPC is installed on the server. BackupPC uses the rsync method for pulling in the backups from the clients.

To setup a similar system, first configure the server and then configure the clients.

Server Setup

It is assumed you will be using Ubuntu 10.04 LTS for the backup server. If so, do the following to set it up as the backuppc server.

Login and become the root user.

Create a firewall rule for each client to be backed up as follows:

ufw allow from %my-client-to-be-backed-up-ipaddress% to any

Now test your rsync connection to each client as follows:

rsync %my-client-to-be-backed-up-ipaddress%::backup

You should get a listing of the backup files in the clients /opt/backup folder.

If the above is successful then install backuppc on the server as follows:

apt-get install backuppc

BackupPC has a web interface which you enable as follows:

cd /etc/apache2/conf.d
ln -s /etc/backuppc/apache.conf backuppc
/etc/init.d/apache2 restart

Now we add an admin backuppc user as follows:

htpasswd /etc/backuppc/htpasswd admin

You will prompted to enter a password twice

Now open a web browser and type the following into the address bar:

http://%my-backup-server/backuppc

You will be prompted for the username and password that you set up above.

After logging in and clicking on "Host Summary", you should be presented with a screen like the following:

Backuppc-1.png

Now setup backuppc by adding host configurations. There is plenty of backuppc documentation out there.

However, below is an example screenshot of the critical configuration, Xfer settings, that are done per host. Check out highlighted boxes in red.

Backuppc-2.png

Continue to setup backuppc as needed. That's it.

Client Setup

Create an rsync config file.

nano /etc/rsyncd.conf

Copy and paste the following.

[backup]
path = /var/backup

[home]
path = /home

Enable the rsync server.

nano /etc/default/rsync

Change false to true.

RSYNC_ENABLE=true

Now you start the rsync server as follows:

/etc/init.d/rsync restart

Check the rysnc server.

rsync localhost::backup
rsync localhost::home

Now we add a firewall rule to allow the backup server to get to the backup files, type as follows:

ufw allow from %my-backup-server-hostname% to any 873

Replace %my-backup-server-hostname% with the hostname of your backup server.