rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

五陵年少金市东,银鞍白马渡春风。这篇文章主要讲述rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#相关的知识,希望能为你提供帮助。
rsync企业真实项目备份案例实战 1.环境准备

角色 网IP 主机名
nfs 192.168.81.210 nfs
web 192.168.81.220 web
rsync 192.168.81.230 backup
2.需求描述客户端需求:
1.客户端每天凌晨1点在服务器本地打包备份(系统配置文件、日志文件、其他目录、应用配置文件)
2.客户端备份的数据必须存放至以主机名IP地址当前时间命名的目录中,例如/backup/nfs_192.168.81.210_2020-05-26,其实更好的备份方式/backup/192.168.81.210/nfs_2020-05-26,一会采用后者,要求不只是备份文件,要求连上级目录一并拷过来
3.客户端最后通过rsync推送本地打包好的备份文件至backup服务器
4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
分析思路:
1.要备份的文件
系统配置文件:/etc/fstab /etc/hosts /var/spool/cron/root
日志文件:/var/log/messages/var/log/secure
服务配置文件:/etc/rsyncd.conf
2.备份目录:/backup/192.168.81.210/nfs_2020-05-26
3.获取信息
?主机名:hostname
?ip地址:ifconfig ens33 | awk NR==2print $2 或者hostname -I | awk print $2
?时间:date +%F
?目录名:/backup/$(ifconfig ens33 | awk NR==2print $2)/$(date +%F)
?带目录一起拷贝:cp -p --parents source destion
服务端需求:
1.服务端部署rsync,用户接受客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要将每天的校验结果通知给管理员
4.服务端仅保留6个月的备份数据,其余全部删除
分析思路:
校验:客户端推送时将校验文件一起推过来,然后使用md5sum -c md5file来校验,如果没有丢失数据会提示ok,要注意md5sum校验时源端数据要和目标端数据路径要保持一致
保留6个月:find 路径 -mtime 180 | xargs rm -rf
3.服务器端配置 3.1.脚本安装rsync守护进程
3.1.1.脚本编写
vim rsyncd_shjc_install.sh #!/bin/bash #批量部署rsync yum -y install rsync & > /dev/null echo -e "\\e[033m1.rsync install... \\e[0m"cat > /etc/rsyncd.conf < < EOF uid = rsync gid = rsync port 873 fake super = yes use chroot = no transfer logging = yes#记录日志 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/rsync/rsync.log [backup] comment = backup path = /backup EOF echo -e "\\e[033m2.rsync config finish... \\e[0m" id rsync & > /dev/null if [ $? -ne 0 ]; then useradd -M -s /sbin/nolog rsync fiif [ ! -e /backup ]; then mkdir /backup fi chown -R rsync:rsync /backup echo -e "\\e[033m3.backup dir finish... \\e[0m"echo "rsync_backup:123456" > /etc/rsync_passwd chmod 600 /etc/rsync_passwd echo -e "\\e[033m4.rsync auth finish... \\e[0m"systemctl restart rsyncd systemctl enable rsyncd & > /dev/null lsof -i:873 & > /dev/null if [ $? -eq 0 ]; then echo -e "\\e[033m5.rsync finish.....\\e[0m" fi

3.1.2.执行结果
[root@localhost ~]# ./rsyncd_shjc_install.sh 1.rsync install... 2.rsync config finish... 3.backup dir finish... 4.rsync auth finish... 5.rsync finish.....

3.1.3.测试是否能用
[root@jxl ~]# rsync -avz rsync_backup@192.168.81.230::backup /tmp/ receiving incremental file list ./ aa1 aa10 aa2 aa3 aa4 aa5 aa6 aa7 aa8 aa9 initial-setup-ks.cfgsent 240 bytesreceived 1,696 bytes3,872.00 bytes/sec total size is 1,940speedup is 1.00

4.rsync扩展
增加两个需求
?1.增加一个模块
?2.每个模块使用不同的登录认证
4.1.增加新的模块
[root@localhost ~]# cat > > /etc/rsyncd.conf < < EOF > > [mysql_bak] > comment = mysql back > path /mysql_data > EOF [root@localhost ~]# mkdir -p /mysql_data [root@localhost ~]# chown -R rsync:rsync /mysql_data [root@localhost ~]# systemctl restart rsyncd

rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

4.2.每个模块使用不同的登录名实现思路很简单,把全局的认证参数放到局部即可
1.编辑配置文件
[root@localhost ~]# vim /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 log file = /var/log/rsync/rsync.log[backup] comment = backup path = /backup auth users = rsync_backup secrets file = /etc/rsync_passwd[mysql_bak] comment = mysql back path = /mysql_data auth users = rsync_mysqlbak secrets file = /etc/rsync_mysqlbak_passwd

2.创建认证文件
bakcup模块 [root@localhost ~]# echo "rsync_backup:123456" > /etc/rsync_passwdmysql_bak模块 [root@localhost ~]# echo "rsync_mysqlbak:123456" > /etc/rsync_mysqlbak_passwd设置权限 [root@localhost ~]# chmod 600 /etc/rsync*_passwd [root@localhost ~]# systemctl restart rsyncd

3.验证
bakcup模块 [root@jxl ~]# rsync -avz rsync_backup@192.168.81.230::backup /tmp/ receiving incremental file list ./sent 27 bytesreceived 245 bytes181.33 bytes/sec total size is 1,940speedup is 7.13mysql_bak模块 [root@jxl ~]# rsync -avz rsync_mysqlbak@192.168.81.230::mysql_bak /tmp/ receiving incremental file list ./ mysql01.sql mysql02.sql mysql03.sql mysql04.sql mysql05.sql mysql06.sql mysql07.sql mysql08.sql mysql09.sql mysql10.sqlsent 221 bytesreceived 604 bytes550.00 bytes/sec total size is 0speedup is 0.00

5.客户端配置初步配置,仅在本地生成目录
5.1.安装rsync包
[root@jxl ~]# yum -y install rsync

5.2.定义密码文件或者变量
如果密码相同强烈建议使用变量,密码不相同一定要用密码文件
--password-file= export RSYNC_PASSWORD=

5.3.编写脚本,将需要备份的文件拷贝至备份目录
#!/bin/bash #定义环境变量 export Host=$(hostname) export IP=$(ifconfig ens33 | awk NR==2print $2) export Day=$(date +%F) export Backup_dir=/backup export Dest_local_dir=$Backup_dir/$IP/$Host_$Day export Dest_rsync_dir=$Backup_dir/$IP export Rsync_ip=192.168.81.230 export Rsync_user=rsync_backup export Rsync_module=backup export RSYNC_PASSWORD=123456 #创建备份目录 if [ ! -e $Dest_local_dir ]; then mkdir -p $Dest_local_dir fi#收集需要备份的文件 #sysconf backup cp -p --parents /etc/fstab /etc/hosts /var/spool/cron/root $Dest_local_dir #logs backup cp -p --parents /var/log/messages /var/log/secure $Dest_local_dir #serverconf backup cp -p --parents /etc/rsyncd.conf $Dest_local_dir#推送数据 rsync -avz $Dest_rsync_dir $Rsync_user@$Rsync_ip::$Rsync_module#只保留七天内的文件 find $Dest_rsync_dir -type d -mtime +7 | xargs rm -rf

5.4.执行脚本
[root@web scripts]# sh -n rsyncd_backup.sh [root@web scripts]# sh -vx rsyncd_backup.sh

5.5.观察本地生成的目录
改个时间在执行一次 [root@web ~]# tree /backup/ /backup/ └── 192.168.81.220 └── web_2020-05-28 ├── logs.tar.gz ├── md5_check ├── serverconf.tar.gz └── sysconf.tar.gz2 directories, 4 files

5.6.观察rsync服务端生成的目录
[root@backup ~]# tree /backup/ /backup/ └── 192.168.81.220 └── web_2020-05-28 ├── logs.tar.gz ├── md5_check ├── serverconf.tar.gz └── sysconf.tar.gz2 directories, 4 files

6.客户端/服务端高级脚本配置响应需求 6.1.客户端高级配置
1.客户端每天凌晨1点在服务器本地打包备份
[root@web scripts]# crontab -l 0 1 * * * /usr/bin/bash /scripts/rsyncd_backup.sh

2.脚本内容---打包备份
#将收集的文件打包 #sysconf backup tar cfzP $Dest_local_dir/sysconf.tar.gz /etc/fstab /etc/hosts /var/spool/cron/root #logs backup tar cfzP $Dest_local_dir/logs.tar.gz /var/log/messages /var/log/secure #serverconf backup tar cfzP $Dest_local_dir/serverconf.tar.gz /etc/rsyncd.conf

3.客户端备份的数据必须存放至以IP地址/主机名当前时间命名的目录
export Host=$(hostname) export IP=$(ifconfig ens33 | awk NR==2print $2) export Day=$(date +%F) export Backup_dir=/backup export Dest_local_dir=$Backup_dir/$IP/$Host_$Day export Dest_rsync_dir=$Backup_dir/$IPif [ ! -e $Dest_local_dir ]; then mkdir -p $Dest_local_dir fi

4.客户端最后通过rsync推送本地打包好的备份文件至backup服务器
export Dest_rsync_dir=$Backup_dir/$IP export Rsync_ip=192.168.81.230 export Rsync_user=rsync_backup export Rsync_module=backup export RSYNC_PASSWORD=123456rsync -avz $Dest_rsync_dir $Rsync_user@$Rsync_ip::$Rsync_module

5.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
#只保留七天内的文件 find $Dest_rsync_dir -type d -mtime +7 | xargs rm -rf

6.2.服务端高级配置
写死情况(不建议使用)
1.服务端需要每天校验客户端推送过来的数据是否完整并通知管理员
#检测web数据是否完整 md5sum -c $Checkweb_dir/$Md5sum_fileif [ $? -ne 0 ]; then echo -e "\\e[031m$Rsync_web数据校验不完整\\e[0m" | mail -s "check $Rsync_web error " 15910468023@163.com elseecho -e "\\e[032m$Rsync_web数据校验完整\\e[0m" | mail -s "check $Rsync_web ok " 15910468023@163.com fi#检测nfs数据是否完整 md5sum -c $Checknfs_dir/$Md5sum_fileif [ $? -ne 0 ]; then echo -e "\\e[031m$Rsync_nfs数据校验不完整\\e[0m" | mail -s "check $Rsync_nfs error " 15910468023@163.com else echo -e "\\e[032m$Rsync_nfs数据校验完整\\e[0m" | mail -s "check $Rsync_nfs ok " 15910468023@163.com fi

2.服务端仅保留6个月的备份数据,其余全部删除
#删除60天外的数据 find $Backup_rsyncweb_dir -type d -mtime +180 |xargs rm -rf find $Backup_rsyncnfs_dir -type d -mtime +180 |xargs rm -rf

使用通配符(强烈建议)
[root@backup@scripts]# vim rsyncd_sjjy2.sh #!/bin/bash #rsync数据校验 export Backup_dir=/backup export Result_dir=$Backup_dir/result export Day=$(date +%F) export Md5_file=md5_check export Result_file=result_$Day.txt export Rsync_dir=$Backup_dir/*/*_$Day export Jiaoyanfile_path=$Rsync_dir/$Md5_file export Resultfile_path=$Result_dir/$Result_file export Rmdir_dir=$Backup_dir/*/*#根据校验情况发送邮件 md5sum -c $Jiaoyanfile_path if [ $? -eq 0]; then md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is ok..." 15910468023@163.com < $Resultfile_path else md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is fail..." 15910468023@163.com < $Resultfile_path fi#删除6个月之前的文件 find $Rmdir_dir/ -type d -mtime +180 | xargs rm -rf find $Result_dir/ -type f -mtime +180 | xargs rm -rf

7.整个脚本内容客户端
[root@web scripts]# vim rsyncd_backup.sh #!/bin/bash #定义环境变量 export Host=$(hostname) export IP=$(ifconfig ens33 | awk NR==2print $2) export Day=$(date +%F) export Backup_dir=/backup export Dest_local_dir=$Backup_dir/$IP/$Host_$Day export Dest_rsync_dir=$Backup_dir/$IP export Rsync_ip=192.168.81.230 export Rsync_user=rsync_backup export Rsync_module=backup export RSYNC_PASSWORD=123456 #创建备份目录 if [ ! -e $Dest_local_dir ]; then mkdir -p $Dest_local_dir fi#收集需要备份的文件 #sysconf backup #cp -p --parents /etc/fstab /etc/hosts /var/spool/cron/root $Dest_local_dir #logs backup #cp -p --parents /var/log/messages /var/log/secure $Dest_local_dir #serverconf backup #cp -p --parents /etc/rsyncd.conf $Dest_local_dir#将收集的文件打包 #sysconf backup tar cfzP $Dest_local_dir/sysconf.tar.gz /etc/fstab /etc/hosts /var/spool/cron/root #logs backup tar cfzP $Dest_local_dir/logs.tar.gz /var/log/messages /var/log/secure #serverconf backup tar cfzP $Dest_local_dir/serverconf.tar.gz /etc/rsyncd.conf #md5校验 md5sum $Dest_local_dir/* > $Dest_local_dir/md5_check#推送数据 rsync -avz $Dest_rsync_dir $Rsync_user@$Rsync_ip::$Rsync_module#只保留七天内的文件 find $Dest_rsync_dir -type d -mtime +7 | xargs rm -rf#Host变量是主机名IP变量是当前主机的ip地址Day变量是当前服务器的日期Backup_dir变量表示本地的备份目录 #Dest_local_dir变量表示存放在备份目录的那个子目录----父目录/IP目录/日期目录 #Dest_rsync_dir变量表示将本地那个目录同步到rsync服务端 #Rsync_ip变量表示远程rsync服务器的ip地址#Rsync_user变量表示rsync的管理用户#Rsync_ip变量表示rsync服务器的ip地址 #Rsync_module变量表示rsync的模块名#RSYNC_PASSWORD变量表示rsync的密码

服务端
[root@backup@scripts]# vim rsyncd_sjjy2.sh #!/bin/bash #rsync数据校验 export Backup_dir=/backup export Result_dir=$Backup_dir/result export Day=$(date +%F) export Md5_file=md5_check export Result_file=result_$Day.txt export Rsync_dir=$Backup_dir/*/*_$Day export Jiaoyanfile_path=$Rsync_dir/$Md5_file export Resultfile_path=$Result_dir/$Result_file export Rmdir_dir=$Backup_dir/*/*#根据校验情况发送邮件 md5sum -c $Jiaoyanfile_path if [ $? -eq 0]; then md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is ok..." 15910468023@163.com < $Resultfile_path else md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is fail..." 15910468023@163.com < $Resultfile_path fi#删除6个月之前的文件 find $Rmdir_dir/ -type d -mtime +180 | xargs rm -rf find $Result_dir/ -type f -mtime +180 | xargs rm -rf#Backup_dir表示备份目录Result_dir表示校验结果存放目录Day表示当前日期 #Md5_file表示md5校验文件名Result_file表示校验结果文件名Rsync_dir表示每日rsync增量的目录路径 #Jiaoyanfile_path表示校验文件所在路径Resultfile_path表示校验结果文件所在路径Rmdir表示要删哪些目录

8.测试脚本可用for命令造数据
[root@web scripts]# for i in 1..28; do date -s 2020/01/$i & & sh rsyncd_backup.sh ; done

服务端就有了
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

执行服务端脚本验证保留180天
客户端疯狂造数据,180天前的多造一些,180天内的也造一些 for i in 1..28; do date -s 2019/10/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2019/11/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2019/12/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2020/01/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2020/02/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2020/03/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2020/05/$i & & sh rsyncd_backup.sh ; done for i in 1..28; do date -s 2020/06/$i & & sh rsyncd_backup.sh ; done服务端执行脚本 [root@backup scripts]# sh rsyncd_sjjy.sh

验证后只有60天内的数据
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

9.rsync使用163发送邮件提醒管理员 9.1.服务端配置
安装mailx [root@backup@scripts]# yum -y install mailx在配置文件最后加入 [root@backup@scripts]# vim /etc/mail.rc set from=15910468023@163.com//邮箱地址 set smtp=smtps://smtp.163.com//邮箱smtp地址 set smtp-auth-user=15910468023@163.com//邮箱地址 set smtp-auth-password=CPDBDXEGKVXJZHMB//smtp生成的校验码 set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/

9.2.编写rsync校验脚本
[root@backup@scripts]# vim rsyncd_sjjy2.sh #!/bin/bash #rsync数据校验 export Backup_dir=/backup export Result_dir=$Backup_dir/result export Day=$(date +%F) export Md5_file=md5_check export Result_file=result_$Day.txt export Rsync_dir=$Backup_dir/*/*_$Day export Jiaoyanfile_path=$Rsync_dir/$Md5_file export Resultfile_path=$Result_dir/$Result_file export Rmdir_dir=$Backup_dir/*/*#根据校验情况发送邮件 md5sum -c $Jiaoyanfile_path if [ $? -eq 0]; then md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is ok..." 15910468023@163.com < $Resultfile_path else md5sum -c $Jiaoyanfile_path | tee -a$Resultfile_path mail -s "rsync backup jiaoyan is fail..." 15910468023@163.com < $Resultfile_path fi#删除6个月之前的文件 find $Rmdir_dir/ -type d -mtime +180 | xargs rm -rf find $Result_dir/ -type f -mtime +180 | xargs rm -rf#Backup_dir表示备份目录Result_dir表示校验结果存放目录Day表示当前日期 #Md5_file表示md5校验文件名Result_file表示校验结果文件名Rsync_dir表示每日rsync增量的目录路径 #Jiaoyanfile_path表示校验文件所在路径Resultfile_path表示校验结果文件所在路径Rmdir表示要删哪些目录

9.3.163邮箱开启smtp并生成校验码
1.进入163邮箱点击设置---POP3/SMTPIMAP
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

2.选择开启
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

3.发送短信生成校验码
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

4.复制校验码到mailx的配置文件中
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

5.Linux端发送邮件,提示已收到
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

【rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#】6.根据rsync校验脚本生成结果并发送到163邮箱
校验正常
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片

校验失败
rsync企业真实项目备份案例实战(需求收集--服务器配置---客户端配置---报警机制---数据校验---邮件告警) #yyds干货盘点#

文章图片


    推荐阅读