rsync简介:
rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它可通过LAN/WAN快速同步多台主机间的文件和目录,并适当利用rsync算法(差分编码,也就是差异传输)以减少数据的传输。因此同步两端的数据很快,而且对同步的数据可以支持递归传输(可以使用tree查看发现两边目录tree一致),还可以保持数据原本的属性,也支持选择性压缩。(可本地也可异地传输)
rsync工作原理:
1.client构造filelist发送到server(filellist是包含了所有文件信息对:name->id,id用来代表唯一的文件,例MD5)
2.Server处理filelsit,将filelist中存在而本地不存在的对应数据构成newfilelist,将本地存在而filelist中不存在的数据删除。
3.Server发送构造好的newfilelist至Client
4.Client接受newfilelist,并发送newfilelist中对应的数据至Server.
rsync同步数据模拟
京东云主机为Server IP : AAA.AAA.AAA.AAA
阿里云主机为Client IP : BBB.BBB.BBB.BBB
首先安装rsync,两端都要安装,笔者这都是已经默认安装好了的:
[[email protected] ~]# rpm -qa rsync rsync-3.0.9-18.el7.x86_64
如果没有安装可以去官网下载安装
[[email protected] ~]# cd /usr/local/src [[email protected] ~]# wget https://download.samba.org/pub/rsync/src/rsync-3.0.9.tar.gz tar [[email protected] src]# tar -zvxf rsync-3.0.9.tar.gz [[email protected] src]# cd rsync-3.0.9 [[email protected] rsync-3.0.9]# ./configure [[email protected] ]# make $$ make install
搭建远程服务之前先来小试一下rsync命令:
1 rsync [OPTION]... SRC [SRC]... DEST
2 rsync [OPTION]... SRC [SRC]... [[email protected]]HOST:DEST
3 rsync [OPTION]... SRC [SRC]... [[email protected]]HOST::DEST
4 rsync [OPTION]... SRC [SRC]... rsync://[[email protected]]HOST[:PORT]/DEST
5 rsync [OPTION]... [[email protected]]HOST:SRC [DEST]
6 rsync [OPTION]... [[email protected]]HOST::SRC [DEST]
7 rsync [OPTION]... rsync://[[email protected]]HOST[:PORT]/SRC [DEST]
可以看到一共有6种用法使用较多的是2,6
第一种:rsync [OPTION]... SRC [SRC]... DEST 是将指定本地数据传输到指定本地路径,类似cp [[email protected] rsynctest]# ll total 4 drwxr-xr-x 2 root root 4096 Sep 24 15:34 test -rw-r--r-- 1 root root 0 Sep 24 15:34 xad.test [[email protected] rsynctest]# rsync -av xad.test test/ sending incremental file list xad.test sent 72 bytes received 31 bytes 206.00 bytes/sec total size is 0 speedup is 0.00 [[email protected] rsynctest]# ll test/xad.test -rw-r--r-- 1 root root 0 Sep 24 15:34 test/xad.test
第二种: rsync [OPTION]... SRC [SRC]... [[email protected]]HOST:DEST 将本地数据传输到远端路径,且是使用远端的用户传输,需要密码。 [[email protected] ~]# rsync -av rsynctest/ [email protected] AAA.AAA.AAA.AAA:testrsync The authenticity of host ‘ AAA.AAA.AAA.AAA ( AAA.AAA.AAA.AAA)‘ can‘t be established. ECDSA key fingerprint is 6f:8c:32:66:d8:e4:91:78:e8:3a:4a:39:56:6f:1f:ec. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added ‘AAA.AAA.AAA.AAA‘ (ECDSA) to the list of known hosts. [email protected]‘s password: sending incremental file list ./ xad.test test/ test/xad.test sent 179 bytes received 57 bytes 22.48 bytes/sec total size is 0 speedup is 0.00 传输完成可以去远端检验 [[email protected] testrsync]# ll total 0 drwxr-xr-x 2 root root 22 Sep 24 15:35 test -rw-r--r-- 1 root root 0 Sep 24 15:34 xad.test
第六种:rsync [OPTION]... [[email protected]]HOST::SRC [DEST]##注意是"::" 以远端的数据为基准同步到本地,属于服务器模式,使rsync在后台启用一个守护进程,使之永久运行,用于接受文件传输请求。 京东云主机为ServerIP : AAA.AAA.AAA.AAA 阿里云主机为Client IP : BBB.BBB.BBB.BBB 将server的数据同步到client 首先先找到配置文件/etc/rsync.conf [[email protected] ~]# cat /etc/rsync.conf uid = nobody##使用匿名用户执行守护进程 gid = nobody use chroot = no max connections = 4##最大并发连接数 strict modes = yes##检验口令文件的权限,若为yes,则密码文件需要root权限 pid file = /var/run/rsyncd.pid [XAD]##定义一个模块名称 path = /root/testrsync ##需要传输的数据的路径 comment = xadsrc file read only = no write only = no hosts allow = *##允许连接的地址 #hosts deny = IP/NETMASK uid = root gid = root auth users = backup ##使用此模块的用户,多个用户用空格隔开,此用户和linux用户没任何联系 secrets file = /etc/server.pass ##密码文件,格式是“user:pass”单独一行,需要自己手动创建,文件名是什么随意。 创建/etc/server.pass [[email protected] ~]# cat /etc/server.pass backup:xad123 [[email protected] ~]# chmod 600 /etc/server.pass 创建守护进程 [[email protected] ~]# /usr/bin/rsync --daemon [[email protected] ~]# ps -ef | grep rsync root 15862 1 0 Sep23 ? 00:00:00 /usr/bin/rsync --daemon
现在去cilent端配置执行rsync,在这只需添加密码文件和执行传输操作就可以,什么都不用设置。 创建/etc/client.pass [[email protected] ~]# cat /etc/client.pass xad123 [[email protected] ~]# chmod 600 /etc/client.pass [[email protected] ~]# /usr/bin/rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" [email protected]::XAD /root/rsynctest --password-file=/etc/client.pass ##命令中的参数 v是详细输出 z是压缩后传输 r是递归传输,可以是用tree查看对比 t是保数据的原始时间信息 o是保持数据的所属主 p是保持数据的文件权限 g是保持数据的属组 exclude排除不需要传输的文件类型 delete是以服务器的数据为基准去镜像数据的同步 progress显示数据镜像的过程 [email protected]::XAD 红色标注的就是在服务器端设置的对应信息 /root/rsynctest 数据同步的保存路径 --password-file=/etc/client.pass数据使用的密码文件!指的是backup用户! ## 测试 为了测试先删除/root/rsynctest中的文件后在执行 [[email protected] rsynctest]# /usr/bin/rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" [email protected] AAA.AAA.AAA.AAA::XAD /root/rsynctest --password-file=/etc/client.pass receiving incremental file list ./ xad.test 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/4) test/ test/xad.test 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=0/4) sent 126 bytes received 232 bytes 716.00 bytes/sec total size is 0 speedup is 0.00 [[email protected] rsynctest]# ll total 4 drwxr-xr-x 2 root root 4096 Sep 24 15:35 test -rw-r--r-- 1 root root 0 Sep 24 15:34 xad.test 设置定时备份 [[email protected] ~]# crontab -e 301***/usr/bin/rsync -vzrtopg --delete --progress --exclude "*access*" --exclude "debug*" [email protected] AAA.AAA.AAA.AAA::XAD /root/rsynctest --password-file=/etc/client.pass 到此为止server端的数据就可以在凌晨1:30分开始同步到client了。