1. 项目需求说明:

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  ]

wKioL1mssk7zmFOOAAAbTb7gKP8310.png-wh_50