一、Rsync概念
1.rsync简介
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及曾量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
在同步数据的时候,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可是实现快速的同步备份数据。
rsync简称远程同步,可以实现不同主机之间的同步. 同时支持增量和全量的备份.
不通主机: windows –> linux linux –> linux mac –> linux mac –> windows
rsync监听的端口:873
rsync运行模式:C/S模式 client/server
2.rsync特性
支持拷贝特殊文件,如连接文件、设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
3.生产场景备份方案
1.借助cron+rsync把所有客户服务器数据同步到备份服务器。
2.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
3.通过本地打包备份,然后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。
4.定期将IDC机房的数据 备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
5.实时同步,解决存储服务器等的单点问题。
4.rsync的备份方式
2)增备:全备之后,把发生变化数据再备份一次
二、Rsync应用场景——多server备份
rsync的传输方式: pull 拉 push 推
推:客户端将需要的数据上传到服务端
如果推送的客户端机器过多,容易造成推送数据缓慢
拉:客户端讲需要的数据下载下来
如果客户端过多,下载数据会对服务端造成压力过大
Rsync多server备份可以缓解推送和拉取时的速度和压力问题
三、Rsync的三种传输模式
1.本地传输
类似于linux中cp命令,不支持推送和拉取,只是单纯复制
语法:
rsync [OPTION…] SRC… [DEST]
例如:
[root@web01 ~]# rsync -avz 1.txt /mnt/
rsync是传输命令
-avz是参数
1.txt是源文件
/mnt/是目标地址
注意:
rsync是增量传输,只要文件没有变化就不会再传输,如果有任意改变则传输,而cp命令会提示覆盖
2.远程传输
pull拉取语法:
rsync [OPTION…] [USER@]HOST:SRC… [DEST]
例如:
[root@web01 ~]# rsync -avz root@172.16.1.7:/root/1.txt ./
rsync是传输命令
-avz是参数
root是远端的用户
@是分隔符
172.16.1.7是远端主机ip地址
/root/1.txt是源文件
./是目标地址
注意:
源文件加/和不加/的区别:
[root@web02 ~]# rsync -avz root@172.16.1.7:/var/log/ ./ #拉取远程目录下的文件 [root@web02 ~]# rsync -avz root@172.16.1.7:/var/log ./ #拉取远程目录下的文件及目录
push推送语法:
rsync [OPTION…] SRC… [USER@]HOST:DEST
例如:
[root@web02 ~]# rsync -avz ./log root@172.16.1.7:/mnt/
rsync是传输命令
-avz是参数
./log是所要传输的源文件
root是推送远端的用户
@是分隔符
172.16.1.7是远端主机ip地址
/mnt/是远端主机的目标地址
注意:
当不写用户推送或拉取时,默认使用当前用户连接远端主机同样的用户
[root@web02 ~]# rsync -avz ./log 172.16.1.7:/mnt/
普通用户也可以推送,只能推送至普通用户有权限的目录下
[root@web02 ~]# rsync -avz ./log lixian@172.16.1.7:/home/qiudao
源文件加/和不加/的区别:
[root@web02 ~]# rsync -avz ./log/ root@172.16.1.7:/mnt/ #推送目录下的文件到远端位置 [root@web02 ~]# rsync -avz ./log root@172.16.1.7:/mnt/ #推送目录及目录下的文件到远端
3.守护进程传输
(1).为什么是用守护进程模式
1.rsync传输时,使用系统用户和系统密码(极其不安全)
2.使用普通用户的时候,会出现权限不足的情况
(2).守护进程传输模式语法
pull拉取数据命令语法
Pull: rsync [OPTION…] [USER@]HOST::SRC… [DEST]
例如:
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./
rsync是传输命令
-avz是传输参数
rsync_backup是配置文件创建的虚拟用户
@是分隔符
172.16.1.41是远端主机
::backup 是配置文件配置的模块名
./ 是目标地址
注意:
拉取服务端模块名对应的目录下的文件,拉取的文件可以使任意属主属组
push推送数据命令语法
Push: rsync [OPTION…] SRC… [USER@]HOST::DEST
#客户端web01推送数据至bakcup服务器
[root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup
rsync是传输命令
-avz 是传输参数
backup/ 是源文件
rsync_backup 是配置文件创建的虚拟用户
@ 是分隔符
172.16.1.41是远端主机
::backup 是配置文件配置的模块名
注意:
推送时,远端模块对应的目录权限一定是rsyncd服务配置的用户
Rsync推拉的时候指定服务器的端口号
使用-e参数里面加ssh -p 指定端口号,注意要有单引号。
rsync -avz -e 'ssh -p 656' cc.txt root@www.lixian.fun:/code/data/
四、Rsync参数说明
-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
–exclude=PATTERN #指定排除不需要传输的文件模式
–exclude-from=file #文件名所在的目录文件
–bwlimit=100 #限速传输
–partial #断点续传
–delete #让目标目录和源目录数据保持一致
–password-file=xxx #使用密码文件
1.排除参数 –exclude 和 –exclude-from用法:
[root@web01 ~]# rsync -avz ./* rsync_backup@172.16.1.41::backup --exclude=dir10 #只排除dir10这个文件 [root@web01 ~]# rsync -avz ./* rsync_backup@172.16.1.41::backup --exclude-from 1.txt #排除1.txt里所写的文件 [root@web01 ~]# cat 1.txt dir10 dir6 dir7 dir8 dir9
2.限速参数 –bwlimit用法
#创建一个500M文件
[root@web01 ~]# dd if=/dev/zero of=./1.txt bs=1M count=500
#指定速度每秒1M
[root@web01 ~]# rsync -avzP ./1.txt rsync_backup@172.16.1.41::backup --bwlimit=1 sending incremental file list 1.txt 126,812,160 24% 1.01MB/s 0:06:25
3.数据一致 –delete(无差异同步)用法
拉:数据与服务端一致,以服务端的数据为准
推:数据与客户端一致,以客户端的数据为准
数据始终与 数据来源的一端保持一致
#拉取数据时与服务端一致
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ --delete
五、守护进程传输模式实践
服务端配置:
1.安装rsync服务
yum install -y rsync
2.配置rsync配置文件
[root@backup ~]# cat /etc/rsyncd.conf #运行进程的用户 uid = rsync #运行进程的用户组 gid = rsync #服务的监听端口 port = 873 #无需让rsync以root身份运行,保证文件属性的安全机制 fake super = yes #操作那个目录就不允许跳出该目录 use chroot = no #最大连接数 max connections = 200 #超时时间 timeout = 600 #忽略错误信息 ignore errors #只读,配置成false,文件可读写 read only = false #查看模块信息 list = false #定义虚拟用户(rsync传输时使用的用户) auth users = rsync_backup #定义虚拟用户的密码文件 secrets file = /etc/rsync.passwd #日志文件 log file = /var/log/rsyncd.log ##################################### #定义模块的名字 [backup] #注释,备注 comment = welcome to oldboyedu backup! #定义真实文件目录 path = /backup
3.创建真实系统用户
useradd rsync -s /sbin/nologin -M
4.创建虚拟用户的密码文件并授权
echo "rsync_backup:123456" > /etc/rsync.passwd chmod 600 /etc/rsync.passwd
5.创建文件目录
mkdir /backup chown -R rsync.rsync /backup/
6.启动rsync服务
systemctl start rsyncd
客户端验证:
1.交互式推拉:
[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup
2:免密式推拉:
#客户端添加密码文件
[root@web01 ~]# echo "123456" > /etc/rsync.passwd [root@web01 ~]# chmod 600 /etc/rsync.passwd [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ --password-file=/etc/rsync.passwd [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
3:配置环境变量方式推拉:
[root@web01 ~]# export RSYNC_PASSWORD=123456 [root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::backup ./ [root@web01 ~]# rsync -avz backup/ rsync_backup@172.16.1.41::backup
六、Rsync备份脚本案例
需求:
客户端:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
环境准备:
客户端client.sh脚本:
#!/bin/bash #1.定义变量 SRC=/backup HOST=`hostname` IP=$(hostname -I | awk '{print $2}') DATE=$(date +%F) DEST=${HOST}_${IP}_${DATE} #2.创建目录 mkdir $SRC/$DEST -p #3.备份文件 cd / && tar zcf $SRC/$DEST/file.tar.gz etc/passwd #4.给文件添加验证信息 md5sum $SRC/$DEST/file.tar.gz > $SRC/$DEST/flag.txt #5.推送文件 export RSYNC_PASSWORD=123 rsync -az $SRC/$DEST rsync_backup@172.16.1.41::backup #6.只保留七天的数据 find $SRC -type d -mtime +7 | xargs rm -rf
定时任务:每天凌晨1点定时执行该脚本
[root@web01 ~]# crontab -l #备份文件 00 1 * * * /bin/bash /root/client.sh
服务端server.sh脚本
#!/bin/bash #1.定义变量 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin SRC=/backup DATE=$(date +%F) #2.验证文件的完整性 md5sum -c $SRC/*_$DATE/flag.txt > $SRC/result_$DATE #3.将验证结果发送给管理员 mail -s "数据验证结果" lixian@qq.com < $SRC/result_$DATE #4.只保留180天数据 find $SRC -type d -mtime +180 | xargs rm -rf
前提注意:
1、服务端要安装Rsync服务并且配置守护进程传输模式
2、安装邮件服务:
[root@lixian ~]# yum install -y mailx [root@lixian ~]# vim /etc/mail.rc set from=lixian656@qq.com set smtp=smtp.qq.com set smtp-auth-user=lixian656@qq.com set smtp-auth-password=xxx #需要更改邮件授权码 set smtp-auth=login set smtp=smtps://smtp.qq.com:465 set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/