Rsync自动化备份平台建设实战
自动化备份全网服务器数据平台
总体需求
- 某企业里有一台Web服务器,里面的数据很重要,但是如果硬盘坏了数据就会丢失,现在领导要求把数据做备份,这样Web服务器数据丢失在可以进行恢复
- 要求如下:
- 每天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把备份成功或失败结果信息发送到系统管理员邮箱里。
服务器说明 | 备份目录 | 目录说明 | 备注 |
---|---|---|---|
all server | /backup | 备份目录 | 统一服务器本地备份目录,便于管理 |
all server | /var/spool/cron/root | 定时任务服务配置文件 | 系统配置文件 |
all server | /etc/rc.local | 开机自启动配置文件 | 系统配置文件 |
all server | /server/scripts | 日常脚本目录 | 统一服务器本地脚本目录,便于管理 |
Web server | /var/www/html | web服务器站点目录 | mkdir -p /var/www/html |
Web server | /app/logs | web服务器访问日志路径 | mkdir -p /app/logs |
实施步骤
web01服务器准备工作(此步骤在nfs01和backup主机相同操作)注:准备工作很重要
- 关闭防火墙、selinux
[root@web01 yum.repos.d]# systemctl stop firewalld
[root@web01 yum.repos.d]# vim /etc/selinux/config
[root@web01 yum.repos.d]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@web01 yum.repos.d]# reboot
- 配置静态ip、网关、dns
[root@web01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
[root@web01 ~]# systemctl restart network
- 下载所需要的软件
[root@web01 ~]# yum install vim tree tar net-tools rsync nfs-utils epel-release -y
- 部署网站
[root@web01 ~]# yum install nginx -y
[root@web01 ~]# mkdir /www
[root@web01 ~]# cd /www
#然后通过xftp将web源文件添加到此目录下
- 修改nginx配置文件
[root@web01 ~]# vim /etc/nginx/nginx.conf
[root@web01 ~]# systemctl start nginx
[root@web01 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
测试在windows端能否通过ip访问
nfs01服务器搭建
- 部署nfs共享储存,web01为客户端,nfs01为服务端
# nfs01端操作
[root@nfs01 ~]# yum install rpcbind -y
[root@nfs01 ~]# yum install nfs-utils -y
[root@nfs01 ~]# mkdir /nfsfile
[root@nfs01 ~]# echo "welcome www.sx.com" > /nfsfile/readme
[root@nfs01 ~]# chmod -Rf 777 /nfsfile/
[root@nfs01 ~]# vim /etc/exports
[root@nfs01 ~]# systemctl enable --now rpcbind
[root@nfs01 ~]# systemctl enable --now nfs-server
/etc/exports文件
# web01端操作
[root@web01 ~]# showmount -e 192.168.70.137 # 查看网络中的共享信息
Export list for 192.168.70.137:
/nfsfile 192.168.70.136
[root@web01 ~]# mkdir /web_nfs
[root@web01 ~]# mount -t nfs 192.168.70.137:/nfsfile /web_nfs
[root@web01 ~]# cd /web_nfs/
[root@web01 web_nfs]# ls
readme
backup服务器搭建
- 修改rsync配置文件
[root@backup ~]# vim /etc/rsyncd.conf
- 创建rsync账户及共享目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync /backup
[root@backup ~]# id rsync
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
[root@backup ~]# ps -ef | grep rsync #查看是否有rsync进程
root 2685 1 0 01:59 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 2716 2443 0 02:00 pts/0 00:00:00 grep --color=auto rsync
[root@backup ~]# echo "rsync:rsync123" > /etc/rsync.password
[root@backup ~]# chmod 600 /etc/rsync.password #官方规定的文件权限
配置web01本地备份脚本
# 编辑脚本
[root@web01 ~]# mkdir /backup
[root@web01 ~]# mkdir -p /server/scripts
[root@web01 ~]# vim /server/scripts/backup.sh
#建立认证文件密码
[root@web01 ~]# vim /etc/rsync.password # 创建的文件与backup备份服务端修改的/etc/rsyncd.conf(最后一行)文件中的一致
rsync123
[root@web01 ~]# chmod 600 /etc/rsync.password
#测试
配置nfa01端备份脚本
- 编写脚本
[root@nfs01 ~]# mkdir /backup
[root@nfs01 ~]# mkdir -p /server/scripts
[root@nfs01 ~]# vim /server/scripts/backup.sh
[root@nfs01 ~]# vim /etc/rsync.password
rsync123
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll -d /etc/rsync.password
-rw------- 1 root root 9 8月 12 08:58 /etc/rsync.password
# 测试
[root@nfs01 ~]# bash /server/scripts/backup.sh
2025-08-12_Week02 192.168.70.137 start backup ......
Local backup successful, the backup files have been pushed to the backup server
# 在备份服务器端查看
[root@backup ~]# cd /backup/
[root@backup backup]# ls
192.168.70.136 192.168.70.137
/server/scripts/backup.sh配置文件
编辑例行性计划任务
在web01主机上实现每天00:00定时备份本地数据,并推送到Rsync服务器上
在nfs01主机上做相同操作
[root@web01 web_nfs]# vim /etc/crontab
- 在backup主机上编写脚本,实现删除180天前的所有备份数据,但保存每周一的
[root@backup backup]# mkdir -p /server/scripts
[root@backup backup]# cd /server/scripts/
[root@backup scripts]# vim /server/scripts/del_bak_data.sh
#配置定时任务
[root@backup scripts]# vim /etc/crontab
验证数据完整性
- backup服务端针对客户端备份时的md5指纹数据,利用MD5命令进行验证,完成数据传输过程完整性验证。
[root@backup scripts]# vim send_mail.sh
实现邮件告警
[root@backup ~]# yum install mailx -y
[root@backup ~]# mkdir -p /root/.certs
[root@backup ~]# cd /root/.certs
[root@backup .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
verify return:1
depth=1 C = US, O = "DigiCert, Inc.", CN = DigiCert Secure Site OV G2 TLS CN RSA4096 SHA256 2022 CA1
verify return:1
depth=0 C = CN, ST = Guangdong Province, L = Shenzhen, O = Shenzhen Tencent Computer Systems Company Limited, CN = *.mail.qq.com
verify return:1
DONE
[root@backup .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@backup .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@backup .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
Notice: Trust flag u is set automatically if the private key is present.
#配置文件
[root@backup .certs]# vim /etc/mail.rc
#测试服务
[root@backup ~]# bash /server/scripts/send_mail.sh