!!!!建议收藏 Rsync项目实践:数据备份 (文件同步到服务器)

news/2024/7/2 23:59:12

Rsync项目实践:数据备份

项目需求

基本备份要求

准备三台服务器,两台web服务器、一台rsync备份服务器 主机名分别为web01、web02、backup

主机名			外网IP				
web01		10.0.0.7/24			
web02		10.0.0.8/24
backup		10.0.0.41/24		

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLf7EhNj-1666099690586)(…/…/图片/image-20221018164708556.png)]

客户端需求

1.客户端每天凌晨01点在服务器本地打包备份(系统配置文件、日志文件、其他目录、应用配置等

文件)

2.客户端备份的数据必须存放至以主机名IP地址当前时间命名的目录中,

例 /backup/nfs_10.0.0.31_2018-09-26

3.客户端最后通过 rsync 推送本地已打包好的备份文件至 backup 服务器

4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据

2.服务端需要每天校验客户端推送过来的数据是否完整

3.服务端需要每天校验的结果通知给管理员

4.服务端仅保留3个月的备份数据,其余的全部删除

注意:所有服务器的备份目录必须都为/backup

项目需求分析

客户端需求分析

1.每天凌晨01点在服务器本地打包备份

​ 设置定时任务

crontab -e
0 1 * * * sh /root/rsync_client.sh

2.备份文件

系统配置文件
设备挂载配置文件   /etc/fstab		本地内网配置文件	/etc/hosts
系统日志文件
系统安全日志、rsysloglog日志等	/var/log/		
应用程序日志
nginx运行日志	/etc/nginx/conf.d/

3.客户端备份的数据必须存放至以主机名IP地址当前时间命名的目录中,

创建一个目录 以主机名IP地址当前时间命名
获取主机名  hostname
获取主机IP ip add  show ens33 | awk -F'[ /]+' '/inet /{print $3}' 
当前时间  date +%F

4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

查找7天以前的内容并删除

find /backup/ -atime +7 -delete

服务端需求分析

1.服务端部署rsync,部署邮箱代理(校验完数据后反馈校验信息至QQ邮箱)


2.服务端需要每天校验客户端推送过来的数据是否完整

把服务器需要备份的文件存放在主机名IP地址当前时间命名的目录中,对目录中的文件进行压缩归档。

服务器和客户端:
使用md5sum命令生成和校验文件的md5值,并把校验的结果重定向到以主机名 IP地址 当前时间 .md5sum命名的文件
把两个文件的值进行对比

3.服务端需要每天校验的结果通知给管理员

把校验结果发送至管理员的邮箱

mail -s "校验的结果" $管理员的邮箱号 < $mail_file

4.服务端仅保留3个月的备份数据,其余的全部删除

删除三个月之前的文件

find /backup/ -atime  +90 -name "*.tar.gz" -delete 

项目设计

编写shell脚本实现

客户端脚本

定义变量
dir=/backup/		#所有服务器的备份目录必须都为/backup
host=$(hostname)	#获取主机名
ip=$(ip add  show ens33 | awk -F'[ /]+' '/inet /{print $3}')	#获取IP地址
date=$(date +%F)	#显示当前日期
bak_dir=$dir$host-$ip-$date		#客户端备份的数据必须存放至以主机名IP地址当前时间命名的目录中
conf_bak="/etc/passwd /etc/fstab /etc/hosts /etc/nginx/conf.d/"		#需要备份的系统配置文件
log_bak="/var/log /etc/nginx/logs/"		#需要备份的日志文件
other_bak="/etc/rsync.password"		#rsync的密码文件
rsync_srv=10.0.0.41		#服务器IP
rsync_user=rsync_user	#用户名
rsync_dir=backup		#目录
rsync_cmd="rsync -avz"	#使用rsync实现远程数据同步 压缩后使用归档模式传输 并以详细模式输出

服务端脚本

定义变量
dir=/backup/	#所有服务器的备份目录必须都为/backup
date=$(date +%F)	#当前日期
mail_file="/root/mail_md5sum_result"	#使用md5校验,把校验结果存放至文件中
adm_email="管理员的邮箱"

项目实施

客户端脚本

vim rsync_client.sh
#!/bin/bash
dir=/backup/
host=$(hostname)
ip=$(ip add  show ens33 | awk -F'[ /]+' '/inet /{print $3}')
date=$(date +%F)
bak_dir=$dir$host-$ip-$date
conf_bak="/etc/passwd /etc/fstab /etc/hosts /etc/nginx/conf.d/"
log_bak="/var/log /etc/nginx/logs/"
other_bak="/etc/rsync.password"
rsync_srv=10.0.0.41
rsync_user=rsync_user
rsync_dir=backup
rsync_cmd="rsync -avz"
export RSYNC_PASSWORD=1

mkdir -p $bak_dir/{confs,logs,scripts,others}	#创建需要备份的文件目录
#把文件复制到指定的目录下	并把结果丢至黑洞
cp -r $conf_bak $bak_dir/confs &>/dev/null	
cp -r $log_bak $bak_dir/logs &>/dev/null
cp -r $other_bak $bak_dir/others &>/dev/null
#在添加文档至归档后删除源文件(打包后删除源文件)
tar czf $bak_dir.tar.gz $bak_dir --remove-files &> /dev/null
#md5sum命令生成和校验文件的md5值,并把校验的结果重定向到以主机名 IP地址 当前时间 .md5sum命名的文件
md5sum $bak_dir.tar.gz > $bak_dir.md5sum

$rsync_cmd $dir $rsync_user@$rsync_srv::$rsync_dir &>/dev/null

#本地资源保留7天
find $dir -atime +7 -delete &> /dev/null

客户端计划任务

crontab -e
0 1 * * * sh /root/rsync_client.sh

服务端脚本

vim rsync_server.sh
#!/bin/bash
dir=/backup/
date=$(date +%F)
mail_file="/root/mail_md5sum_result"
adm_email="你自己的邮箱"

find $dir -name "*$date.md5sum" | xargs md5sum -c > $mail_file
mail -s "rsync_result" $adm_email < $mail_file &> /dev/null

#校验信息保留三天
find $dir -atime +3 -name "*.md5sum" -delete 

#备份数据库三个月
find $dir -atime  +90 -name "*.tar.gz" -delete 

服务端计划任务

crontab -e
0 3 * * * sh /root/rsync_server.sh

项目验收

在客户端10.0.0.7上运行脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NC6zlfsw-1666099690589)(…/…/图片/image-20221018193631373.png)]

查看文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-48rNeOvG-1666099690590)(…/…/图片/image-20221018184317266.png)]

在客户端10.0.0.8上运行脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8vGE5m3y-1666099690591)(…/…/图片/image-20221018193726760.png)]

查看文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AbSI3fLX-1666099690592)(…/…/图片/image-20221018193825279.png)]

在服务器上运行脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5cpSsPC-1666099690593)(…/…/图片/image-20221018211350387.png)]

设置邮箱的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0Yifysj-1666099690595)(…/…/图片/image-20221018195047244.png)]

查看文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mh5ujgzV-1666099690596)(…/…/图片/image-20221018194523665.png)]

验证

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8HUfR2uw-1666099690597)(…/…/图片/image-20221018205721716.png)]

项目中出现的问题汇总

使用什么样的校验方式 diff 还是md5

Linux diff命令用于比较文件的差异。diff以逐行的方式,比较文本文件的异同处。特别是比较两个版本不同的文件,如果指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。比较文件夹diff,可以直接使用diff命令

md5sum 用于计算和校验文件的MD5值

MD5,是一种单向加密,它的加密不可逆,它将任意长度的字符串,经过算法计算后生成固定长度的数据,一般为16位表示。

MD5的用途:
    1. 消息完整性:每份数据生成的MD5码不同,所以可以吧MD5码和数据一块发送,在对端使用MD5加密对数据加密在与接收的MD5码做对比,保证数据的正确性。
    2. 安全访问认证:常被用到 mysql和传递用户账户信息和密码,从用户端发送到服务器的只是一段128位的摘要,服务器拿到后直接将其存入数据库,下次登录只需与服务器的密文进行对比即可,这样保护了用户的信息,即便是后台人员也无法去获取用户的账户密码。
    3. 数字签名
其他加密算法
非对称加密:包括RSA DSA RCC,非对称加密是相比对称加密而言的。
对称加密:包括AES,DES,3DES
对称加密与解密使用的是同样的密钥,但由于需要将密钥在网络传输,所以安全性不高
非对称加密使用了一对密钥,公钥与私钥,把以安全性高,但加密与解密速度慢
解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通

如何把校验结果以邮箱的形式发给管理者

安装邮件服务

yum install -y mailx

vim /etc/mail.rc

set from=2414857437@qq.com    (自己的QQ邮箱)
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=2414857437@qq.com   (自己的QQ邮箱)
set smtp-auth-password=XXXX  (自己的邮箱IPMPA码)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

使用echo “邮件正文” | mail -s 邮件标题 邮箱


http://lihuaxi.xjx100.cn/news/91366.html

相关文章

【Spring入门学习】

Spring学习Spring入门spring简介Spring简单示例程序HelloWorld程序的搭建:IOC容器 & DI概述bean的基本配置Spring容器获取bean依赖注入方法字面值引用其他bean (ref)Spring入门 spring简介 Spring是一个开源框架&#xff0c;Spring为简化企业级应用开发而生。 使用Spring…

5. 最长回文子串

文章目录题目描述做题思路代码实现题目链接题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例 1&#xff1a; 输入&#xff1a;s “babad” 输出&#xff1a;“bab” 解释&#xff1a;“aba” 同样是符合题意的答案。 示例 2&#xff1a; 输入&#xff1a…

C语言中的字符串转数字函数常见问题详解

目录C语言中的字符串转数字函数常见问题详解字符串转整形atoi函数字符串转长整形strtol函数&#xff0c;C语言中的字符串转数字函数常见问题详解 字符串转整形 atoi函数 函数原型&#xff1a; int atoi(const char *nptr);该函数是把字符串转换成整型数的一个函数&#xff0…

Django后端开发:MVC 和 MTV以及动态路由、静态路由、自定义converters

目录 一、MVC和MTV 二、静态路由和动态路由 一、通过正则表达式来实现静态和动态路由 二、不适用正则表达式来实现静态和动态路由 一、常用的四种url路由 二、自定义转换器url路由类型 一、MVC和MTV MVC控制器Contorller部分&#xff0c;由Django框架的urlconf来实现 意思就是…

2022 需求工程复习真题【太原理工大学】

哈喽大家好&#xff0c;本篇是我整理出来的一些需求工程历年选择、填空真题&#xff0c;主要是针对期末考试用的&#xff0c;其余模块持续更新中&#xff0c;仅供参考&#xff01;>_< 目录 一、选择题 二、填空题 一、选择题 1.项目的前景和范围文档、用户需求文档都被…

Python 爬虫详解

一、爬虫概述 1、爬虫简介 要对数据进行处理和分析&#xff0c;首先就要拥有数据。在当今这个互联网时代&#xff0c;大量信息以网页作为载体&#xff0c;网页也就成了一个很重要的数据来源。但是&#xff0c;网页的数量非常之多&#xff0c;如果以人工的方式从网页上采集数据…

【SSM入门(二)】:setter依赖注入【超简单】

目录 &#x1f31e;测试结果 &#x1f31e;实现步骤 &#xff08;1&#xff09;建立空项目 ​编辑 &#xff08;2&#xff09;建立一个模块&#xff1a;maven项目 &#xff08;3&#xff09; 建立数据层dao和业务层service的接口和实现类文件 &#xff08;4&#xff09;UserDao…

WEB在线客服系统(websocket+Golang)

真正的大师,永远都怀着一颗学徒的心&#xff01; 一、项目简介 WEB在线客服系统&#xff0c;项目使用golang开发的&#xff0c;手机和电脑上都是可以自适应的。可以展示在网页页面右下角&#xff0c;只需要一段js代码&#xff0c;就可以实现功能。缩小后以悬浮的形式保留。 …