一、项目结构图
二、服务端环境配置
1、环境初始化
1.安装
[root@backup ~]# yum install rsync -y
2.配置 ( 改变程序运行轨迹 )
[root@backup ~]# cat /etc/rsyncd.conf
uid = rsync
gid = rsync
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 = welcome to oldboyedu backup!
path = /backup
3.根据配置创建一些初识环境:
3.1创建rsync用户 rsync程序需要rsync这个用户来运行
[root@backup ~]# groupadd rsync
[root@backup ~]# useradd -M -s /sbin/nologin rsync -g rsync
[root@backup ~]# id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)
3.2 虚拟用户 /etc/rsync.passwd username:password
[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.passwd
[root@backup ~]# chmod 600 /etc/rsync.passwd
3.3 创建一个/backup目录
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
4.启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
5.检测
[root@backup ~]# netstat -lntp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 8616/rsync
2、发邮件的环境初始化
[root@backup /]# yum install mailx -y
[root@backup /]# vim /etc/mail.rc #跳转至最后一行,然后进入编辑模式
set from=发件人@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=发件人@qq.com
set smtp-auth-password=xxxx
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
三、服务端脚本编写
[root@backup ~]# cat /scripts/check_data_notify.sh
#!/usr/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Src=/backup
Date=$(date +%F)
#1.校验每天客户端推送过来的flag数据
md5sum -c ${Src}/*_${Date}/flag_${Date} >${Src}/result_${Date}
#2.邮件通知管理员
mail -s "Rsync Backup ${Date}" 收件人@qq.com < ${Src}/result_${Date}
#3.保留最近180天的数据
find $Src/ -type d -mtime +180 | xargs rm -rf
四、客户端
1、客户端脚本编写
[root@nfs ~]# mkdir /scripts
[root@nfs ~]# vim /scripts/clinet_push_data_server.sh
#!/usr/bin/bash
# variables == 变量 ---> 一个固定的字符串表示一个不固定的值
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Src=/backup
Host=$(hostname)
Addr=$(ifconfig eth1 | awk 'NR==2 {print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
#1.准备对应的备份目录
[ -d $Src/$Dest ] || mkdir -p $Src/$Dest
#2.将文件拷贝至备份目录
cd / && \
[ -f $Src/$Dest/sys.tar.gz ] || tar czf $Src/$Dest/sys.tar.gz etc/fstab etc/hosts etc/passwd && \
[ -f $Src/$Dest/other.tar.gz ] || tar czf $Src/$Dest/other.tar.gz var/spool/cron/ scripts/ && \
#3.添加标记
[ -f $Src/$Dest/flag_${Date} ] || md5sum $Src/$Dest/*.tar.gz > $Src/$Dest/flag_${Date}
#4.推送数据至远程仓库
export RSYNC_PASSWORD=123456
rsync -avz $Src/ rsync_backup@172.16.1.41::backup
#5.保留本地最近7天的数据
find $Src/ -type d -mtime +7 | xargs rm -rf
2、定时任务
#定时执行打包脚本,将备份文件和校验flag推送到服务端
*/1 * * * * sh /scripts/script_clinet_bash.sh >/dev/null