定期备份服务器的所有日志信息,并实现自动化运行

总体需求:

  • 每天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

这样我们就完成了所有的操作,最后只要绑定邮件即可,然后定时去备份,并发送邮件。这里的重点还是脚本的内容,流程不难,我们还需要,仔细的看脚本的内容,多练,让我来动起来。