我们都知道对于企业而言,数据是很重要的,随着大数据的到来,企业越来越重视数据的可靠性,所以一般企业对重要数据都会做备份,有的还有异地备份等等。

下面来模拟一下企业数据备份实践。

 情景:领导说:现在有台web服务器A,相关数据很重要,你把该台上的数据定时备份到B服务器上。

作为运维人员的你,会做什么思考?

 要知道我们最终的目的是要做好数据备份,备份哪些数据、如何实行备份则需要运维人员去思考。

web服务器需要备份的数据如下,可能还有其他的,其他服务器如数据库,NFS等等备份策略一样,本文以web服务器为例

  1. 站点数据

  2. 站点访问日志文件

  3. 脚本文件-用于维护

  4. 系统定时任务

  5. 防火墙

  6. 系统启动文件

7.....

例如以上需要备份如下

/var/html/www

/app/logs

/etc/rc.local

/etc/sysconfig/iptables

可以直接将etc目录做备份,etc中有系统相关配置文件

/var/spool/cron/root

思路:我们可以先将本地要备份的数据打包,统一放到本地的一个目录,然后再将该目录数据备份到备份服务器上,本地数据保留7天,

备份服务器数据保留180天,每周一的数据不删除。

由于公司服务器可能不止一台,我们可以将打包的数据放到以IP命名的目录,然后推送到备份机上.

rsync配置请参考我的另一篇

我这里是将相关操作放到脚本中。

vim /server/scripts/bakup.sh

#!/bin/sh

export PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

serverip=192.168.132.20

dst=tuwei     

src=/backup

log=/app

www=/var/html

script=/server

usr=rsync_backup

file=/etc/rsync.password

ip=`ifconfig |awk 'NR==2{print $2}'|sed 's/^[a-z]*[^0-9]//'`

mkdir -p /backup/$ip

if [ $(date +%w) -eq 2 ];then

  date="$(date +%F -d "-1day")_week1"

  else

 date="$(date +%F -d "-1day")"

 fi

 ################ bak 

cd /&& \

tar zcfh $src/$ip/sys_config_${date}.tar.gz ./etc ./server/scripts ./var/spool/cron&& tar zcf  $src/$ip/www_${date}.tar.gz  ./var/html/www \

&& tar zcf  $src/$ip/logs_${date}.tar.gz  ./app/logs

 

#############check the data

find $src -type f -name "*.tar.gz"|xargs md5sum >$src/$ip/flag_${date}

#######################the bak is full,the follwing is putting the data to the server by tuwei

cd $src && rsync -az ./   $usr@$serverip::$dst --password-file=$file

##########delete the data of 7day ago

 find /backup -type f -name "*.tar.gz" -mtime +7|xargs rm -f


讲下脚本内容,最开始是定义一些变量,存放要备份的相关目录或后面需要用到的,目的是后续相关文件有改变,只需要修改开头的变量就可以了,不必在脚本中每一处都修改。

那个获取IP地址的,经测试centos,ubuntu及redhat都适用。

后面是创建以IP命名的目录,这样在后续推送的时候可以做到以IP为目录,方便后续维护。每天零点进行备份,由于每周一的数据保留,所以脚本中有对星期做了判断,同时,数据在推送前,先在本地利用MD5生成"指纹",后续在备份服务器进行校验,保证数据完整性,没有被更改。

测试前:

客户端

[root@backupclient backup]# pwd

/backup

[root@backupclient backup]# ll

total 0

[root@backupclient backup]# 

服务端

[root@backupserver backup]# pwd

/backup

[root@backupserver backup]# ll

total 0

[root@backupserver backup]#

测试过程

执行脚本 [root@backupclient scripts]# sh bakup.sh

测试结果

  客户端

[root@backupclient backup]# ll

total 16

-rw-r--r-- 1 root root 245 Jun  2 14:25 flag_2018-06-01

-rw-r--r-- 1 root root 115 Jun  2 14:25 logs_2018-06-01.tar.gz

-rw-r--r-- 1 root root 915 Jun  2 14:25 sys_config_2018-06-01.tar.gz

-rw-r--r-- 1 root root 118 Jun  2 14:25 www_2018-06-01.tar.gz

服务端

[root@backupserver backup]# cd 192.168.132.20/

[root@backupserver 192.168.132.20]# ll

total 16

-rw-r--r-- 1 root root 245 Jun  2 14:25 flag_2018-06-01

-rw-r--r-- 1 root root 115 Jun  2 14:25 logs_2018-06-01.tar.gz

-rw-r--r-- 1 root root 915 Jun  2 14:25 sys_config_2018-06-01.tar.gz

-rw-r--r-- 1 root root 118 Jun  2 14:25 www_2018-06-01.tar.gz

测试脚本没有问题,可以采用定时任务,每天凌晨进行备份。

crontab -e

00 00 * * * /bin/sh  /server/scripts/bakup.sh >/dev/null 2 &>1


下面是备份服务器端的相关配置(开发脚本对备份数据进行校验、删除及邮件报警功能)。

  1. 首先配置邮件。

  这里利用第三方邮件服务进行发送邮件,如网易163邮箱。

echo -e "set from=xxx@163.com smtp=smtp.163.com set smtp-auth-user=xxx smtp-auth-password=xxxxx smtp-auth=login" >>/etc/mail.rc

这里大家只需要修改用户名,邮箱地址及邮件客户端授权码即可。

vim /server/scripts/checkbak.sh

#!/bin/bash

export LANG=en

###########check the data

find /backup  -name  "flag_$(date +%F -d "-1day")*"|xargs md5sum -c &>/tmp/mail_$(date +%F).log

if [ $(date +%w) -eq 2 ];then

  date="$(date +%F -d "-1day")_week1"

  else

 date="$(date +%F -d "-1day")"

 fi

 #########delete the data about 180 days ago,but do not delete the week1 data####

 find /backup -type f -name "*.tar.gz" -a ! -name "*week1*" -mtime +180|xargs rm -f

 mail -s "backup $(date)"  xxxxx@qq.com </tmp/mail_$(date +%F).log

这样,每天数据备份情况会通过邮件发送给相关人员,通过邮件就可以知道数据是否备份完整,有无篡改。

通过定时任务,每天6点执行

crontab -e

00 06 * * * /bin/sh /server/scripts/checkbak.sh >/dev/null 2>&1

到此,企业全网数据备份方案都可以以此来做参照进行。