总体需求:
-
每天00点整在Web服务器上按日期打包备份系统配置文件、网站程序目录及访问日志文件
-
通过rsync命令推送到备份服务器上保存
-
备份服务器定时清除旧记录
-
搭建邮件告警平台
备份需求:
-
所有服务器的备份目录必须都为/backup。
-
要备份的系统配置文件包括但不限于:
-
定时任务服务的配置文件(/var/spool/cron/root) (适合Web和NFS服务器)。
-
开机自启动的配置文件(/etc/rc.local) (适合Web和NFS服务器)。
-
日常脚本的目录 (/server/scripts)。
-
-
Web服务器要求
-
Web站点目录假定为/var/html/www,如果没有,可以先模拟创建。
-
Web服务器访问日志路径假定为/app/logs,如果没有,可以先模拟创建。
-
Web服务器本地保留打包后的7天备份数据即可(本地留存不能多于7天,因为数据太多硬盘会满)。
-
-
备份服务器要求
-
保留最近7天所有备份数据,保留6个月内每周一的所有数据副本。
-
要按照备份数据服务器内网IP为目录名称,备份的文件按照时间、名称为文件名称。
-
需要确保备份的数据尽量完整准确,在备份服务器上对备份的数据是否完整进行检查。
-
备份服务器每天早晨8:00把备份成功或失败结果信息发送到系统管理员邮箱里。
-
环境要求:
三台服务器分别为web01,backup,nfs01,信息如下表。

任务清单
项目环境搭建
-
可以使用iventoy网启安装3台centos7.9服务器
-
按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。
服务器部署
Web服务器搭建部署
-
验证Rsync服务能否推送成功。
-
开发脚本实现打包备份、推送、校验、删除。
-
配置定时任务每天0点定时推送(0时是时间的一个分割点)。
NFS服务器搭建部署
-
验证Rsync服务能否推送成功。
-
开发脚本实现打包备份、推送、校验、删除。
-
配置定时任务每天0点定时推送(0时是时间的一个分隔点)。
-
配置脚本和web服务器类似,过程略。
搭建备份服务器
-
rsync服务器搭建部署。
-
开发脚本实现校验、删除、报警。
-
配置实时任务每天6点实时执行。
-
配置告警邮件发送平台
实施步骤:
1.三台机器相同的步骤
1.关闭防火墙--------------指令:systemctl stop firewalld
systemctl stop firewalld
2.关闭selinux--------------指令:vim /etc/selinux/config //进入到配置文件,然后修改成disabled即可。
vim /etc/selinux/config
3.修改主机名--------------指令:hostnamectl set-hostname 主机名
hostnamectl set-hostname 主机名
4.修改网卡(即添加ip,dns,网关)-----------------指令:nmtui //可视化图形界面更改
nmtui
5.配置yum源的仓库,因为CentOs7系列的不在提供仓库里,所以我们用阿里云的CentOS。

找到7系列的centos

输入上面图片中的代码,即可完成仓库的配置,这里要把原来已经有的仓库清理掉;
6.下载我们所需要用到的工具-------------指令:yum install vim tree tar net-tools rsync nfs-utils epel-release -y
yum install vim tree tar net-tools rsync nfs-utils epel-release -y
这里有时候下载不下来,原因可能是这个库在更新,或者是该库彻底下线,已经不能正差使用,这时我们换一个仓库就好(这里我们换阿里云的epel仓库)

这里有可能没有wget,所以我们安装一下,或者把wget换成curl也可以。------指令yum install wget -y
yum install wget -y

输入照片上的代码即可完成yum源仓库的更新(添加),这样就可以进行下载我们所需要的软件了,epel这个库里面有nginx,所以我们需要安装这个yum仓库。
1.在web01的机子上配置
1.制作一个文件目录,目的是用来存放网页路径的
2.在nginx的配置文件中修改默认访问网页的路径-----------指令:vim /etc/nginx/nginx.conf //把root的默认路径修改即可。
3.这里1和2已经完成web网站的任务,这里我们需要结合主机nfs02开启服务共享,进行远程挂载。假设已开启服务,我们需要创建一个文件,用这个文件进行远程挂载-----------指令:mkdir /web_nfs mount -t nfs 192.168.159.129:/nfsfile /web_nfs
showmount -e 192.168.159.129 //查看192.168.159.129主机的共享内容
mkdir /web_nfs //创建挂载目录
mount -t nfs 192.168.159.129:/nfsfile /web_nfs //进行挂载
4.配置备份脚本文件------------指令:mkdir /backup 和 mkdir -p /server/scripts和vim /server/scripts/backup.sh。配置好后bash /server/scripts/backup.sh执行看是否出错,
mkdir /backup
mkdir -p /server/scripts
vim /server/scripts/backup.sh
下面是web01中/server/scripts/backup.sh的文件内容
#!/bin/bash
# Date:2026-6-24
# Author:Yemaosheng
# Mail:398957558@qq.com
# Function: Regularly backup data from web servers
# Version: V1.0
Date=$(date +%F_Week0%w) # 定义时间方式
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}') # 获取IP,注意网卡名
Backup_Dir="/backup/" # 本地备份路径
Backup_Server_IP=192.168.159.130 # 备份服务器的IP
# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP
# 输出提示信息
echo ${Date} ${Host_IP} start backup ......
# 按要求打包备份所有本地重要文件
cd / &&\
tar cf ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz var/spool/cron &&\
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 www/ &&\
tar zcf $Backup_Dir$Host_IP/nginx_logs_${Date}_tar.gz var/log/nginx/ &&\
# 给所有备份的压缩文件建立指纹,放入指纹库flag,后面会验证完整性
find ${Backup_Dir:-/tmp} -type f -name "*${Date}_tar.gz" |xargs md5sum >$Backup_Dir/$Host_IP/${Date}.flag
# 把备份推送到备份服务器
rsync -az $Backup_Dir rsync@${Backup_Server_IP}::backup --password-file=/etc/rsync.password
# 删除7天以前的所有本地备份数据
find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "*flag*" -mtime +7|xargs rm -f
echo "Local backup successful, the backup files have been pushed to the backup server"
5.客户端配置rsync的密码----------------指令 vim /etc/rsync.passwd
vim /etc/rsync.password
rsync123 //这是客户端rsync.password配置文件内的内容,就是密码
chmod 600 /etc/rsync.password //给予权限
6.配置定时任务
1.下载----------指令:yum install crontabs -y
2.编辑定时任务------------指令:crontab -e
# crond-id-001:data backup
00 00 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1
2.在nfs01的机子上配置
1.安装客户端和和服务端的工具---------指令:
yum install rpcbind nfs-utils -y
2.制作共享目录,制作好后赋予权限777-----------指令:-------------mkdir /nfsfile和chmod +Rf 777 /nfsfile
mkdir /nfsfile
echo "hello word!" > /nfsfile/redname
chmod -Rf 777
3.进行共享(写入配置文件)-------------指令:vim /etc/exports 编辑配置文件
vim /etc/exports
#在配置文件中添加信息
/nfsfile 192.168.159.0/24(rw,sync,all_squash)
4.开启服务时,应先开启客户端,然后开启服务端----------指令:systemctl enable --now rpcbind 和 systemctl enable --now nfs-server
systemctl enable --now rpcbind
systemctl enable --now nfs-server
5.配置nfs01客户端本地备份脚本-----------指令:mkdir /backup 和 mkdir -p /server/scripts和vim /server/scripts/backup.sh
mkdir /backup
mkdir -p /server/scripts
vim /server/scripts/backup.sh
下面是nfs01中/server/scripts/backup.sh的内容
#!/bin/bash
# Date:2026-6-24
# Author:Yemaosheng
# Mail:398957558@qq.com
# Function: Regularly backup data from nfs servers
# Version: V1.0
Date=$(date +%F_Week0%w) # 定义时间方式
Host_IP=$(ifconfig ens32 | awk '/inet / {print $2}') # 获取IP,注意网卡名
Backup_Dir="/backup/" # 本地备份路径
Backup_Server_IP=192.168.88.130 # 备份服务器的IP
mount -l > /var/log/mount.log # 挂载日志
# 创建指定目录和IP的目录
[ ! -d $Backup_Dir/$Host_IP ] && mkdir -p $Backup_Dir/$Host_IP
# 输出提示信息
echo ${Date} ${Host_IP} start backup ......
# 按要求打包备份所有本地重要文件
cd / &&\
tar cf ${Backup_Dir}${Host_IP}/sys_file_bak_${Date}_tar.gz var/spool/cron &&\
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/nfs_${Date}_tar.gz nfsfile/ &&\
tar zcf $Backup_Dir$Host_IP/mount_logs_${Date}_tar.gz var/log/mount.log/ &&\
# 给所有备份的压缩文件建立指纹,放入指纹库flag,后面会验证完整性
find ${Backup_Dir:-/tmp} -type f -name "*${Date}_tar.gz" |xargs md5sum >$Backup_Dir/$Host_IP/${Date}.flag
# 把备份推送到备份服务器
rsync -az $Backup_Dir rsync@${Backup_Server_IP}::backup --password-file=/etc/rsync.password
# 删除7天以前的所有本地备份数据
find ${Backup_Dir:-/tmp} -type f -name "*.tar.gz" -a -name "*flag*" -mtime +7|xargs rm -f
echo "Local backup successful, the backup files have been pushed to the backup server"
6.配置rsync的密码和文件授权-------------指令:vim /etc/rsync.passwd 和 chmod 600 /etc/rsync.passwd
vim /etc/rsync.passwd
rsync123 //这是nfs01的rsync的密码为rsync123,这样写就可以,不用添加多余的东西。这也rsync密码验证的机制在客户端只有密码,多余的符号一个都不能有
chmod 600 /etc/rsync.passwd //赋予权限
7.配置定时任务
1.下载----------指令:yum install crontabs -y
2.编辑定时任务------------指令:crontab -e
# crond-id-001:data backup
00 00 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1
3.backup的主机上配置
1.修改rsync的配置文件---------指令:vim /etc/rsyncd.conf //删除原来文件内所有的内容,添加一下内容,记得里面的注释不生效,所以要删除注释和多余的空格。
uid = rsync # 用户
gid = rsync # 组
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 # 日志文件
fake super = yes # 无需rsync以root身份运行,允许接受数据
[backup]
path = /backup # 目录
ignore errors # 有错误时忽略
read only = false # 可读可写
list = false # 阻止远程列表
hosts allow = 192.168.159.0/24 # 允许IP
hosts deny = 0.0.0.0/32 # 禁止IP
auth users = rsync # 用于认证的账户
secrets file = /etc/rsync.password # 存放用户和密码的文件
2.创建一个新账户 -------------指令:useradd -M -s /sbin/nologin rsync
3.创建备份文件夹,归属账户---------------指令:mkdir /backup和chown -R rsync /backup
4.启动rsyc服务---------------指令:systemctl enable --now rsyncd
5.配置rsync的密码并赋予权限----------指令:echo "rsync:rsync123" > /etc/rsync.password 和 chmod 600 /etc/rsync.password
echo "rsync:rsync123" > /etc/rsync.password
chmod 600 /etc/rsync.password
//这里"rsync:rsync123"时服务端的写法,代表账户和密码,客户端只需要写密码,还有rsync.password一定要和上面的配置文件存放账户和密码的文件要一样。
6.自动化备份脚本
1.创建备份目录-----------指令:mkdir -p /server/scripts
2.创建备份目录的脚本----------指令:vim /server/scripts/del_bak_data.sh
[root@backup ~]# mkdir -p /server/scripts
[root@backup ~]# cd /server/scripts/
[root@backup scripts]# vim /server/scripts/del_bak_data.sh
#!/bin/bash
# Date:2026-6-24
# Author:Yemaosheng
# Mail:398957558@qq.com
# Function: Delete all backup data from 180 days ago, but save every Monday
# Version: V1.0
Backup_Dir="/backup/"
# 删除7天前的压缩包和flag文件,但是每周一的不删
find ${Backup_Dir:-/tmp} -type f -name "*tar.gz*" ! -name "*Week01*" -o -name "*flag*" -mtime +7|xargs rm -f
# 删除180天前的所有压缩包和flag文件
find ${Backup_Dir:-/tmp} -type f -name "*tar.gz*" -name "*flag*" -mtime +180|xargs rm -f
# 注意:Backup_Dir:-/tmp表示检查环境变量 Backup_Dir 是否已设置。如果设置了,就使用其值;如果没有设置,就使用默认值 /tmp
7.配置定时任务
1.下载-------------指令:yum install crontabs -y
2.编辑定时任务----------指令:crontab -e
[root@backup ~]# crontab -e
# crond-id-003:data backup
00 00 * * * /bin/sh /server/scripts/del_bak_data.sh >/dev/null 2>&1
这样我们就完成了所有的操作,最后只要绑定邮件即可,然后定时去备份,并发送邮件。这里的重点还是脚本的内容,流程不难,我们还需要,仔细的看脚本的内容,多练,让我来动起来。