一、什么是Rsync?

   Rsync是一款开源的、快速的、多功能的、可实现增量的本地或远程数据镜像同步备份的优秀工具。实用是多种平台。

   Rsync具有可以使本地主叫不同分区或目录之间及本地和远程两台主机之间的数据快速同步镜像,远程备份等功能;

在同步备份时,采用默认的‘quick check’算法,仅仅同步大小或者最后修改时间发生变化的文件或目录,甚至只

   同步一个文件中变化的部分,所以,可以实现快速的数据同步功能。

   传统的cp,scp每次均为完整拷贝,Rsync除完整拷贝外,还具有增量拷贝的功能,效率更高。


二、特性

   (1)支持拷贝特殊文件如链接,设备等。

   (2)可以排除指定文件或目录同步的功能,相当于打包命令tar。

   (3)可以做到保持原来文件或目录的权限,时间,软硬链接等所有属性均不改变。

   (4)可实现增量同步,既只同步发生变化德尔数据,因此传输数据效率很高。

   (5)可以使用rcp,rsh,ssh等方式来配合文件传输,也可以直接使用socket。

   (6)支持匿名的或认证的进程传输模式,方便数据备份及镜像。


三、工作方式

    一般来说,Rsync主要有三种工作方式:

                  (1)本地数据传输

                  (2)通过rcp,ssh等通道传输

                  (3)以守护进程方式传输数据

1.本地数据传输:

   本地(Local):   rsync    [OPTION...]   SRC...             [DEST]

                  同步命令   参数选项     源分区,文件或目录  目标

   [root@sersync /]# cd /opt/

   [root@sersync opt]# mkdir tangbo

   [root@sersync opt]# touch tangbo/test.txt

   [root@sersync opt]# chmod -R 700 tangbo

   [root@sersync opt]# ls -l

    total 8

    drwxr-xr-x. 2 root root 4096 Nov 22  2013 rh

    drwx------. 2 root root 4096 Dec  2 19:12 tangbo

   [root@sersync opt]# rsync -avz /opt/ /tmp/   *注意/  加/表示只同步目录里面的内容,不加/表示把目录也同步过去

   [root@sersync opt]# rsync -avz /opt /tmp/    *****注意加/和不加的区别

    sending incremental file list

    rh/

    tangbo/

    tangbo/test.txt

    sent 132 bytes  received 42 bytes  348.00 bytes/sec

    total size is 0  speedup is 0.00 


2.通过远程ssh进行数据传输:拉取表示从远端同步到本端主机。

   远程Access via remote shell:

         拉取Pull: rsync     [OPTION...]   [USER@]HOST:SRC... [DEST]  

          同步命令   参数选项     用户@主机   源分区,文件或目录  目标分区

         推送Push: rsync     [OPTION...]   SRC... [USER@]HOST:DEST

          同步命令   参数选项     源分区,文件或目录-用户@主机--目标

  

 拉取实例:[root@sersync tmp]# rsync -avzP -e 'ssh -p 22' root@192.168.11.34:/opt/ /tmp/ 

 推送实例:[root@sersync tmp]# rsync -avzP /tmp/ root@192.168.11.34:/opt/

           [root@sersync /]# rsync -avzP /tmp/ 'ssh -e 22' root@192.168.11.34:/opt/

  ****注意:文件都是通过ssh加密传输,传输过程需要密码验证,rsync必须都安装到各自服务器上。

#####可以借助ssh key 免秘钥传输,就不需要输入密码了。


3.***********使用守护进程方式传输数据***********

    Access via rsync daemon:分为两种,每种情况有两种语法格式

        拉取Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

        推送Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST  

四、rsync同步命令参数

        -v, --verbose               详细输出模式

       

        -a, --archive               表示以递归模式传输文件,保留所有属性,等于-rvgtopDl

            

        -z, --recursive             传输时压缩以提高效率

       

        -p, --perms                 显示传输过程详细信息

        

        -e, --rsh=COMMAND           使用信道协议,如sshspecify the remote shell to use

          

五、重点实验;****使用守护进程方式传输数据****

    (1)检查环境,版本,内核参数

      [root@sersync /]# cat /etc/redhat-release 

          CentOS release 6.5 (Final)

      [root@sersync /]# uname -r

          2.6.32-431.el6.x86_64

      [root@sersync /]# uname -m

          x86_64

      [root@sersync /]#    

    (2)主机名,ip,用途规划

 [root@sersync /]#         192.168.11.33   数据备份

 [root@rsync-s1 /]#        192.168.11.34     节点

         [root@rsync-s2 /]#        192.168.11.35     节点

需求:在sersync上部署rsync以守护进程的方式部署rsync服务,让所有客户端主机,可以把本地数据通过rsync的方式把数据备份到sersync上。

(3)配置rsyncd.conf

[root@sersync /]# vim /etc/rsyncd.conf

#rsync_config_______________start

#create by tangbo 2015-12-02 13:25

#QQ7313760

#########rsyncd.conf______start#########

uid = root         #rsync使用的用户

gid = root         #rsync使用的用组

use chroot = no    #一般选no

max connections = 200  #最大连接数,默认为0

timeout = 300          #超时时间,建议为300-600

pid file =  /var/run/rsyncd.pid #rsync daemon启动后将其进程pid写入此文件。

locak file = /var/run/rsync.lock #指定lock文件用来支持max connections参数,使得不超过连接现在

log file = /var/log/rsyncd.log   #日志信息,不设置或设置错误,将使用syslog输出日志信息

[tangbo]     #模块名称

path=/data/www/   #路径参数,要注意此目录的权限得可写才行

#comment = ixdba file

ignore errors       #忽略I/O错误

read only = false   #指定客户端是否可以上传文件

#write only = no    #指定客户端是否可以写文件

hosts allow = 192.168.11.0/24

hosts deny =0.0.0.0/32

list = false        #是否允许客户端查看可用模块

auth users = rsync_backup  #虚拟用户

secrets file = /etc/server.password  #密码文件

#########rsyncd.conf______end#########

注意:path=/data/www 此路径如果无,需要创建出来,给相应权限。

      [root@sersync /]# mkdir -p /data/www/

 [root@sersync /]# ls -ld data/www/

      drwxr-xr-x. 2 root root 4096 Dec  2 21:43 data/www/

(4)创建密码文件,权限修改为600

 [root@sersync /]# echo "rsync_backup:tangbo" > /etc/server.password

      [root@sersync /]# chmod 600 /etc/server.password 

      [root@sersync /]# cat /etc/server.password 

         rsync_backup:tangbo

      [root@sersync /]# ll /etc/rsync.password 

         -rw-------. 1 root root 20 Dec  2 21:46 /etc/rsync.password

      [root@sersync /]# 

     (5)启动rsync:

    以守护进程方式启动  [root@sersync /]# rsync --daemon

                  --daemon  以守护进程方式启动

          --address 绑定指定ip地址提供服务

  --config=FILE 更改配置文件路径,/etc/rsyncd.conf 

  --port=PORT    更改其它端口提供服务,缺省873端口

     (6)设置rsync服务开机自启动和关闭服务

  [root@sersync /]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local

  [root@sersync /]# pkill rsync

  [root@sersync /]# rsync --daemon

  [root@sersync /]# ps -ef | grep rsync

            root     20451     1  0 21:57 ?        00:00:00 rsync --daemon

            root     20453  1359  0 21:58 pts/0    00:00:00 grep rsync

  [root@sersync /]# netstat -tlnp | grep  873

             tcp        0      0 0.0.0.0:873                 0.0.0.0:*                     LISTEN      21740/rsync         

             tcp        0      0 :::873                      :::*                        LISTEN      21740/rsync         

       

(7)部署客户端  192.168.11.34     节点  和   192.168.11.35   节点部署账号及文件权限

           [root@rsync-s1 /]# echo "tangbo" >/etc/rsync.password   客户端只需要密码即可

           [root@rsync-s1 /]# chmod 600 /etc/rsync.password    

           [root@rsync-s1 /]# cat /etc/rsync.password 

               tangbo

           [root@rsync-s1 /]# ll /etc/rsync.password 

           -rw-------. 1 root root 7 Dec  3 21:47 /etc/rsync.password

           [root@rsync-s1 /]# 


(8)部署完成----检查  测试

  1.推送,从客户端推送从客户端推送/tmp目录到服务器端rsync指定的data/www/目录下

         [root@rsync-s1 /]# rsync -avzP /tmp/ rsync_backup@192.168.11.33::tangbo/ --password-file=/etc/rsync.password

          sending incremental file list

           ./

           rsync-3.0.6-12.el6.x86_64.rpm

           342664 100%  295.54MB/s    0:00:00 (xfer#1, to-check=3/5)

           yum.log

           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)

           .ICE-unix/

           lost+found/


           sent 343004 bytes  received 57 bytes  686122.00 bytes/sec

           total size is 342664  speedup is 1.00

           [root@rsync-s1 /]# 

  [root@rsync-s2 /]# rsync -avzP /tmp/ rsync_backup@192.168.11.33::tangbo/ --password-file=/etc/rsync.password

         sending incremental file list

          ./

          rsync-3.0.6-12.el6.x86_64.rpm

          342664 100%  147.77MB/s    0:00:00 (xfer#1, to-check=3/5)

          yum.log

          0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=2/5)

          .ICE-unix/

          lost+found/


          sent 343004 bytes  received 57 bytes  686122.00 bytes/sec

          total size is 342664  speedup is 1.00

          [root@rsync-s2 /]#

   

      2.拉取 

       [root@rsync-s1 /]# rsync -avzP rsync_backup@192.168.11.33::tangbo/ /tmp/ --password-file=/etc/rsync.password

       [root@rsync-s2 /]# rsync -avzP /tmp/ rsync_backup@192.168.11.33::tangbo/ --password-file=/etc/rsync.password

 

      注意:上面显示S1和S2已经手动同步成功。