全部博文(1144)
分类: LINUX
2006-05-31 15:20:26
WebServer磁盘镜像备份方案
——Rsync方式
2006.05.17
chnl@163.com
在使用dd镜像服务器上的两块SCSI硬盘之后,使用rsync方式同步数据;使用crond调度,采用差异备份方式,每日同步一次,保留一个月的增量数据。使得系统两块硬盘保持同步,使用任意磁盘皆可以启动操作系统并提供服务。
操作系统:Linux AS3
磁盘:两块相同配置及大小的磁盘,不做RAID
按自己的需求安装Linux操作系统,一定要把所有的分区配置在操作系统的第一块硬盘上;第二块硬盘留作镜像使用。
在安装好操作系统并登陆系统后,使用dd命令镜像第二块磁盘:
要根据自己的情况选择磁盘名称,此处,第一块(已经安装操作系统的)磁盘为/dev/sda,第二块(空白)磁盘为/dev/sdb,执行一下命令:
dd if=/dev/sda of=/dev/sdb
命令运行的时间会比较长,在运行过程中,会看到磁盘状态灯一直在闪烁,一定不要中断此命令。
dd命令完成对磁盘的镜像之后,修改/etc/fstab文件,使得第二块磁盘在系统自动启动时,能够自动mount。需要在系统根目录下,为第二块磁盘建立mount point,此处,使用/BakId1作为mount point。
此处,fstab示例文件的内容为下:
/dev/sda3 / ext3 defaults 1 1
/dev/sda1 /boot ext3 defaults 1 2
none /dev/pts devpts gid=5,mode=620 0 0
/dev/sda5 /home ext3 defaults 1 2
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/sda8 /tmp ext3 defaults 1 2
/dev/sda2 /usr ext3 defaults 1 2
/dev/sda6 /var ext3 defaults 1 2
/dev/sda9 /backup ext3 defaults 1 2
/dev/sdb3 /BakId1/ ext3 defaults 1 2
/dev/sdb1 /BakId1/boot ext3 defaults 1 2
/dev/sdb5 /BakId1/home ext3 defaults 1 2
/dev/sdb8 /BakId1/tmp ext3 defaults 1 2
/dev/sdb2 /BakId1/usr ext3 defaults 1 2
/dev/sdb6 /BakId1/var ext3 defaults 1 2
/dev/sdb9 /BakId1/backup ext3 defaults 1 2
/dev/sda7 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom udf,iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0
文件系统 1K-块 已用 可用 已用% 挂载点
在重新启动操作系统之后,df命令的输出如下:
/dev/sda3 8064304 224276 7430372 3% /
/dev/sda1 101089 15064 80806 16% /boot
/dev/sda5 5162796 383928 4516612 8% /home
none 512600 0 512600 0% /dev/shm
/dev/sda8 1035660 32876 950176 4% /tmp
/dev/sda2 10317860 2338716 7455024 24% /usr
/dev/sda6 4127076 81616 3835816 3% /var
/dev/sda9 39681644 32832 37633060 1% /backup
/dev/sdb3 8064304 224288 7430360 3% /BakId1
/dev/sdb1 101089 15064 80806 16% /BakId1/boot
/dev/sdb5 5162796 384180 4516360 8% /BakId1/home
/dev/sdb8 1035660 32876 950176 4% /BakId1/tmp
/dev/sdb2 10317860 2432196 7361544 25% /BakId1/usr
/dev/sdb6 4127076 79944 3837488 3% /BakId1/var
/dev/sdb9 39681644 32832 37633060 1% /BakId1/backup
此时,cp /etc/fstab文件到/BakId1/etc目录下;并在/BakId1目录下新建BakId1目录,使得两块磁盘完全同步。
cp /etc/fstab /BakId1/etc
mkdir /BakId1/BakId1
id = root
gid = root
# id,gid设置为root,可以对一些nobody没有权限读的文件/目录进行备份。
use chroot = no
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
#配置需要同步的FileSet
[etc]
path = /etc
comment = etc
auth users = backup
secrets file = /etc/rsyncd.secrets
[tomcat]
path = /usr/local/tomcat
comment = tomcat
auth users = backup
secrets file = /etc/rsyncd.secrets
[backup]
path = /backup
comment = backup
auth users = backup
secrets file = /etc/rsyncd.secrets
[cl]
path = /home/cl
comment = cl
auth users = backup
secrets file = /etc/rsyncd.secrets
backup:web_backup
#用户名为backup,密码为web_backup
#要设置此文件只有属主有权限访问
#!/bin/sh
#########################################################################
#
# File: rsync.sh
# Description: backup data with rsyncd.
# Language: GNU Bourne-Again SHell
# Version: 2.0
# Date: 2006-5-15
# Corp.: Chenlei
# Author: chnl@163.com
# Version 2.0: This Edition use rsync.conf file to get the directory.
# First Edition Info:
# cl, 2004.11.11
# This script gets files from server to local directory to backup.
# It's a month rotating incremental backup.
#
#########################################################################
############################
#
# Exit values:
# ------------
# 0 successful
# Others failur
#
# ----------------------------------------------------------------------
# Args:
# 1. Config File
#
[ -f /etc/profile ] && . /etc/profile
LogDir=/var/log
Prog=/usr/bin/rsync
#解析配置文件中的FileSet及DirName
while read Record
do
FileSet=$(echo $Record|grep -v ^#|grep -v ^$| awk -F"\|" '{print $1}')
DirName=$(echo $Record|grep -v ^#|grep -v ^$|awk -F"\|" '{print $2}')
Date=`date +%d`
FileDir=/BakId1/$DirName
[ -d $BakDir ] || mkdir -p $FileDir
BakDir=/BakId1/$DirName/rotating_bak/$Date
LogFile=$LogDir/rsync.$FileSet.log
[ -d $BakDir ] && rm -fr $BakDir
# 设定rsync备份时所使用的参数选项,采用压缩及backup参数
OPTS="--force --ignore-errors --delete --backup --backup-dir=$BakDir -az"
SERVER="backup@127.0.0.1"
export RSYNC_PASSWORD=web_backup
#产生时间戳日志到日志文件
echo "############" >>$LogFile 2>&1
echo "Begin Time: `date`" >>$LogFile 2>&1
$Prog $OPTS $SERVER::$FileSet $FileDir >>$LogFile 2>&1
echo "End Time: `date`" >>$LogFile 2>&1
echo "############" >>$LogFile 2>&1
done < $1
#FileSet及Directory设置
etc|/etc
tomcat|/usr/local/tomcat
cl|/home/cl
此脚本执行rsync.sh,同步磁盘数据。
#!/bin/sh
/home/cl/bak_sh/rsync/rsync.sh /home/cl/bak_sh/rsync/rsync.conf
使用crontab -e命令,添加需要执行的cron脚本,如,以下配置表明,在每天的2点59分执行同步数据的操作。
59 02 * * * /home/cl/bak_sh/rsync/runRsync.sh
使用crontab -l可以列出cron的配置,如下:
59 00 * * 0 /home/cl/bak_sh/tomcat/tomcat_bak.sh
59 02 * * * /home/cl/bak_sh/rsync/runRsync.sh
59 01 * * * /home/cl/logrotate/tomcat/rotate_catalina_log.sh
59 16 * * * /home/cl/SysMon/runSysMon.sh
配置文档列表:
rsyncd.conf
rsyncd.secrets
rsync.conf
rsync.sh