zoukankan      html  css  js  c++  java
  • rsync同步工具

    1、rsync介绍

    rsync和ssh带的scp命令比较相似,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以进行增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝.利用rsync还可以实现删除文件和目录功能,这又相当于rm命令。

    2、rsync特性
    支持拷贝特殊文件如链接文件,设备等。
    可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
    可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
    可实现增量同步,即可同步发生变化的数据,因此数据传输效率很高。
    可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)。
    可以通过socket传输文件和数据。
    支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

    3、rsync工作场景
    两台服务器之间数据同步。
    把所有客户服务器数据同步到备份服务器,生产场景集群架构服务器备份方案。
    rsync结合inotify的功能做实时的数据同步。

    4、rsync命令同步参数选项

    参数 完整参数 说明

    -v --verbose 详细模式输出,传输时的进度信息
    -z --compress 传输时进行压缩以提高传输效率, --compress-level=NUM可按级别压缩
    -a --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
    -r --recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
    -t --times 保持文件时间信息
    -o --owner 保持文件属主信息
    -p --perms 保持文件权限
    -g --group 保持文件属组信息
    -P --progress 显示同步的过程及传输时的进度等信息
    -D --devices 保持设备文件信息
    -l --links 保持软链接
    -e --rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序,例如ssh
    --stats 给出某些文件的传输状态
    --progress 打印同步的过程 --exclude 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude --exclude-from 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。 --delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!! --delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!! --delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件。

    以上参数为在生产环境中的常用参数,基本使用已足够,相关的参数还有非常多,了解更多可以man rsync。最常用的参数: avz相当于vzrtopgDl

    5、rsync工作方式
    一般来说,rsync大致使用三种主要的传输数据的方式,分别为:

    5.1 本地数据传输模式(local-only mode),单个主机本地之间的数据传输(此时类似于cp命令的功能)。
    rsync本地传输模式的语法为:

    rsync [OPTION...] SRC... [DEST]
    语法说明:

    rsync为同步的命令
    [OPTION]为同步时的参数选项
    SRC为源,即待同步的分区、文件或目录等
    [DEST]为目的分区、文件或目录
    实例,将/etc/hosts 同步至/tmp

    root@VM-131-5-ubuntu:/tmp# rsync /etc/hosts /tmp
    

    5.2 远程传输,借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)。
    远程传输模式的语法为:
    拉取: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    推送: rsync [OPTION...] SRC... [USER@]HOST:DEST

    #推送
    rsync xiao.sql root@192.168.1.1:/tmp/
    #拉取
    rsync root@192.168.1.1:/tmp/de.sql ./
    

    5.3 以守护进程(socket)的方式传输数据,这个是rsync自身的重要功能。
    我们实验的机器如下:
    server: 192.168.1.1
    client: 192.168.1.2

    先新建配置文件,请注意rsyncd.conf配置文件只用在服务端新建就好。

    vim /etc/rsyncd.conf
    以下只是配置文件中最常用的部份,更多的请使用命令man rsyncd.conf查看。

    uid = root
    gid = root
    use chroot = yes
    max connections = 80
    strict modes =yes
    port = 873
    pid file = /var/run/rsyncd.pid
    log file = /var/log/rsyncd.log
    [test]
    path = /data/test
    ignore errors
    read only = no
    list = no
    hosts allow = 192.168.1.2
    hosts deny = 0.0.0.0/0

    root@192-168-1-1:~# rsync --daemon
    查看是否启动成功,rsyncd的默认端口是873,如果启动出错,我们就需要查看一下系统日志/var/log/rsyncd.log

    #client端推送文件
    root@192-168-1-2:/tmp# rsync -vaz xiao.sql 192.168.1.1::test
    
    #client端拉取文件
    root@192-168-1-2:/tmp# rsync -vaz 192.168.1.1::test/test.sql ./
    
    #如果16888是ssh端口
    root@192-168-1-2:/tmp# rsycn -e "ssh -p 16888" -vaz xiao.sql 192.168.1.1::test

    rsync在远程同步的时候,要求目标目录要和源目录保持同步,目标目录中多余的文件都要删除
    这就需要用到了参数--delete,如下:
    root@192-168-1-2:/tmp# rsync -vaz --progress --delete 192.168.1.1::test ./

    #192.168.1.1的/data/test下面的所有目录文件同步到192.168.1.2上的/tmp目录下面,并且原/tmp目录里的东西会清空。

    但是这个--delete加上去就是一个危险的命令,因为它是在同步之前先将目标目录中的文件删除,然后再将源目录中的文件同步过去。
    如果目标目录比较大,在删除过程中出现宕机事故就不好了。所以最好还是用--delete-after比较温柔点,靠谱点。

    rsync远程拷贝的时候,过滤某些某个文件或多个文件就用“--exclude 文件名”
    要是过滤多个文件或子目录,就把过滤的文件或目录名的关键字放在一个文件里,如下的exclude_file文件
    然后使用--exclude-from exclude—-file文件进行过滤,支持通配符。

    1)排除单独的文件夹和文件
    --exclude 'sources'
    root@192-168-1-2:/tmp# rsync -vaz --progress --exclude=*.sql 192.168.1.1::test ./

    2)使用 --exclude-from 排除多个文件夹和文件
    root@192-168-1-2:/tmp# cat exclude.txt
    1/xiao.sql
    2/test.sql

    root@192-168-1-2:/tmp# rsync -vaz --progress  --exclude-from=/root/exclude.txt 192.168.1.1::test ./

    ----------------------------------------------------- rsync同步时候的限流操作---------------------------------------------------- 

    # rsync -vaz --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s
    # rsync -vaz --progress --delete --bwlimit=2048 远程文件 本地文件 //限制为2M/s

    --------scp同步时的限流(-l参数)--------
    # scp -l 1024 filename root@192.168.1.1:/tmp/ //限制为1M Bytes/s 

  • 相关阅读:
    Android安全-代码安全1-ProGuard混淆处理
    快速提高Android开发效率的Web工具
    Android采用ListView实现数据列表显示2-使用SimpleAdapter进行数据绑定
    Java中Enum方法toString与ordinal方法
    视一:Web前端开发之HTML+CSS
    100-days: thirty-seven
    css 权重
    100-days: thirty-six
    100-days: thirty-five
    100-days: thirty-four
  • 原文地址:https://www.cnblogs.com/xingxiz/p/10370433.html
Copyright © 2011-2022 走看看