rsync说明文档

一、什么是rsync

        rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH、rsync主机同步。  ——来自百度

二、安装rsync

        Rsync官网下载地址:http://rsync.samba.org/

    1.服务端

        1.1 yum安装或者源码包安装。我为了方便就用了yum安装
              #yum install rsync
            
        1.2 配置rsyncd.conf文件
            rsyncd.conf是rsyncd的主配置文件,该文件默认不存在,安装完成之后需要我们手动创建(/etc/rsyncd.conf);
            我先贴出我的文件,然后在做说明

#cat /etc/rsyncd.conf
            
 uid = root                            #运行RSYNC守护进程的用户;可以指定nobody为任何用户
 gid = root                            #运行RSYNC守护进程的组;可以指定nobody为任意组
 use chroot = no                       #不使用chroot;#如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下
 max connections = 4                   #最大连接数
 pid file = /var/run/rsyncd.pid        #pid文件的存放位置
 log file = /var/log/rsyncd.log        #日志文件的存放位置

 [rsynctest]                           #这个是模块名。可以理解成Java中对外暴露的接口名  
  path = /yuxj/rsync-test/             #需要同步的目录
  read only = no                       #允许可读可写
  list = no                            #不允许列清单;意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来;这个后面会有说明
  auth users = root                    #认证的用户名,这个用户名必须是linux是上真实存在的用户名
  secrets file = /etc/inburst.pas      #密码文件的存放位置(这个文件也需要我们手动创建)

             当然这个是我自己的配置文件。rsyncd.conf还有其他的可只配置(比如端口号、允许主机访问、禁止主机访问),当然这个需要实际开发情况进行取舍。
            这里说明一下,当我们同步的时候,只需要在命令上面指定上面模块名(对外暴露的接口,有没有Java的感觉)。rsync会根据这个模块名会找到path目录进行同步。
            
           1.2.1    模块定义
                就上面的模块定义可以进行简单说明一下;
                模块定义什么呢?主要是定义服务器哪个目录(path)要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字(对外暴露)。而服务器真正同步的数据是通过path指定的。我们可以根据自己的需要,来指定多个模块。
                每个模块要指定认证用户,密码文件、但排除并不是必须的。

            
       1.3    配置密码文件(/etc/inburst.pas)
            格式; 用户名:密码
            #cat /etc/inburst.pas
            root:12qwaszxQq123#@!        #用户名:密码
        
        1.4 给予密码文件只读权限(不赋予权限,同步时会失败)
            # chown root:root /etc/inburst.pas
            # chmod 600 /etc/inburst.pas
        
        1.5 如果有防火墙,需要添加端口(rsync默认为873端口,可以在上面conf文件里面进行更改)
            # iptables -A INPUT -p tcp --dport 873 -j ACCEPT   
        
        1.6 启动
            --daemon参数方式,是让rsync以服务器模式运行
            # rsync --daemon   


    2.客户端

        服务端安装完毕了,客户端安装就很简单了。
        2.1. 安装rsync,参照上面
            
        2.2 配置rsyncd.conf文件
            客户端只需要创建这个文件,不需要写任何配置
        
        2.3 配置密码文件(/etc/rsync_client.pas)
            这个文件只需要填写密码即可;  格式;密码
            # cat /etc/rsync_client.pas
              12qwaszxQq123#@!
        
        2.4 给密码文件赋权限
            # chown root:root /etc/rsync_client.pas
            # chmod 600 /etc/rsync_client.pas
        
        2.5    启动

    到这里配置结束。是不是很简单。

 

三、 rsync中的参数(只列出了一些常用的)     

-r 是递归
-l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
-e ssh的参数建立起加密的连接。
-u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
--progress 是指显示出详细的进度情况
--delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致    
 --password-file=/password/path/file 来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

 四、实例

    我们首先需要知道rsync有六种不同的工作模式,接下来我们会一一验证(因为网上很多文章都只是列举出这六种模式,但却很少有验证,我这里就做一个搬运工,把它整理):

 

  1. 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
  2. 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
  3. 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
  6.  列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
        0.我们首先来验证一下上面服务端中rsync.conf中的list=no这个配置

            在客户端看看rsync服务器上提供了哪些可用的数据源(其中xxx.xxx.xxx.xx是我自己的服务端ip)

           # rsync --list-only root@xxx.xxx.xxx.xx::
          因为上面配置了list=no,所以上面都不会列出来,我们接下来把list更改为yes,在看看
            # rsync --list-only root@182.151.203.58::
             rsynctest
        这就验证完了上面的list=no/yes 参数配置。
    
    接下来我们验证rsync的六种工作模式:


        1.拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
            命令格式:rsync [OPTION] SRC DES

# rsync -r /yuxj/rsync-test/yuxj /yuxj/rsync-test/yuxj_back

            上面的就是将/yuxj/rsync-test/yuxj文件夹拷贝到/yuxj/rsync-test/yuxj_back中
            这里讲我们的SRC,/yuxj/rsync-test/yuxj后面加上/;变成/yuxj/rsync-test/yuxj/;然后我们在试试

# rsync -r /yuxj/rsync-test/yuxj/ /yuxj/rsync-test/yuxj_back

            这里是将/yuxj/rsync-test/yuxj中的子文件夹/文件,而不是yuxj这整个文件夹,进行拷贝到/yuxj/rsync-test/yuxj_back中
        
        2.使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
            命令格式:rsync [OPTION] SRC [USER@]HOST:DEST

#rsync -r /root/apache-tomcat-7.0.75 root@xxx.xxx.xx.xx:/yuxj

          上面的命令就是将本机的/root/apache-tomcat-7.0.75整个文件夹拷贝到xxx.xxx.xx.xx这个IP机子下面的yuxj文件夹中
            这条命令需要输入密码验证

         3.使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
            命令格式: rsync [OPTION] [USER@]HOST:SRC DEST 就是将上面一条命令的DST和SRC换一下位置

 # rsync -r root@xxx.xxx.xxx.xx:/yuxj/rsync-test /tmp

           上面的命令就是将xxx.xxx.xxx.xx这个IP下面的yuxj/rsync-test整个文件夹拷贝到本地的tmp中
            这条命令需要输入密码验证
        
        4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
            命令格式:rsync [OPTION] [USER@]HOST::SRC [DEST]
            特别说明一下,这里用到两个冒号,::后面跟的就是我们之前在rsync.conf中配置的模块名,还记得吗?

# rsync -r root@xxx.xxx.xxx.xx::rsynctest /tmp

           上面的命令就是将xxx.xxx.xxx.xx这个IP下面rsync中定义的模块rsynctest中定义的path拷贝到本地的tmp中
            这条命令需要输入密码验证,可以参考上面第三节rsync参数中的--password-file配置密码文件,即不需要密码
        
        5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
            命令格式:rsync [OPTION] [DEST] [USER@]HOST::SRC 就是将上面一条命令的DST和SRC换一下位置

  # rsync -r /tmp root@xxx.xxx.xxx.xx::rsynctest

            上面的命令就是将本地的tmp整个文件夹拷贝到xxx.xxx.xxx.xx这个IP下面rsync中定义的模块rsynctest中定义的path中
            这条命令需要输入密码验证,可以参考上面第三节rsync参数中的--password-file配置密码文件,即不需要密码
        
        6. 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。

 

五、个人理解的rsync原理

    首先说明一下rsync有一套自己的rsync算法来进行文件的同步操作。

    电脑没装画图工具,手画的,将就了吧。
    100519_3MHq_1585109.jpg
    现有两个机器,分别是机器A和机器B; 机器A下面存放着aaa文件夹,机器B下面存放在bbb文件夹。现在需要将aaa中的差异文件同步到bbb中。
    首先机器B对bbb文件进行拆分,拆成若干个数据块,并对每个数据块进行校验,这个时候就有一系列校验码,
    现在发送命令,将这一串校验码发送到机器A,机器A在对比自己的校验码,找出差异,然后发送给机器B,机器B同步完成。
    所以rsync是增量更新。
    以上个人愚见。


六、重新在来看看什么是rsync


    经过上面的一系列折腾,应该对rsync有了一个比较全面的认识吧,要我说什么是rsync;
    其实就是来解决分布式情况下集群文件一致性的问题。

 

     希望大家喜欢!
   

转载于:https://my.oschina.net/yuxj/blog/846837

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值