客户端需求:
1.客户端每天凌晨1点在服务器本地打包备份(/etc目录和/var/log目录)
2.客户端备份的数据必须存放至以 "主机名_ip地址_当前时间" 命名的目录中
3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器
4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
服务端需求::
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
注意:所有服务器的备份目录必须都为/backup
客户端拆解需求
| tar命令打包,尽量以相对路径去打包 |
| /etc目录是为了备份系统配置文件,应用配置文件 |
| /var/log是为了备份所有应用程序得日志 |
| |
| 以后见到需求,某任务,要写入定时任务 |
| |
| 把其他所有的事全搞定了,最后再去写入定时任务 |
| |
| 1,需求创建/backup目录 |
| [root@nfs-31 ~]#mkdir /backup |
| |
| |
| 打包文件目录 |
| [root@nfs-31 ~]#cd / && tar -zcf /backup/etc.tgz etc |
| [root@nfs-31 /]#cd / && tar -zcf /backup/log.tgz var/log |
| [root@nfs-31 /]#ll -h /backup/ |
| total 11M |
| -rw-r--r-- 1 root root 9.4M Apr 21 16:25 etc.tgz |
| -rw-r--r-- 1 root root 741K Apr 21 16:26 log.tgz |
| |
| |
#文件夹命令
| 客户端备份数据必须存放到以 主机名_ip地址_当前年月日 命名得目录中 |
| 如:nfs-31_10.0.0.31_2022-04-21 |
| |
| 提取主机名 |
| [root@nfs-31 /]#hostname |
| nfs-31 |
| |
| |
| 提取ip地址 |
| [root@nfs-31 /]#ip addr show eth1 |awk -v FS='[ /]*' 'NR==3{print $3}' |
| 172.16.1.31 |
| [root@nfs-31 /]#ifconfig eth0 |awk 'NR==2{print $2}' |
| 10.0.0.31 |
| |
| |
| |
| 提取时间 |
| [root@nfs-31 /]#date +%F |
| 2022-04-21 |
| |
| |
| 拼接在一起 |
| [root@nfs-31 /]#mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date ) |
| |
| |
| |
| 检查客户端目录 |
| [root@nfs-31 /]#ls /backup/ |
| etc.tgz log.tgz nfs-31_10.0.0.31_2022-04-21 |
| |
| |
| |
| 备份etc和log数据,到这个目录中 |
| [root@nfs-31 /]#cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date )/etc.tgz etc |
| |
| |
| [root@nfs-31 /]#cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date )/log.tgz var/log |
| |
| |
| |
| 查看备份文件夹 |
| [root@nfs-31 /]#tree /backup/ |
| /backup/ |
| └── nfs-31_10.0.0.31_2022-04-21 |
| ├── etc.tgz |
| └── log.tgz |
| |
| 1 directory, 2 files |
| |
| |
| |
| |
#校验文件,生成校验值得文件
| [root@nfs-31 ~]#md5sum /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}')_$(date )/*.tgz > /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}')_$(date )/mk5zhi.txt |
| |
| |
| |
| [root@nfs-31 ~]#ls /backup/nfs-31_10.0.0.31_2022-04-21/ |
| etc.tgz log.tgz mk5zhi.txt |
| |
| |
| [root@nfs-31 /backup]#cat nfs-31_10.0.0.31_2022-04-21/mk5zhi.txt |
| c4998f19a73e7f343334ad389b37c7d2 /backup/nfs-31_10.0.0.31_2022-04-21/etc.tgz |
| 7b8aa8480d81be05e44828a59cba7d25 /backup/nfs-31_10.0.0.31_2022-04-21/log.tgz |
| |
#传输文件
| 客户端最后通过rsync命令推送本地打包得备份文件到rsync服务器 |
| |
| 把/backup目录下得数据,发给备份服务器 |
| 去看看rsync服务端得账户密码 |
| |
| 客户端得添加密码 |
| [root@nfs-31 /] |
| |
| 备份过去 |
| [root@nfs-31 /] |
| |
| |
| [root@rsync-41 /] |
| /backup/ |
| └── nfs-31_10.0.0.31_2022-04-21 |
| ├── etc.tgz |
| └── log.tgz |
| |
| 1 directory, 2 files |
| |
| |
| |
| |
| |
| |
| |
#删除过期文件
| 客户端服务器本地保留最近7天的数据,避免浪费磁盘空间 |
| |
| [root@nfs-31 /]#find /backup -type f -mtime +7 -delete |
| |
#整合脚本
| 把客户端的所有部署操作,写成脚本,待会交给定时任务执行即可 |
| |
| 把上述拆解的过程,写成一个脚本、批量执行。 |
| |
| |
| |
| |
| PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin |
| |
| mkdir -p /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F") |
| |
| cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/etc.tgz etc |
| |
| cd / && tar -zcf /backup/$(hostname)_$(ifconfig eth0 | awk 'NR==2{print $2}')_$(date "+%F")/log.tgz var/log |
| |
| md5sum /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}')_$(date "+%F")/*.tgz > /backup/$(hostname)_$(ifconfig eth0 |awk 'NR==2{print $2}') |
| |
| export RSYNC_PASSWORD=123456 |
| rsync -avzP /backup/ rsync_backup@rsync-41::backup |
| |
| find /backup -type f -mtime +7 -delete |
| |
| |
| |
#可以调试脚本
| 只显示执行过程,不会真的执行, |
| bash -x 能让你看到脚本执行过程,用于调试脚本,不会真的产生数据变动,只会看到执行得过程日志 |
| |
| [root@nfs-31 ~]#bash -x rsync.sh |
| |
#定时任务
| 确保crond是否运行 |
| [root@nfs-31 ~]#systemctl status crond |
| ● crond.service - Command Scheduler |
| Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled) |
| Active: active (running) since Thu 2022-04-21 15:07:53 CST; 2h 16min ago |
| Main PID: 655 (crond) |
| CGroup: /system.slice/crond.service |
| └─655 /usr/sbin/crond -n |
| |
| Apr 21 15:07:53 nfs-31 systemd[1]: Started Command Scheduler. |
| Apr 21 15:07:53 nfs-31 systemd[1]: Starting Command Scheduler... |
| Apr 21 15:07:53 nfs-31 crond[655]: (CRON) INFO (RANDOM_DELAY will be scaled w....) |
| Apr 21 15:07:53 nfs-31 crond[655]: (CRON) INFO (running with inotify support) |
| Hint: Some lines were ellipsized, use -l to show in full. |
| |
| 写定时任务 |
| crontab -e |
| 0 1 * * * /bin/bash /root/rsync.sh |
| 最后再执行 |
服务端拆解需求
#rsyncd服务端部署脚本
| 服务端部署rsync服务,用于接收客户端推送过来得备份数据 |
| 安装rsync服务 |
| yum install rsync -y |
| |
| |
| [root@rsync-41 ~] |
| |
| |
| cat >/etc/rsyncd.conf <<EOF |
| uid = www |
| gid = www |
| port = 873 |
| fake super = yes |
| use chroot = no |
| max connections = 200 |
| timeout = 600 |
| ignore errors |
| read only = false |
| list = false |
| auth users = rsync_backup |
| secrets file = /etc/rsync.passwd |
| log file = /var/log/rsyncd.log |
| ##################################### |
| [backup] |
| comment = yuchaoit.cn about rsync |
| path = /backup |
| |
| [data] |
| comment = this is secord backup dir,to website data.. |
| path = /data |
| EOF |
| |
| mkdir -p /{backup,data} |
| chown -R www:www /backup |
| chown -R www:www /data |
| |
| touch /etc/rsync.passwd |
| chmod 600 /etc/rsync.passwd |
| |
| echo "rsync_backup:123456" |
| |
| systemctl restart rsyncd |
| |
| |
| |
给脚本添加执行权限
| [root@rsync-41 ~]#chmod u+x rsync.sh |
| [root@rsync-41 ~]#./rsync.sh |
| |
| 也可以不添加,直接bash执行 |
| [root@rsync-41 ~]#bash rsync.sh |
| |
| 服务端仅保留6个月的备份数据,其余都删除 |
| |
| [root@rsync-41 ~]#find /backup -type f -mtime +7 -delete |
| |
#校验数据的完整性
| 服务端需要每天校验客户端推送过来的数据是否完整 |
| 再rsync服务端,可以通过md5sum命令校验文件完整性 |
| |
| [root@rsync-41 ~] |
| /backup/nfs-31_10.0.0.31_2022-04-21/etc.tgz: OK |
| /backup/nfs-31_10.0.0.31_2022-04-21/log.tgz: OK |
| |
邮件通知
| 让脚本执行的结果,告诉运维,它正确的执行了,数据备份也是没问题的 |
| 如果有问题,运维看到邮件也会立即去处理 |
| |
| 运维在公司里,每天第一件事就是打开邮箱,看看其他组的同事是否发来故障邮件,然后根据邮件解决问题 |
| 回复邮件 |
| |
| 服务端需要每天校验的结果通知福安李渊 |
| |
| 安装配置mailx |
| [root@rsync-41 ~] |
| |
| |
| 邮箱配置文件,给自己的信息 |
| 你的邮箱的smtp协议,需要打开你的qq,163邮箱的smtp功能 |
| 如下的信息,改为你自己的即可 |
| 邮箱的授权码,需要自己去获取 |
| |
| [root@rsync-41 ~] |
| set from=635568448@qq.com |
| set smtp=smtps://smtp.qq.com:465 |
| set smtp-auth-user=635568448@qq.com |
| set smtp-auth-password= 2333333 |
| set smtp-auth=login |
| set ssl-verify=ignore |
| set nss-config-dir=/etc/pki/nssdb/ |
| |
| |
| 服务端生成备份数据校验结果文件,把这些信息发个邮件给运维的邮箱 |
| [root@rsync-41 ~] |
| |
| |
| 校验发送命令,把这个结果发给自己的qq邮箱 |
| 语法 mail -s "邮件主题" 邮箱 < 邮件正文 |
| |
| [root@rsync-41 ~] |
| [root@rsync-41 ~] |
| |
| |
| |
| |
| mail -s "0224-chech-rsync-$(date +%F)" 635568448@qq.com < /backup/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt |

| 服务端仅保留6个月的备份数据,其余都删除 |
| |
| [root@rsync-41 ~]#find /backup -type f -mtime +7 -delete |
#服务端生成脚本
| [root@rsync-41 ~] |
| |
| |
| md5sum -c /backup/nfs-31_10.0.0.31_$(date +%F)/mk5zhi.txt > /backup/nfs-31_10.0.0.31_2022-04-21/check_md5_result.txt |
| |
| |
| mail -s "0224-chech-rsync-$(date +%F)" 635568448@qq.com < /backup/nfs-31_10.0.0.31_2022-04-21/chech_md5_result.txt |
| |
| |
| find /backup -type f -mtime +180 -delete |
| |
#写入定时任务
| 客户端 |
| 0 1 * * * /bin/bash /root/rsync.sh |
| |
| 服务端 |
| 0 1 * * * /bin/bash /root/youxiang.sh |
| |
总结
能手敲,千万别复制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!