Rsync 功能追加介绍
--exclude 排除参数
--exclude-from 从文件排除
--delete 删除参数(让两台服务器目录保持一致)
实践删除:
rsync作为镜像,相当于raid1,让两台服务器目录保持一致。
--delete 让两台服务器目录保持一致
推送:
rsync -avz --delete /data/ [email protected]::backup
本地目录有啥,远端就有啥。
注意:远端目录是不是东西更多,多了东西会被删除。提前备份backup对应的目录。
rsync -avz --delete [email protected]::backup /data/
远端有啥。本地目录就有啥,注意本地/data目录。把/data改成根。提前注意备份本地/data
--partial 支持大文件断点续传
--bwlimit=KBPS 限速
1、内部人员产生的数据(定时备份足矣)
程序员开发代码(他电脑上)==>代码服务上(git/svn代码版本管理)==>测试环境测试===>正式环境
原则上程序代码可以不备份。
运维人员,写个定时任务,写个备份脚本,更改或增加服务配置rsyncd.conf,需要备份
运维人员修改配置(测试服务器)==>代码服务器上(git/svn代码版本管理)==>测试环境测试===>正式环境
原则上运维人员的变更可以不备份。
2、用户产生的数据(必须实时备份)
图片、视频等文件是放在存储服务器上的,任意时刻都可能传上来,必须实时备份。
文本(博客文章),放在数据库里,,任意时刻都可能发布,必须实时备份。
rsync企业项目练习
某公司里有一台 web 服务器,里面的数据很重要,但是如果硬盘坏了,数据 就会丢失,现在领导要求把数据做备份,这样 web 服务器数据丢失可以进行恢复, 要求如下:
每天晚上 00 点整在 web 服务器 A 上打包备份系统配置文件、网站程序目录 及访问日志并通过 rsync 命令推送到服务器 B 上备份保留(备份思路可以是先在 本地按日期打包,然后再推到备份服务器 B 上)
已知 3 台服务器主机名分别为 web01、backup 、nfs01,主机信息见下表:
服务器说明外网IP(NAT)SSH 用内网IP(NAT)交换数据用主机名称
nginx web 服务器10.0.0.7/24 172.16.1.7/16 web01
NFS存储服务器10.0.0.31/24 172.16.1.31/16 nfs01
rsync备份服务器10.0.0.41/24 172.16.1.41/16 backup
备份要求
每天晚上 00 点整在 Web 服务器上打包备份系统配置文件、网站程序目录及 访问日志并通过 rsync 命令推送备份服务器 backup 上备份保留
备份思路
可以是先在本地按日期打包,然后再推到备份服务器 backup 上
NFS 存储服务器同 Web 服务器实际工作中就是运维主要管理的全部服务器
具体备份需求
所有服务器的备份目录必须都为/backup
要备份的系统配置文件包括但不限于:
a) 定时任务服务的配置文(/var/spool/cron/root) (适合 web 和 nfs 服 务器)
b) 开机自启动的配置文件 (/etc/rc.local) (适合web 和 nfs 服务器)
c) 日常脚本的目录 (/server/scripts)。
Web 服务器站点目录假定为/var/html/www,如果没有可以先模拟创建
Web 服务器访问日志路径假定为/app/logs,如果没有可以先模拟创建
Web 服务器本地保留打包后的 7 天备份数据即可(本地留存不能多于 7 天, 因为太多硬盘会满)
备份服务器 backup 上,保留最近 7 天的备份数据,同时保留 6 个月内每周一 的所有数据副本
备份服务器上,要按照备份数据服务器的内网 IP 为目录保存备份,备份的文 件按照时间名字保存
需要确保备份的数据尽量完整正确,在 备份服务器上对备份的数据是否完整 进行检查
每天早晨 8:00 把备份成功或失败结果信息发给系统管理员邮箱中
解答:
41搭建好rsync服务,并在31 、7 上测试成功
创建备份目录
/backup 备份目录
/var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs
编写脚本打包
模拟创建:
[root@nfs01 ~]# mkdir -p /server/scripts
[root@web01 ~]# mkdir -p /server/scripts /var/html/www /app/logs
全部创建 mkdir -p /backup
web01服务器
测试打包
[root@web01 /]# cd /
[root@web01 /]# tar zcvhf /backup/bak_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs
[root@web01 /]# ls /backup/
bak_2019-04-16_2.tar.gz
编写脚本:
[root@web01 /backup]# vim /server/scripts/bak.sh
#!/bin/sh
exportPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
exportRSYNC_PASSWORD=oldboy
IP=$(hostname -i)
mkdir -p /backup/$IP
#1.打包
tar zchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts /var/html/www /app/logs&>/dev/null &&\
touch /backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#2.采集指纹
find /backup/ -type f -name "*.tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#3.删除
find /backup/ -type f -name"*.tar.gz"-mtime +7|xargs rm -f &&\
#4.推送
rsync -az /backup/ [email protected]::backup&>/dev/null
find /backup/ -type f -name"*.flag"|xargs rm -f &>/dev/null
创建定时任务
[root@web01 /backup]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######backupweb_site
00 00* * * /bin/sh /server/scripts/bak.sh &>/dev/null
nfs01服务器
编写脚本
[root@nfs01 /backup]# vim /server/scripts/bak.sh
#!/bin/sh
exportPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
exportRSYNC_PASSWORD=oldboy
IP=$(hostname -i)
mkdir -p /backup/$IP
#1.打包
tar zchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spool/cron/root /etc/rc.local /server/scripts &>/dev/null &&\
touch /backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#2.采集指纹
find /backup/ -type f -name"*.tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#3.删除
find /backup/ -type f -name"*.tar.gz"-mtime +7|xargs rm -f &&\
#4.推送
rsync -az /backup/ [email protected]::backup&>/dev/null
find /backup/ -type f -name"*.flag"|xargs rm -f &>/dev/null
创建定时任务
[root@web01 /backup]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######backupweb_site
00 00* * * /bin/sh /server/scripts/bak.sh &>/dev/null
rsync(backup)服务器
编写脚本
[root@backup /backup]# vim /server/scripts/bak.sh
#!/bin/bash
exportPATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#指纹
find /backup -type f -name"*$(date +%F_%w).flag"|xargs md5sum -c >/tmp/fail.log
##删除
find /backup/ -type f -name"*.tar.gz"-mtime +180 -mtime +7 |xargs rm -f &&\
find /backup/ -type f ! -name"*_1.tar.gz"-mtime +7|xargs rm -f &&\
find /backup/ -type f -name"*.flag"-mtime +7|xargs rm -f
##发送邮件
mail -s "oldboy" [email protected]
配置邮件,在etc/mail.rc 最后加入
jya 2019/4/18 星期四 14:52:15
set bsdcompat
set smtp=smtp.qq.com
set smtp-auth-password=***************
set smtp-auth=login
重启邮件服务
systemctl restart postfix
执行
sh /server/scripts/bak.sh