云计算百科
云计算领域专业知识百科平台

自动化备份全网服务器数据平台

1. 项目说明

该项目共分为2个子项目,由环境搭建实施备份两部分组成 该项目旨在复习巩固系统服务部署使用、shell编程等知识。

2. 项目背景知识

2.1. 总体需求

某企业里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了数据就会丢失,现在领导要求把数据 做备份,这样Web服务器数据丢失在可以进行恢复 要求如下: 每天00点整在Web服务器上按日期打包备份系统配置文件、网站程序目录及访问日志文件 通过rsync命令推送到备份服务器上保存 备份服务器定时清除旧记录 搭建邮件告警平台

2.2. 备份需求

所有服务器的备份目录必须都为/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把备份成功或失败结果信息发送到系统管理员邮箱里。

 任务清单

1. 项目环境搭建 可以使用iventoy网启安装3台centos7.9服务器 按照规划,最小化部署系统,关闭防火墙,禁用SELinux,确保能够联网。

2. 服务器部署

2.1. Web服务器搭建部署 验证Rsync服务能否推送成功。 开发脚本实现打包备份、推送、校验、删除。 配置定时任务每天0点定时推送(0时是时间的一个分割点)。

2.2. NFS服务器搭建部署 验证Rsync服务能否推送成功。 开发脚本实现打包备份、推送、校验、删除。 配置定时任务每天0点定时推送(0时是时间的一个分隔点)。 配置脚本和web服务器类似,过程略。

2.3. 搭建备份服务器 rsync服务器搭建部署。 开发脚本实现校验、删除、报警。 配置实时任务每天6点实时执行。 配置告警邮件发送平台

关闭防火墙和selinux,设置主机名,设置静态ip


重启服务

配置完基本的内容后进行虚拟机的镜像克隆

并更改静态ip(nfs01 192.168.47.138   backup 192.168.47.139)

web01服务器环境搭建

更换yum源并下载安装包

yum install vim  tree tar net-tools rsync nfs-utils -y

wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

yum  makecache

yum install  epel-release -y

yum  install  nginx  -y

mkdir  -p  /www/sczl

cd  /www/sczl

下载nginx是要先下载epel-release依赖

使用xftp将web01源文件上传至/www/sczl  并解压缩  

vim  /etc/nginx/nginx.conf         # 修改第42行之后的路径

42         root         /www/sczl;

systemctl start nginx

systemctl enable nginx

重启服务并测试打开windows端浏览器输入服务端IP地址

nfs01服务器环境搭建

更换yum源并下载安装包

yum install vim  tree tar net-tools rsync -y

检查

部署共享存储,nfs01为服务端,web01为客户端

更换yum源并下载安装包

yum  install  rpcbind  -y

yum  install  nfs-utils  -y

 mkdir  /nfsfile

echo  "welcome to www.openlab.com" > /nfsfile/readme

chmod  -Rf  777  /nfsfile

vim  /etc/exports    # 编辑nfs配置文件,添加如下内容
/nfsfile        192.168.88.0/24(rw,sync,all_squash)

 systemctl start  rpcbind

 systemctl enable  rpcbind

systemctl start  nfs-server

systemctl enable  nfs-server

编辑nfs01配置文件,添加内容

/nfsfile        192.168.88.0/24(rw,sync,all_squash)

 web01客户端操作:

showmount  -e  192.168.47.138

mkdir  /web_nfs

mount -t nfs  192.168.47.139:/nfsfile  /web_nfs

cd  /web_nfs

ls

 cd  ~

vim  /etc/fstab       # 永久挂载
192.168.88.201:/nfsfile   /web_nfs   nfs    defaults    0    0

 mount  -a

 df  -h

backup服务器环境搭建

更换yum源并下载安装包

yum install vim  tree tar net-tools rsync mailx -y

创建rsync账户及共享目录并修改目录属主为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.88.0/24        # 允许IP
        hosts deny = 0.0.0.0/32                # 禁止IP
        auth users = rsync                    # 用于认证的账户
        secrets file = /etc/rsync.password    # 存放用户和密码的文件

创建rsync虚拟账户名和密码,并赋予密码文件600权限

useradd -M -s /sbin/nologin rsync

mkdir /backup

 chown -R rsync /backup

systemctl enable –now rsyncd

ps -ef | grep rsync
root  1333   1  0 15:09 ?      00:00:00 /usr/bin/rsync –daemon –no-detach
root  1335   1261  0 15:09 pts/0  00:00:00 grep –color=auto rsync
 echo "rsync:rsync123" > /etc/rsync.password

chmod 600 /etc/rsync.password

配置备份脚本

配置web01客户端本地备份脚本

web01客户端主机需要打包备份的内容

tree  /var/log/nginx   # 日志

tree /www      # 网站主数据

以及定时任务和备份脚本源文件 :/var/spool/cron/root、/etc/rc.local、/server/scripts

编写备份web01服务器的脚本

 mkdir  /backup

mkdir -p  /server/scripts

vim  /server/scripts/backup.sh

#!/bin/bash
# Date:2025-8-8
# Author:zy
# Mail:zy@126.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.88.202   # 备份服务器的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"

vim /etc/rsync.password     # 客户端建立认证的文件密码如下:
rsync123                                    # 注意:只写密码

chmod 600 /etc/rsync.password   # 密码认证文件必须为600

测试

bash  /server/scripts/backup.sh 

在backup服务器中可以看到推送的数据

ls  /backup/192.168.88.200/

配置nfs01客户端本地备份脚本

nfs01客户端主机需要打包备份的内容:

tree  /nfsfile/       # 共享目录数据
/nfsfile/
└── readme

 以及/var/log/message文件、mount  -l  挂载信息

编写备份nfs01服务器的脚本

mkdir  /backup

mkdir -p  /server/scripts

vim  /server/scripts/backup.sh

#!/bin/bash
# Date:2025-8-8
# Author:zy
# Mail:zy@126.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.202   # 备份服务器的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"

vim /etc/rsync.password     # 客户端建立认证的文件密码如下:
rsync123                                    # 注意:只写密码

chmod 600 /etc/rsync.password   # 密码认证文件必须为600

测试

 在backup服务器中可以看到推送的数据

ls  /backup/

配置定时任务

web01服务器编辑定时任务,实现每天00:00定时备份本地数据,并推送到Rsync服务器上

systemctl status  crond

crontab  -e                    # 添加:
00 00 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

nfs01服务器过程同上

systemctl status  crond

crontab  -e                    # 添加:
00 00 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

backup服务器编写脚本,实现删除180天前的所有备份数据,但保存每周一的

 mkdir -p /server/scripts

 cd /server/scripts/

 vim /server/scripts/del_bak_data.sh

#!/bin/bash
# Date:2025-8-8
# Author:zy
# Mail:zy@126.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

backup服务器配置定时任务,实现服务端180天前数据自动删除

crontab -e
# crond-id-003:data backup
00 00 * * * /bin/sh /server/scripts/del_bak_data.sh >/dev/null 2>&1

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

验证数据完整性

backup服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程完整性验证。

vim send_mail.sh 

#!/bin/bash
# Date:2025-8-8
# Author:zy
# Mail:zy@126.com
# Function: Verify the integrity of backup files
# Version: V1.0

Date=$(date +%F_Week0%w)
Backup_Dir="/backup/"
Check_Log="/tmp/bak.log_$(date +%F)"    # 定时检查备份结果的文件
Admin_Mail=17674044@qq.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 data error,pls check it." > $Check_Log    # 如果结果文件不存在,日志信息变化,报错
    mail -s "$Date backup data info" $Admin_Mail < $Check_Log
fi
cp $Check_Log{,.ori} && > $Check_Log

配置qq邮箱ssl证书

mkdir -p /root/.certs

cd  /root/.certs

echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt

certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt

vim  /etc/mail.rc
# 最后一行后添加以下内容:

set from= 2359025274@qq.com
set smtp=smtps://smtp.qq.com:465         # ssl端口默认465
set smtp-auth-user= 2359025274@qq.com
set smtp-auth-password=sggthegnldmoebjd
set smtp-auth=login
set nss-config-dir=/root/.certs/     # 设置证书路径
set ssl-verify=ignore                # 启用加密ssl传输in

测试邮件服务

echo  "testmail"  |  mail  -s  "testmail"  2359025274@qq.com
bash /server/scripts/send_mail.sh

赞(0)
未经允许不得转载:网硕互联帮助中心 » 自动化备份全网服务器数据平台
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!