Rsync企业级全网备份项目案例介绍与实践(老男孩相关书籍学习整理)

项目需求说明

某公司里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了数据就会丢失,现在领导要求把数据做备份,这样Web服务器数据丢失在可以进行恢复。
(1)备份要求每天晚上00点整在Web服务器上打包备份系统配置文件、网站程序目录及访问日志并通过rsync命令推送到备份服务器BACKUP上备份保留。
(2)备份思路可以是先在本地按日期打包,然后再推到备份服务器BACKUP上;NFS存储服务器和Web服务器在实际工作中就是运维主要管理的全部服务器。

1)所有服务器的备份目录必须都为/backup。
2)要备份的系统配置文件包括但不限于:
❑ 定时任务服务的配置文件 (/var/spool/cron/root)(适合Web和NFS服务器)。
❑ 开机自启动的配置文件 (/etc/rc.local)(适合Web和NFS服务器)。
❑ 日常脚本的目录 (/server/scripts)。3)Web服务器站点目录假定为/var/html/www,如果没有,可以先模拟创建。4)Web服务器访问日志路径假定为/app/logs,如果没有,可以先模拟创建。
5)Web服务器本地保留打包后的7天备份数据即可(本地留存不能多于7天,因为数据太多硬盘会满)。
6)备份服务器BACKUP上,保留最近7天所有备份数据,保留6个月内每周一的所有数据副本。
7)备份服务器上,要按照备份数据服务器内网IP为目录保存备份,备份的文件按照时间、名称保存。
8)需要确保备份的数据尽量完整准确,在备份服务器上对备份的数据是否完整进行检查。
9)备份服务器BACKUP上,每天早晨8:00把备份成功或失败结果信息发送到系统管理员邮箱中。
服务器备份信息汇总表
在这里插入图片描述

项目实战部署

1.服务器创建
自行搭建
2.服务器部署
在接到一个项目方案后,要有一个解决项目的思路,示例如下。
(1)搭建备份服务器
❑ rsync服务器搭建部署。
❑ 开发脚本实现校验、删除、报警。
❑ 配置实时任务每天6点实时执行。
(2)Web服务器搭建部署
❑ 验证Rsync服务能否推送成功。
❑ 开发脚本实现打包备份、推送、校验、删除。
❑ 配置定时任务每天0点定时推送(0时是时间的一个分割点)。
(3)NFS服务器搭建部署
❑ 验证Rsync服务能否推送成功。
❑ 开发脚本实现打包备份、推送、校验、删除。
❑ 配置定时任务每天0点定时推送(0时是时间的一个分割点)。

在BACKUP上部署Rsync服务:在BACKUP Server上部署Rsync服务,并且在客户端服务器测试推送成功。
客户端本地开发打包脚本:如下,编写脚本后要测试后再使用

#! /bin/bash
Date=$(date +%F_Week0%w)   #时间格式
Host_IP=$(hostname -i | awk '{print $2}') #获取内网地址
Backup_Dir="/backup/"   #本地备份路径
Backup_Server_IP=192.168.124.46    #备份服务器IP

[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP

#按要求打包备份数据,#提示:在nfs服务器上不用编写压缩web服务器的程序和日志部分
cd / &&\
tar cf $Backup_Dir/$Host_IP/sys_file_bak_${Date}_tar.gz var/spool/cron/root &&\
tar rf $Backup_Dir/$Host_IP/sys_file_bak_${Date}_tar.gz etc/rc.d/rc.local &&\
tar rf $Backup_Dir/$Host_IP/sys_file_bak_${Date}_tar.gz server/scripts/ &&\
tar zcf $Backup_Dir/$Host_IP/www_${Date}_tar.gz var/html/www/ &&\
tar zcf $Backup_Dir/$Host_IP/app_logs_${Date}_tar.gz app/logs/ &&\
#给所有备份建立压缩文件指纹,放入指纹库flag,用于后面验证完整性
find ${Backup_Dir:-/tmp} -type f -name "*_tar.gz" | xargs md5sum > $Backup_Dir/$Host_IP/${Date}.flag

#把备份推送到备份服务器
rsync -az $Backup_Dir rsync_backup@${Backup_Server_IP}::backup --password-file=/etc/rsync.password

#删除7天以前的所有本地备份数据
find ${Backup_Dir:-/tmp} -type f -name "*tar.gz" -mtime +7 -o -name "*flag*" -mtime +7 | xargs /bin/rm -f

这个是同样功能的python脚本:

#! /bin/python3
import subprocess
import datetime


date = datetime.datetime.now()
now = str(date.strftime("%Y-%m-%d"))
print(now)

host = subprocess.run("hostname -I", shell=True, stdout=subprocess.PIPE, encoding="utf-8")
host_ip =  host.stdout.split()[0]
back_server_ip = "192.168.3.90"
backup_dir = r"/backup/"

if subprocess.run(r"[ ! -d {}/{} ]".format(backup_dir, host_ip), shell=True, stdout=subprocess.PIPE).returncode==0:
    subprocess.run(r"mkdir -p {}/{}".format(backup_dir, host_ip), shell=True)

subprocess.run(r"cd /", shell=True)
subprocess.run(r"tar cf {}/{}/sys_file_bak_{}_tar.gz /var/log".format(backup_dir, host_ip, now), shell=True)
subprocess.run(r"tar rf {}/{}/sys_file_bak_{}_tar.gz /etc/rc.d/rc.local".format(backup_dir, host_ip, now), shell=True)
subprocess.run(r"tar rf {}/{}/sys_file_bak_{}_tar.gz /server/scripts".format(backup_dir, host_ip, now), shell=True)
#subprocess.run(r"tar zcf {}/{}/www_{}_tar.gz /etc/rc.d/rc.local".format(backup_dir, host_ip, now), shell=True)
#subprocess.run(r"tar zcf {}/{}/app_logs_{}_tar.gz /app/logs".format(backup_dir, host_ip, now), shell=True)


subprocess.run(r"find {} -type f -name  \"*{}_tar.gz\"  | xargs md5sum > {}/{}/{}.flag".format(backup_dir, now, backup_dir, host_ip, now), shell=True)

subprocess.run(r"rsync -az {} rsync_backup@{}::backup --password-file=/etc/rsync.password".format(backup_dir, back_server_ip), shell=True)

subprocess.run(r"find {} -name \"*_tar.gz\" -type f -mtime +7 -o -name \"*flag*\" -mtime +7 | xargs rm -f".format(backup_dir), shell=True)

关于为什么要进入根目录后再打包,提示:一般压缩文件在相应压缩信息的上一级目录进行压缩,但是没有目录结构,因此建议进入根下进行压缩备份。

配置定时任务:如下
在这里插入图片描述
Rsync服务器端相关配置:如下
2)编辑服务端删除文件脚本文件,删除180天前的所有备份数据,但保存每周一的。

#! /bin/bash
Backup_Dir="/backup/"
#删除7天以前的压缩包和flag文件,但是为周一的不删除
find ${Backup_Dir:-/tmp} -type f -name "*tar.gz" -mtime +7 ! -name "*Week01*" -mtime +7 | xargs /bin/rm -f
find ${Backup_Dir:-/tmp} -type f -name "*flag*" -mtime +7 ! -name "*Week01*" -mtime +7 | xargs /bin/rm -f

#删除180天前的所有压缩包和flag文件
find ${Backup_Dir:-/tmp} -type f -name "*tar.gz" -o -name "*flag*" -mtime +180 | xargs /bin/rm -f

3)配置定时任务,实现服务端180天前数据自动删除。
在这里插入图片描述

数据传输完整性验证与监控告警:如下

#! /bin/bash
Date=$(date +%F_Week0%w)   #时间格式
Backup_Dir="/backup/"   #本地备份路径
Check_Log="/tmp/bak.log_$(date +%F)"
Admin_Mail=150*********@163.com  #按需修改
#对比文件指纹
find $Backup_Dir -type f -name "${Date}.flag"|xargs md5sum -c >>$Check_Log
if [ -n "cat $Check_Log" ]; then
    mail -s "$Date backup data info" $Admin_Mail >$Check_Log
#文件不存在,日志信息变化,报错
else
    echo "$Date backup date error, pls check it" >$Check_Log
fi
#备份并清空结果
cp $Check_Log{,.ori} && >$Check_Log

配置mail使用外部SMTP发邮件:如下
验证完整性的shell脚本使用前,应配置好SMTP功能,通过修改配置文件可以使用外部SMTP服务器,可以达到不使用Sendmail/Postfix等内部邮件服务而用外部的SMTP服务器发送邮件的目的,使用Postfix服务,因没有外网IP,经常会发生接收不到邮件的情况。注册完邮箱账号后,可以按如下要求修改/etc/mail.rc,最后一行加入如下内容:
使用的时候可能提示没有mail命令,这里使用yum install mailx -y 命令下载即可
在这里插入图片描述

set from=***********@163.com smtp=smtp.163.com smtp-auth-user=15008089674 smtp-auth-password=********** smtp-auth=login

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值