综合架构之全网备份项目实践

需求分析

1.基本备份要求

已知3台服务器主机名分别为web01、backup、nfs01,主机信息见下表:

服务器说明内网IP外网IP主机名称
nginx web服务器10.0.0.7/24172.16.1.7/24web01
NFS存储服务器10.0.0.31/24172.16.1.31/24nfs01
rsync备份服务器10.0.0.41/24172.16.1.41/24backup

要求:每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送备份服务器backup上备份保留(备份思路可以是先在本地按日期打包,然后再推到备份服务器backup上),NFS存储服务器同Web服务器,实际工作中就是全部的服务器。

2.基本备份要求

1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
   a.定时任务服务的配置文件(/var/spool/cron/root)(适合web和nfs服务器)。
   b.开机自启动的配置文件(/etc/rc.local)(适合web和nfs服务器)。
   c.日常脚本的目录 (/server/scripts)(适合web和nfs服务器)。
   d.防火墙iptables的配置文件(/etc/sysconfig/iptables)。
   e.自己思考下还有什么需要备份呢?
3)Web服务器站点目录假定为(/var/html/www)。
4)Web服务器A访问日志路径假定为(/app/logs
5)Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
6)备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本。

说明:6个月以内:周一~周日全部保留
6个月之前:周一保留,周二~周日全部删除

7)备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
8)需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中。

3.本项目的整个备份逻辑结构如下图:

在这里插入图片描述



部署服务端rsync守护进程

1.安装rsync服务:
[root@backup ~]# yum install -y rsync
2.编写配置文件:
[root@backup ~]# vim /etc/rsyncd.conf 
uid = rsync
gid = rsync
port = 873 
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = "backup dir by oldboy"
path = /backup
3.创建rysnc服务的虚拟用户:
[root@backup ~]# useradd -s -M /sbin/nologin rsync
4.创建备份服务认证密码文件:
[root@backup ~]# echo "rsync_backup:oldboy123" > /etc/rsync.password 
[root@backup ~]# chmod 600 /etc/rsync.password 
5.创建backup备份目录并修改其属主属组信息:
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 root root 6 Aug 17 15:28 /backup/
[root@backup ~]# chown rsync.rsync /backup
6.重启并自启服务:
[root@backup ~]# systemctl restart rsyncd
[root@backup ~]# systemctl enable rsyncd


客户端部署(以web服务器为例,nfs01相同)

1.分别在三台服务器上创建/backup目录:
[root@web01 ~]# mkdir -p /backup/172.16.1.7
[root@nfs01 ~]# mkdir -p /backup/172.16.1.31
[root@backup ~]# mkdir /backup
2.将web01本地文件按照规定的格式进行打包备份:
[root@web01 ~]# tar zchf /backup/172.16.1.7/system_backup_$(date +%F_%A).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts/ /etc/sysconfig/iptables-config
[root@web01 ~]# tar zchf /backup/172.16.1.7/www_backup_$(date +%F_%A).tar.gz /var/www/html/
[root@web01 ~]# tar zchf /backup/172.16.1.7/wwwlog_backup_$(date +%F_%A).tar.gz /app/logs/

在这里插入图片描述

4.将最近一天的文件生成摘要信息并重定向至finger文件中,以备服务器端做完整性检查:
[root@web01 ~]# find /backup/ -type f -mtime -1 | xargs md5sum > /backup/172.16.1.7/finger.txt

在这里插入图片描述

5.将web01本地的备份文件上传到备份服务器中:
[root@web01 ~]# rsync -avz /backup/172.16.1.7 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

注意1:此处上传路径172.16.1.7后面不可以加“/”,否则不会上传172.16.1.7这个目录,而只会上传目录下的文件;
注意2:如果执行此命令报错permission denied,首先检查服务器端的/backup目录的属主属组是否更改为rsync,其次再检查配置文件中是否添加fake super=yes;任然不能解决的话就检查下防火墙是否关闭!

在这里插入图片描述

6.删除本地7天前的数据:
[root@web01 ~]# find /backup/ -type f -mtime +7 | xargs rm

在这里插入图片描述

客户端脚本汇总编写

#!/bin/bash
#变量定义
backup_dir="/backup/10.0.0.7"

#创建目录
mkdir -p $backup_dir

#在本地创建备份压缩文件
tar zchf $backup_dir/system_backup_$(date +%F_%A).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /etc/sysconfig/iptables.config
tar zchf $backup_dir/www_backup_$(date +%F_%A).tar.gz /var/www/html
tar zchf $backup_dir/www_log_$(date +%F_%A).tar.gz /app/logs

#将每天的文件,生成摘要信息,并重定向到finger文件中
find $backup_dir/ -type f -mtime -1 | xargs md5sum > /finger.txt

#将其他文件和finger文件一同上传到备份服务器
rsync -avz $backup_dir rsync_backup@172.16.1.41::backup --password-file= /etc/rsync.password

#删除本地7天前的数据
find /backup/ -type f -mtime +7 | xargs rm




服务端部署

1.只保留六个月以前的周一的数据,其他的全部删除:
[root@backup ~]# find /backup/ -mtime +180 ! -name "*Monday.tar.gz"
/backup/172.16.1.7/oldfile2_backup_2020-01-02_Thursday.tar.gz
/backup/172.16.1.7/oldfile3_backup_2020-01-03_Friday.tar.gz
/backup/172.16.1.7/oldfile4_backup_2020-01-04_Saturday.tar.gz
/backup/172.16.1.7/oldfile5_backup_2020-01-05_Sunday.tar.gz
[root@backup ~]# find /backup/ -mtime +180 ! -name "*Monday.tar.gz" | xargs rm
2.进行校验,并将校验结果写入check文件中,以备发送邮件:
[root@backup ~]# find /backup/172.16.1.7/ -type f -name "finger.txt" | xargs md5sum -c &> /tmp/check.txt

在这里插入图片描述

3.部署邮件通知:

在这里插入图片描述
      a.打开163邮箱设置IMAP/POP3/SMTP,并记住自己的授权码!
在这里插入图片描述
      b.编写邮件相关配置文件:
在这里插入图片描述
      c.发送完整性校验结果邮件

mail -s "Confrim Result" 162xxxxxx9@qq.com < /tmp/check.txt 

在这里插入图片描述





服务端脚本汇总编写

服务端的脚本文件仍需完善,可以将hostip变量的值写入文件中,使用for循环进行遍历执行

backup_dir="/backup"
hostip="10.0.0.7"

#只保留六个月以前周一的数据,其他周二~周日的全部删除
find $backup_dir/ -type f -mtime +180 ! -name "*Monday.tar.gz" | xargs rm 


#进行校验,并写入check文件中
find $backup_dir/ -type f -name "finger.txt" | xargs md5sum -c &> /tmp/check.txt

#发送邮件
mail -s 备份服务器完整性检查_$(date +%F) 1623300919@qq.com < /tmp/check.txt

设置定时任务

客户端
	crontab -e 
	# backup data
	0 0 * * *  /bin/sh /server/scripts/backup.sh &>/dev/null
服务端
	crontab -e 
	# check backup data
	0 5 * * *  /bin/sh /server/scripts/backup_server.sh &>/dev/null

其他问题

服务器端使用md5sum -c命令验证数据完整性:

md5sum -c原理:
# 第一个历程: 打开一个指纹文件,将信息记录到缓存中
# 第二个历程: 根据指纹文件的路径信息,生成md5数值信息
# 第三个历程: 将新生成md5数值和原有指纹文件中的数值进行比较
# 第四个历程: 如果相同显示结果为ok,如果不同显示failed

在这里插入图片描述

此时产生报错;

原因分析:
finger文件是在客户端生成的,文件中的路径信息为:
在这里插入图片描述
而在服务器端执行finger文件后,md5sum会读取上述路径,但是在服务器端system…tar.gz文件路径是/backup/10.0.0.7/system…tar.gz,二者的路径是有差异的;
解决方案:
针对一个的疑问;

是在本地创建一个10.0.0.7目录后将整个目录上传到服务器端;还是直接在backup模块信息后添加一个10.0.0.7,在备份服务器上生成一个目录呢???

     应该现在本地创建一个10.0.0.7的目录,再将目录上传到备份服务器中;执行find /backup/10.0.0.7/ -type f -mtime -1 | xargs md5sum 命令后,在finger.txt文件中生成的路径即为/backip/10.0.0.7/……,在服务器端,路径也是/backup/10.0.0.7/…;
     重做之前步骤,在客户端本地先创建/backup/10.0.0.7目录;使用tar命令将需要备份的数据全部打包装入/backup/10.0.0.7目录中,最后使用md5sum生成摘要信息,并覆盖重定向到同目录下的finger.txt文件中;
     最终,将整个10.0.0.7目录全部上传到服务器的backup模块中:

rsync -avz /backup/10.0.0.7 rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值