全网备份项目实战
第3章 企业案例全网备份数据
3.1 案列要求
3.1.1 服务器准备
服务器 |
nfs(存储)服务器 |
web服务器 |
backup(备份)服务器 |
主机名 |
nfs01 |
web01 |
backup |
外网地址 |
10.0.0.31 |
10.0.0.7 |
10.0.0.41 |
内网地址 |
172.16.1.31 |
172.16.1.7 |
172.16.1.41 |
3.1.2 需求
3.1.2.1 上级要求
- 将系统中的重要文件和目录进行打包
- 传输到备份目录,并且验证下数据的完整性
- 每天晚上0点备份nfs和web服务器上面打包的数据
- 把备份目录里面大于180天的数据就删除(移动到其他目录),并且周一的我也要
3.1.2.2 自己理解的上级要求
3.1.2.2.1 将系统中的重要文件和目录进行打包
目录:
- /var/html/www/
- /app/logs/
- /etc/sysconfig/network-scripts/
- /var/log/
文件:
- /etc/hosts
- /etc/fstab
- /etc/rc.d/rc.local
- /var/spool/cron/root
- /etc/sysconfig/iptables
- /etc/profile(4个环境变量文件)
3.1.2.2.2 传输到备份目录,并且检验数据的完整性
- 使用rsync将数据传输到备份目录上面
- 在本地生成指纹信息,在传输过去以后,在备份目录里面进行比较
3.1.2.2.3 使用定时任务设定时间进行备份
- 编写配置文件
- 由于是0点0分进行备份的数据,所以备份的数据是昨天的,这个是不行的
- 自己以后记住备份的数据是昨天的
- 使用date命令-d参数来减一天来进行备份
3.1.2.2.4 备份服务器需要将180天以前的数据删除,并且周一的保留
- 查找出来删除180天数据 -mtime +180
- 在打包的时候在时间上面加上星期信息,这样删除的时候可以指定名称是周一的数据不删除
3.2 案列拓扑图
3.3 案列的具体实现步骤
3.3.1 web01客户端上面文件和目录进行打包
3.3.1.1 打包重要的文件
[root@web01 ~] # tar -zcPhf /backup/web01_main_file_$(date +%F'Today'%w)_backup.tar.gz /var/spool/cron/root /etc/hosts /etc/fstab /etc/rc.d/rc.local /etc/sysconfig/iptables 打包
[root@web01 ~] # ll /backup/ 查看打包的文件
-rw-r--r-- 1 root root 1184 Oct 24 12:45 web01_main_file_2019-10-24Today4_backup.tar.gz
3.3.1.2 打包/var/html/www和/app/logs/目录
[root@web01 ~] # tar -zcPhf /backup/web01_html_$(date +%F'Today'%w)_backup.tar.gz /var/html/www 打包
[root@web01 ~] # tar -zcPhf /backup/web01_logs_$(date +%F'Today'%w)_backup.tar.gz /app/logs/ 打包
You have new mail in /var/spool/mail/root
[root@web01 ~] # ll /backup 查看打包的文件
total 16
-rw-r--r-- 1 root root 117 Oct 24 12:50 web01_html_2019-10-24Today4_backup.tar.gz
-rw-r--r-- 1 root root 114 Oct 24 12:50 web01_logs_2019-10-24Today4_backup.tar.gz
[root@web01 ~] #
3.3.2 nfs01客户端上面的文件进行打包
[root@nfs01 ~] # tar -zcPhf /backup/nfs01_main_file_$(date +%F'Today'%w)_backup.tar.gz /var/spool/cron/root /etc/hosts /etc/fstab /etc/rc.d/rc.local /etc/sysconfig/iptables 打包
You have new mail in /var/spool/mail/root
[root@nfs01 ~] # ll /backup 查看压缩包
-rw-r--r-- 1 root root 1182 Oct 24 12:55 nfs01_main_file_2019-10-24Today4_backup.tar.gz
[root@nfs01 ~] #
3.3.3 将2台客户端的数据发送过去
3.3.3.1 nfs客户端数据的发送
[root@nfs01 ~] # rsync -avz /backup/nfs01_main_file_2019-10-24Today4_backup.tar.gz rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 将压缩包传送到备份服务器
sending incremental file list
nfs01_main_file_2019-10-24Today4_backup.tar.gz
sent 1,319 bytes received 43 bytes 2,724.00 bytes/sec
total size is 1,182 speedup is 0.87
[root@nfs01 ~] #
[root@backup backup] # ll 在备份服务器查看压缩包
-rw-r--r-- 1 rsync rsync 1182 Oct 24 13:02 nfs01_main_file_2019-10-24Today4_backup.tar.gz
3.3.3.2 web客户端数据的发送
[root@web01 ~] # rsync -avz /backup/web* rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 将压缩包传送到备份服务器
sending incremental file list
web01_html_2019-10-24Today4_backup.tar.gz
web01_logs_2019-10-24Today4_backup.tar.gz
web01_main_file_2019-10-24Today4_backup.tar.gz
sent 1,731 bytes received 81 bytes 3,624.00 bytes/sec
total size is 1,415 speedup is 0.78
[root@web01 ~] #
[root@backup backup] # ll 在备份服务器查看压缩包
-rw-r--r-- 1 rsync rsync 117 Oct 24 12:50 web01_html_2019-10-24Today4_backup.tar.gz
-rw-r--r-- 1 rsync rsync 114 Oct 24 12:50 web01_logs_2019-10-24Today4_backup.tar.gz
-rw-r--r-- 1 rsync rsync 1184 Oct 24 12:45 web01_main_file_2019-10-24Today4_backup.tar.gz
[root@backup backup] #
3.3.4 服务器端验证数据
3.3.4.1 怎么验证数据的完整性
使用指纹对比来验证,命令为md5sum
3.3.4.2 指纹怎么来完成数据的完整性验证
3.3.4.2.1 在本地将数据压缩好,并且使用md5sum来进行验证
[root@nfs01 backup] # md5sum nfs01_main_file_2019-10-24Today4_backup.tar.gz > finger.txt 将验证的指纹信息保存到finger.txt文件中
[root@nfs01 backup] # ll
-rw-r--r-- 1 root root 81 Oct 24 13:14 finger.txt
-rw-r--r-- 1 root root 1182 Oct 24 13:02 nfs01_main_file_2019-10-24Today4_backup.tar.gz
[root@nfs01 backup] #
3.3.4.2.2 将指纹信息和数据发送到远程备份服务器上
[root@nfs01 backup] # rsync -avz /backup/{nfs01_main_file_2019-10-24Today4_backup.tar.gz,finger.txt} rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password 传输到远程备份服务器数据
sending incremental file list
finger.txt
nfs01_main_file_2019-10-24Today4_backup.tar.gz
sent 1,463 bytes received 62 bytes 3,050.00 bytes/sec
total size is 1,263 speedup is 0.83
[root@nfs01 backup] #
3.3.4.2.3 在远程验证指纹信息
[root@backup backup] # md5sum -c finger.txt
nfs01_main_file_2019-10-24Today4_backup.tar.gz: OK 证明数据完整,没有损坏
[root@backup backup] #
3.3.5 怎么将180天的数据删除,并且将周一的数据保留
- 将180天之前的数据找出来
- 找出来发现打包里面有Today+num(num表示星期几)
- 有这个标识,可以通过名称来查找,在做排除操作,则可
3.3.6 将完整数据的信息发送给sa
3.3.6.1 配置邮件服务器
3.3.6.1.1 打开邮箱,点击设置,选择账户
3.3.6.1.2 选择IMAP/SMTP是开启状态,并且生成授权码
3.3.6.1.3 在linux服务器上面配置邮件信息
[root@backup backup] # cat /etc/mail.rc
………………………………
………………………………
set from=460523471@qq.com 此处填你的qq邮箱地址
set smtp=smtp.qq.com 此处填你的smtp服务,只有访问这个服务,你才能连通
set smtp-auth-user=460523471@qq.com 此处填你的qq邮箱地址
set smtp-auth-password=enoncgdkvjhlbjbd 此处填你生成的授权码信息(你的密码信息)
set smtp-auth=login
set from=460523471@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=460523471@qq.com
set smtp-auth-password=enoncgdkvjhlbjbd
set smtp-auth=login
3.3.6.1.4 重启postfix服务
[root@backup backup] # systemctl restart postfix
You have new mail in /var/spool/mail/root
[root@backup backup] #
3.3.6.1.5 验证服务是否已经配置好
[root@backup backup] # echo 123456 | mail -s "wode" 460523471@qq.com 邮件内容不多的时候
[root@backup backup] #
[root@backup backup] # mail -s "wode" 460523471@qq.com </etc/fstab 邮件内容多的时候,可以将文件里面的内容重定向输入到命令中,让执行
[root@backup backup] #
发送成功:
3.3.6.2 将指纹信息的结构发送给sa
md5sum -c finger.txt > finger_true.txt 将数据指纹信息的验证结构重定向到finger_true.txt
[root@backup backup] # mail -s "运维人员数据完整性测试" 460523471@qq.com </backup/finger_true.txt 发送邮件给sa
You have new mail in /var/spool/mail/root
[root@backup backup] #
3.3.7 编写定时任务
3.3.7.1 客户端编写定时任务
#每天晚上0点备份
0 0 * * * /bin/sh /server/scripts/backup_nfs01.sh
3.3.7.2 服务端编写定时任务
#每天晚上0点20同步
20 0 * * * /bin/sh /server/scripts/backup_server.sh
注:服务端的定时任务是需要明天sa运维人员能看见结果就可以,不需要0:20,我这里写的是
3.4 使用脚本来实现
3.4.1 客户端脚本编写
3.4.1.1 web01服务器编写
[root@web01 scripts] # cat backup_web01.sh
#!/bin/bash
##author:liangyuxing
##date:20191024
##things:Practice of network wide backup project
#set variables
DIR="/backup"
IP_INFO=`hostname -i`
#create main directory
mkdir $DIR/$IP_INFO -p
#create /app/logs directory
mkdir /app/logs/ -p
#create /etc/sysconfig/iptables file
touch /etc/sysconfig/iptables
#create /var/html/www directory
mkdir /var/html/www -p
#packages /app/logs/ directory
tar -zchPf $DIR/$IP_INFO/web_01_app_logs_$(date +%F'Today'%w -d "-1 day")_backup.tar.gz /app/logs
#packages important file
tar -zchPf $DIR/$IP_INFO/web_01_main_file_$(date +%F'Today'%w -d "-1 day")_backup.tar.gz /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /server/scripts/
#packages /var/html/www directory
tar -zchPf $DIR/$IP_INFO/web_01_iptables__$(date +%F'Today'%w -d "-1 day")_backup.tar.gz /var/html/www
#Local latest package generation fingerprint information
find $DIR -type f -name "*.tar.gz" -mmin -20 | xargs md5sum >$DIR/$IP_INFO/finger.txt
#dump local data to backup computer
rsync -azL $DIR/$IP_INFO/ rsync_backup@172.16.1.41::backup/$IP_INFO --password-file=/etc/rsync.password
#find data 7 day before for delete
find $DIR -type f -name "*.tar.gz" -mtime +7 -delete
3.4.1.2 nfs01服务器的编写
[root@nfs01 scripts] # cat backup_nfs01.sh
#!/bin/bash
##author:liangyuxing
##date:20191024
##things:Practice of network wide backup project
#set variables
DIR="/backup"
IP_INFO=`hostname -i`
#create main directory
mkdir $DIR/$IP_INFO -p
#create /etc/sysconfig/iptables file
touch /etc/sysconfig/iptables
#packages important file
tar -zchPf $DIR/$IP_INFO/nfs_01_main_file_$(date +%F'Today'%w -d "-1 day")_backup.tar.gz /var/spool/cron/root /etc/rc.local /etc/sysconfig/iptables /server/scripts/
#Local latest package generation fingerprint information
find $DIR -type f -name "*.tar.gz" -mmin -20 | xargs md5sum >$DIR/$IP_INFO/finger.txt
#dump data to backup conputer
rsync -azL $DIR/$IP_INFO/ rsync_backup@172.16.1.41::backup/$IP_INFO --password-file=/etc/rsync.password
#find data 7 day before for delete
find $DIR -type f -name "*.tar.gz" -mtime +7 -delete
3.4.2 服务端脚本编写
3.4.2.1 backup_server服务器编写
[root@backup scripts] # cat backup_server.sh
#!/bin/bash
##author:liangyuxing
##date:20191024
##things:Determine whether the information data generated by the fingerprint is complete, and send the log to the operation and maintenance personnel
#set variables
DIR="/backup"
#Create the final verification directory for storing fingerprint
mkdir -p $DIR/true_finger/
#Save the final fingerprint information to a file
find $DIR -type f -name "finger.txt" | xargs md5sum -c > $DIR/true_finger/finger_$(date +%F).txt
#send mail to sa
mail -s "$(date +%F'Today'%w -d "-1 day") dump data is sucess" 460523471@qq.com < $DIR/true_finger/finger_$(date +%F).txt
#find 180 day ago for delete
find $backup -type f ! -name "*Today1_*.tar.gz" -mtime +180 -delete