同步利器rsync

·rsync全称remote sync,是Unix/Linux一款优秀的复制工具,能够实现cp和scp的功能,可是rsync在实现跨主机复制时,并无加密功能,因此在远程复制时,须要ssh来承载rsync,可是rsync比起cp和scp来,有一个很显著个特性,那就是快,这个快并非说在复制过程当中的传输速率高,而是rsync在复制的过程当中,会比较源文件和目标文件的特征码,若是特征码一致,就不复制.
mysql

·rsync有4中工做模式:linux

第一种:shell模式,也称做本地模式,在本地复制文件的.web

第二种:远程shell模式,使用ssh(rsh)协议进行链接.sql

第三种:列表模式,其工做模式相似ls,仅列出源内容shell

第四种:服务器模式,esync能够工做为守护进程,可以接受客户端的数据传输请求,直接使用tcp协议进行链接,并监听在873端口vim

·远程shell模式和服务器模式的区别:bash

远程shell模式 服务器模式

rsync使用远程shell模式传输时:服务器

1.源路径或目的路径的主机名后面包含一个冒号分隔符.网络

2.链接远程主机时,不须要启动服务,不须要配置文件.ssh

3.链接远程主机时使用ssh做为传输工具

rsync使用服务器模式传输时:

1.源路径或目的路径的主机名后面包含两个冒号分,或使用rsync://URL

2.链接远程主机时,需验证身份,需rsync的配置文件,以及目标文件和源文件的读写权限,而后启动一个服务进程,

3.链接远程主机时使用tcp协议并监听在873端口

不要把服务器和服务器模式混淆了,服务器模式必定有服务器,有服务器的不必定就的服务器模式,远程shell也有服务器,但不是服务器模式.

·rsync命令选项:

-n,--dry-run   : 仅仅测试,并不真正的执行
-v,--verbose   : 详细输出模式
-q,--quiet     : 静默模式
-c,--checksum  : 开启校验功能,强制对文件传输进行校验
-r,--recursive : 递归复制,通常只有复制目录时才有用
-a,--archives  : 归档,保留文件的原有属性,包括扩展属性,访问控制列表等
-p,--perms     :  保留文件的权限
-t,--times     : 保留文件的时间戳
-l,--links     :保留文件的符号连接
-g,--group     : 保留文件的属组
-o,--owner     : 保留文件的属主
-D,--devices   :保留设备文件
-rptlgo        : 组合起来至关于-a
-e ssh(rsh)    : 表示使用ssh协议做承载
-z             : 基于网络传输,使用对文件压缩后传输
--progress     :显示进度条
--stats        : 显示如何执行压缩和传输

·注意:

rsync命令使用中,若是源参数的末尾有斜线,就会复制指定目录内的内容,而不复制目录自己,没有斜线,则会复制目录自己,目标参数末尾的斜线没有做用,以下例子:

[root@www tmp]# rm -rf test/
[root@www tmp]# mkdir test
[root@www tmp]# rsync -r etc test/    #这里的复制是不加斜线的,为了和下面作对比,会复制目录自己
[root@www tmp]# cd test/
[root@www test]# ls
etc
-------------------------------------------------------------------------------------
[root@www tmp]#rm -rf test/
[root@www tmp]# mkdir test
[root@www tmp]# rsync -r etc/ test/   #这里的复制是加斜线的,为了和上面的对比,仅复制目录内的内容
[root@www tmp]# cd test/
[root@www test]# ls
abrt                     fonts             mke2fs.conf                   rpc
...
fcoe                     makedev.d         request-key.d                 yum.repos.d
...

# rsync -r /mydata/data /backups/ : 会把目录data直接同步至/backups目录中
# rsync -r /mydata/data/ /backups/: 会把目录data/中的内容的同步至/backups目录中


示例:

1.本地模式

[root@www ~]# cp -r /etc /tmp/              #准备测试数据
[root@www tmp]# mkdir test                  #同上
[root@www tmp]# rsync etc/passwd test/ -n   #测试可否同步
[root@www tmp]# rsync etc/passwd test/      #执行同步
[root@www tmp]# ls test/                    #查看是否同步过去了
passwd
[root@www tmp]# rsync etc/passwd test/ -nv   #查看显示的详细信息
passwd
sent 30 bytes  received 15 bytes  90.00 bytes/sec
total size is 2337  speedup is 51.93 (DRY RUN)

2.shell模式:把 172.16.21.2的文件推送到172.16.21.1服务器上去

[root@www test]# rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp  #注意格式
####rsync -e ssh -r /tmp/etc root@172.16.21.1:/tmp --progress  ##显示每一个文件的传输进度的
The authenticity of host '172.16.21.1 (172.16.21.1)' can't be established.
RSA key fingerprint is 15:03:48:51:95:07:ac:2b:1d:c7:0e:e6:e1:43:be:6d.
Are you sure you want to continue connecting (yes/no)? yrs
Please type 'yes' or 'no': yes
Warning: Permanently added '172.16.21.1' (RSA) to the list of known hosts.
root@172.16.21.1's password:
--------------------------------------------------------------------------
到172.16.21.1服务器上去查看
[root@www ~]# ls /tmp           #推送过来了
etc  ks-script-j1sUcU ...

3.shell模式:拉取服务器的内容到本地

[root@www test]# rsync -e ssh -r  root@172.16.21.1:/etc/pam.d ./
root@172.16.21.1's password:
[root@www test]# ls pam.d/             #同步到本地了
atd                  gdm-fingerprint    remote             system-auth-ac
...
eject                polkit-1           su                 vsftpd.mysql
...

服务器模式:

服务器端:192.168.112.136

客户端:192.168.112.134

vim /etc/xinetd.d/rsyn

service rsync
{
        disable = no    #这里改为no
        flags           = IPv6
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID
}
uid=nobody                  #使用哪一个用户运行该程序
gid=nobody                  #使用哪一个组运行该程序
use chroot=no
max connections=10          #这里的复制大可能是IO操做,因此10也算高的了
strict modes =yes
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log

[test1]
path=/tmp/web
ignore errors = yes
read only =no
write only = no
host allow = *
uid = root
gid = root

注意防火墙和SElinux的问题.

能够把线上的web当成服务器端,要发布新内容的时候,先把内容写到客户端,而后就能够同步到服务器端了.

rsync -av --progress web/ 192.168.112.136::test1

相关文章
相关标签/搜索