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

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上运行脚本

在客户端10.0.0.8上运行脚本

在服务器上运行脚本

设置邮箱的文件

项目中出现的问题汇总

使用什么样的校验方式 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 [email protected]    (自己的QQ邮箱)
set smtp=smtps://smtp.qq.com:465
set [email protected]   (自己的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 邮件标题 邮箱

你可能感兴趣的:(服务器,系统运维(Linux),服务器,运维,nginx,云计算,linux)