rsync扩展
环境准备:
NFS01:
[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]# cd /data
[root@nfs01 /data]# touch {a..d}
[root@nfs01 /data]# ls
a b c d
实现:
--exclude 排除参数
例:排除 a b
[root@nfs01 /data]# rsync -avz /data/ --exclude=a --exclude=b rsync_backup@172.16.1.41::backup
sending incremental file list
./
c
d
排除1到4
[root@nfs01 /data]# touch {1..5}
[root@nfs01 /data]# rsync -avz /data/ --exclude={1..4} rsync_backup@172.16.1.41::backup
sending incremental file list
./
5
a
b
[root@nfs01 /data]# rsync -avz /data/ --exclude={1,3,a} rsync_backup@172.16.1.41::backup
sending incremental file list
2
4
--exclude-from 从文件排除
[root@nfs01 /data]# rsync -avz /data/ --exclude-from=./paichu.txt rsync_backup@172.16.1.41::backup
sending incremental file list
./
16
17
18
19
20
paichu.txt
rsync作为镜像,相当于raid1,让两台服务器目录保持一致。
--delete 让两台服务器目录保持一致
推送:
rsync -avz --delete /data/ rsync_backup@172.16.1.41::backup
本地目录有啥,远端就有啥。
注意:远端目录是不是东西更多,多了东西会被删除。提前备份backup对应的目录。
rsync -avz --delete rsync_backup@172.16.1.41::backup /data/
远端有什么。本地目录就有什么,注意本地/data目录。把/data改成根。提前注意备份本地/data
--partial 支持大文件断点续传
--bwlimit=KBPS 限速。
某上市公司,白天高峰期某DBA人员从数据库服务器通过rsync将上百GB数据复制到备份服务器,导致数据库库服务器带宽占满,造成用户无法访问网站的悲剧。其实可以利用rsync限速功能,将复制速度限制在剩余带宽的1/3或者1/2,可能就不会出现故障了
1.最简单的实现,可以在配置文件结尾加如下内容(特殊底纹部分):
[root@backup ~]# cat /etc/rsyncd.conf
#rsync_config_______________start
#created by oldboy
#site: http://www.oldboyedu.com
uid = rsync
gid = rsync
use chroot = no
fake super = yes
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
comment = welcome to oldboyedu backup.
path = /backup/
[data] #<==新模块。
path = /data/ #<==新备份目录。
除了增加以上两行外,读者也可以设定更多的独立配置参数,例如:独立虚拟用户,独立密码文件等。
[root@backup ~]# mkdir -p /data
[root@backup ~]# chown -R rsync.rsync /data
[root@backup ~]# ls -ld /data
drwxr-xr-x 2 rsync rsync 6 4月 16 10:04 /data
[root@backup ~]# systemctl restart rsyncd
[root@backup ~]# ls /data
etc
程序员开发代码(他电脑上)==>代码服务上(git/svn代码版本管理)==>测试环境测试===>正式环境
原则上程序代码可以不备份。
运维人员,写个定时任务,写个备份脚本,更改或增加服务配置rsyncd.conf,需要备份
运维人员修改配置(测试服务器)==>代码服务器上(git/svn代码版本管理)==>测试环境测试===>正式环境
原则上运维人员的变更可以不备份。
图片、视频等文件是放在存储服务器上的,任意时刻都可能传上来,必须实时备份。
文本(博客文章),放在数据库里,,任意时刻都可能发布,必须实时备份。
Rsync 企业级全网备份项目
随着互联网大环境的不断蓬勃发展,社会上各个行业都不断转变思路,拓展自
己的业务领域,向着互联网企业进行转型,转型后的企业也在不断扩展着自身的互
联网架构.随着架构不断的扩展,架构中的服务器数量也在不断增多,由原来的几
台变为几十台,甚至几百台的规模。此时由于服务器数量的增多,对服务器中数
据的管理备份也随之变的复杂,传统的本地备份或简单的 scp 复制到存储服务器
的备份解决方案,已远远不能有效的解决规模壮大后的架构需求。因此急需一种
更为智能的解决方案来完成备份数据需求,保证整体架构数据的安全可靠性。
某公司里有一台 web 服务器,里面的数据很重要,但是如果硬盘坏了,数据
就会丢失,现在领导要求把数据做备份,这样 web 服务器数据丢失可以进行恢复,
要求如下:
每天晚上 00 点整在 web 服务器 A 上打包备份系统配置文件、网站程序目录
及访问日志并通过 rsync 命令推送到服务器 B 上备份保留(备份思路可以是先在
本地按日期打包,然后再推到备份服务器 B 上)
已知 3 台服务器主机名分别为 web01、backup 、nfs01,主机信息如下
名称外网IP内网IP主机名称
nginx web 服务器 10.0.0.7/24172.16.1.7/24web01
NFS 存储服务器 10.0.0.31/24172.16.1.31/24nfs01
rsync 备份服务器 10.0.0.41/24172.16.1.41/24backup
所有服务器的备份目录必须都为/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 把备份成功或失败结果信息发给系统管理员邮箱中。
服务器说明备份目录目录说明备注
all serve/backup备份目录统一服务器本地备份目录,便于管理
all serve/var/spool/cron/roo定时任务服务配置文件
all serve/etc/rc.local开机自启动配置文件
all serve/server/scripts日常脚本目录统一服务器本地脚本目录,便于管理
web server/var/html/wwwweb 服务器站点目录mkdir -p /var/html/www
web server/app/logsweb 服务器访问日志路径mkdir –p /app/logs
解决方案
backup服务器配置好rsync
web01、nfs01配置好密码
参考:参考内容
/var/spool/cron/root
/etc/rc.local
/server/scripts
/var/html/www
/app/logs
Web 服务器本地保留打包后的 7 天备份数据即可(本地留存不能多于 7 天
备份服务器上,要按照备份数据服务器的内网 IP 为目录保存备份,备份的文
件按照时间名字保存
上传本地创建好以IP地址的文件即可
需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据是否完整
进行检查
将打包好的文件上传即可
在命令行执行命令一一实现功能后,再将命令写入脚本中,执行成功后再编写定时任务即可
为虚拟环境因此需要创建没有的目录
mkdir -p /server/scripts /var/html/www /app/logs /backup
命令行执行打包命令:
[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
编写脚本:
cd /server/scripts/
vim bak.sh
#!/bin/sh
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
export RSYNC_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 &&\
#采集指纹
find /backup/ -type f -name "*$(date +%F_%w).tar.gz"|xargs md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).flag &&\
#2.删除
find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f &&\
#3.推送
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
执行/bin/sh /server/scripts/bak.sh
检查backup上是否存在以本机地址的命名的文件
编写定时任务:
[root@web01 /server/scripts]# crontab -e
[root@web01 /server/scripts]# crontab -l|tail -2
######back.....
00 00 * * * /bin/sh /server/scripts/bak.sh >/dev/null 2>&1
[root@web01 /server/scripts]# find /backup/ -type f -name "*.tar.gz" -mtime +7|xargs rm -f
ntfs服务器的脚本配置只需要把/var/html/www /app/logs这两个文件去掉即可
备份服务器 backup 上,保留最近 7 天的备份数据,同时保留 6 个月内每周一的所有数据副本。
在备份服务器上对备份的数据是否完整进行检查
每天早晨 8:00 把备份成功或失败结果信息发给系统管理员邮箱中
yum install mailx -y
teil -1 /etc/mail.rc
set from=13088229550@163.com smtp=smtp.163.com smtp-auth-user=13088229550@163.com smtp-auth- password=xxxx smtp-auth=login
systemctl reatart mail
其中password的数据是授权码
#!/bin/sh
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
if [ $(date +%w) -eq 1 ]
then
:
else
find /backup/ -type f -name "*.tar.gz" -mtime +180|xargs rm -f &&\
find /backup/ -type f -name "*_$(date +%w).tar.gz" -mtime +7|xargs rm -f
fi
find /backup -type f -name "*$(date +%F_%w).flag"|xargs md5sum -c >/tmp/fail.log
mail -s "$(date +%F_+%T)backup data error" 1771617190@qq.com </tmp/fail.log
首先查看自己的邮箱是否有邮件