准备三台服务器,两台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上运行脚本
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 邮件标题 邮箱