项目需求说明:
1) 所有服务器的备份目录必须都为/backup。
2) 要备份的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)(适合 web 和 nfs 服务器)。
b.开机自启动的配置文件(/etc/rc.local)(适合 web 和 nfs 服务器)。
c.日常脚本的目录 (/server/scripts)。
d.防火墙 iptables 的配置文件(/etc/sysconfig/iptables)。
e.自己思考下还有什么需要备份呢?
3) Web 服务器站点目录假定为(/var/html/www)。
4) Web 服务器 A 访问日志路径假定为( /app/logs)
5) Web 服务器保留打包后的 7 天的备份数据即可(本地留存不能多于 7 天,因为太多硬盘会满)
6) 备份服务器上,保留每周一的所有数据副本,其它要保留 6 个月的数据副本。
7) 备份服务器上要按照备份数据服务器的内网 IP 为目录保存备份,备份的文件按照时间名字保存。
8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果
2.备份服务器rsync服务的安装
1)安装rsync服务
[root@backup scripts]# pwd
/server/scripts
[root@backup scripts]# vim rsyncserver_install.sh
#!/bin/sh
rsync_judge=`rpm -qa|grep rsync|wc -l` #定义判断的变量
if [ $rsync_judge -eq 1 ] #判断rsync服务是否安装
then
echo "rsync in installed"
else
yum install rsync -y
fi
touch /etc/rsyncd.conf #创建rsync配置文件
/bin/cat >/etc/rsyncd.conf<<EOF #导入配置文件
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
uid = rsync
gid = rsync
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
EOF
[ -d /backup ]|| mkdir /backup -p #创建备份目录
useradd rsync -s /sbin/nologin -M >/dev/null 2>&1 #创建rsync授权用户
chown -R rsync.rsync /backup #对备份目录进行授权
echo "rsync_backup:oldboy123" >/etc/rsync.password #创建密码文件
if [ `netstat -lntup|grep rsync|wc -l` -ne 2 ] #判断rsync服务是否启动
then
rsync --daemon
else
echo "rsync is running"
fi
2)测试
[root@backup scripts]# sh rsyncserver_install.sh
rsync in installed
rsync is running
3.客户端rsync服务并测试
1)编写脚本
[root@nfs01 scripts]# pwd
/server/scripts
[root@nfs01 scripts]# vim rsyncclient_install.sh
#!/bin/sh
rsync_judge=`rpm -qa|grep rsync|wc -l` #定义变量
if [ $rsync_judge -eq 1 ] #判断rsync服务是否安装
then
echo "rsync in installed"
else
yum install rsync -y
fi
[ -d /backup ]|| mkdir /backup -p #创建备份目录
echo "oldboy123" >/etc/rsync.password #指定rsync的密码
cd /backup #创建123文件进行推送测试
touch 123.txt
rsync -az /backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
2)进行测试
[root@nfs01 scripts]# sh rsyncclient_install.sh
rsync in installed
[root@backup backup]# ls #backup服务器被推送过来了
123.txt
4.在web服务器执行客户端安装脚本
[root@web01 scripts]# sh rsyncclient_install.sh
5.在nfs01服务器编写备份脚本
1)进入脚本目录进行编辑
[root@web01 scripts]# pwd
/server/scripts
[root@web01 scripts]# vim backup_web01.sh
#!/bin/sh
local_ip=`ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}'` #定义本机IP地址
remote_ip="172.16.1.41" #rsync服务器IP
Cron=/var/spool/cron/root #定义备份路径
RC=/etc/rc.local
Scripts=/server/scripts
Iptable_rules=/etc/sysconfig/iptables
Back_Path=/backup/
Time=`date +%F_%w -d "-1day"` #定义时间,因为是晚上12点备份,所以应该是之前一天的内容
if [ -d $Back_Path ] #判断备份目录是否存在,可以不做
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
tar zchfP /$Back_Path/sysinfo_${Time}.tar.gz $Cron $RC $Scripts $Iptable_rules #备份重要文件
sleep 3
cd $Back_Path
md5sum sysinfo_${Time}.tar.gz >${Back_Path}/finger.log #通过md5生成认证日志
rsync -az $Back_Path rsync_backup@${remote_ip}::backup/${local_ip} --password-file=/etc/rsync.password #将备份目录的内容推送到备份服务器,并以自己的ip地址为目录进行保存
find ./ -type f -name "*.tar.gz" -mtime +7 -exec rm -rf {} \; #删除7天前的内容
6.在web01上进行编写备份脚本
[root@web01 scripts]# pwd
/server/scripts
[root@web01 scripts]# vim backup_web01.sh #和nfs的备份脚本一样,只是多了两个目录
#!/bin/sh
local_ip=`ifconfig eth1|awk -F "[ :]+" 'NR==2{print $4}'`
remote_ip="172.16.1.41"
Cron=/var/spool/cron/root
RC=/etc/rc.local
Scripts=/server/scripts
Iptable_rules=/etc/sysconfig/iptables
Back_Path=/backup/
Time=`date +%F_%w -d "-1day"`
Log=/app/logs #log日志目录
www_backup=/var/html/www #站点目录
if [ -d $Back_Path ]
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
tar zchfP /${Back_Path}/sysinfo_${Time}.tar.gz $Cron $RC $Scripts $Iptable_rules
tar zchfP /${Back_Path}/log_${Time}.tar.gz $Log
tar zchfP /${Back_Path}/www_${Time}.tar.gz $www_backup
cd $Back_Path
md5sum sysinfo_${Time}.tar.gz log_${Time}.tar.gz www_${Time}.tar.gz >finger.log
#md5sum log_${Time}.tar.gz >>finger.log
#md5sum www_${Time}.tar.gz >>finger.log
rsync -az ${Back_Path} rsync_backup@172.16.1.41::backup/${local_ip} --password-file=/etc/rsync.password
find $Back_Path -type f -mtime +7 -exec rm -rf {} \;
7.服务端配置
1)首先配置邮箱服务
[root@backup backup]# vim /etc/mail.rc 将下面内容追加到文档结尾
set from=xxx@163.com smtp=smtp.163.com <- 邮件发送邮件服务器域名,此处为163邮箱的发送服务器域名
set smtp-auth-user=xxx@163.com smtp-auth-password=xxx #是授权码 smtp-auth=login
重启postfix服务
[root@backup backup]# /etc/init.d/postfix restart
Shutting down postfix: [ OK ]
Starting postfix: [ OK ]
2)编辑脚本
[root@backup backup]# cd /server/scripts/
[root@backup scripts]# vim check_info.sh
#!/bin/sh
. /etc/init.d/functions #加载函数库
Back_Path=/backup
Src_address1=172.16.1.31
Src_address2=172.16.1.8
Time=`date +%F_%w -d "-1day"`
#nfs_md5=`md5sum -c md5_2017-08-30_3.log|awk -F "[: ]+" '{print $2}'`
if [ -d $Back_Path ] #判断备份目录是否存在
then
echo "backup file is exist"
else
mkdir $Back_Path -p
fi
cd ${Back_Path}/${Src_address1}
if [ `md5sum -c finger.log|awk -F "[: ]+" '{print $2}'` == "OK" ] #判断md5校验是否出错
then
action "nfs01的备份数据正确" /bin/true
echo "nfs01的备份数据正确" >check_info.log #如果正确就将次信息重定向到Log文件中
else
action "nfs01的备份数据正确" /bin/false
echo "nfs01的备份数据出错" >check_info.log #如果错误就将次信息重定向到Log文件中
fi
#将结果发送到邮箱
/bin/mail -s "check_data mail" xxx@163.com <${Back_Path}/${Src_address1}/check_info.log
#删除180天之前的备份结果并保留每周一的内容
find ${Back_Path}/${Src_address1} -type f -name "*.gz" -mtime +180 ! -name "*1.tar.gz" -exec rm -rf {} \;
#下面的结果和上面一样
cd ${Back_Path}/${Src_address2}
if [ `md5sum -c finger.log|awk -F "[ :]+" 'NR==1{print $2}'` == "OK" -a `md5sum -c finger.log|awk -F "[ :]+" \
'NR==2{print $2}'` == "OK" -a `md5sum -c finger.log|awk -F "[ :]+" 'NR==3{print $2}'` == "OK" ]
then
action "web01备份数据正常" /bin/true
echo "web01备份数据正常" >check_info.log
else
action "web01备份数据出错" /bin/false
echo "web01备份数据出错" >check_info.log
fi
/bin/mail -s "check_data mail" xxx@qq.com <${Back_Path}/${Src_address2}/check_info.log
find ${Back_Path}/${Src_address2} -type f -name "*.tar.gz" -mtime +180 ! -name "*1.tar.gz" -exec rm -rf {} \;
3)测试[root@backup scripts]# sh check_info.sh
backup file is exist
nfs01的备份数据正确 [ OK ]
web01备份数据正常 [ OK ]
转载于:https://blog.51cto.com/11007527/1962425