• Rsync 同步工具


    1.Rsync 简介

          Rsync(remote synchronize)rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具rsync软件适用于unix/linux/windows等多种操作系统平台,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源码安装
    1 https://download.samba.org/pub/rsync/src/
    最新下载链接地址
     1 [root@zrlog ~]# cd /usr/src/
     2 [root@zrlog src]# wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
     3 [root@zrlog src]# ls
     4 debug  kernels  rsync-3.1.2.tar.gz
     5 [root@zrlog src]# tar -zxvf rsync-3.1.2.tar.gz 
     6 [root@zrlog src]# cd rsync-3.1.2/
     7 [root@zrlog rsync-3.1.2]# ./configure --prefix=/usr/local/rsync
     8 [root@zrlog rsync-3.1.2]# make && make install 
     9 [root@zrlog ~]# vim /etc/profile.d/rsync.sh
    10 [root@zrlog ~]# cat !$
    11 cat /etc/profile.d/rsync.sh
    12 export PATH=/usr/local/rsync/bin:$PATH
    13 [root@zrlog ~]# source !$
    14 source /etc/profile.d/rsync.sh
    15 [root@zrlog ~]# which rsync
    16 /usr/local/rsync/bin/rsync
    17 [root@zrlog ~]# rsync --version
    18 rsync version 3.1.2 protocol version 31
    19 Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
    20 Web site: http://rsync.samba.org/
    21 Capabilities:
    22 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    23 socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    24 append, no ACLs, xattrs, iconv, symtimes, prealloc
    25 
    26 rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
    27 are welcome to redistribute it under certain conditions. See the GNU
    28 General Public Licence for details.
    rsync安装
    5.语法介绍
    Local:  rsync [OPTION...] SRC... [DEST]
    Access via remote shell:
      Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
      Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
    
    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      详细模式输出,传输时的进度信息
    -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        保持软链接
    -u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
    -e --rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序,例如ssh
    --delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致
    --password-file 来指定密码文件
    --exclude=PATTERN 指定排除不需要传输的文件模式 --exclude-from=FILE 从文件中读取指定排除不需要传输的文件模式 以上参数为在生产环境中的常用参数,基本使用已足够,相关的参数还有非常多,了解更多可以man rsync。最常用的参数avz相当于vzrtopgDl,生产参数-avz或者用-vzrtopg
     1 [root@zrlog ~]# ls
     2 anaconda-ks.cfg  nginx.conf  oneinstack-full.tar.gz  xtrabackup-1.6.7.tar.gz
     3 [root@zrlog ~]# rsync -avzP xtrabackup-1.6.7.tar.gz /backup/
     4 sending incremental file list
     5 xtrabackup-1.6.7.tar.gz
     6      12,345,435 100%   25.86MB/s    0:00:00 (xfr#1, to-chk=0/1)
     7 
     8 sent 12,224,253 bytes  received 35 bytes  8,149,525.33 bytes/sec
     9 total size is 12,345,435  speedup is 1.01
    10 [root@zrlog ~]# ll /backup/
    11 total 12060
    12 -rw-r--r-- 1 root root 12345435 Dec 18  2012 xtrabackup-1.6.7.tar.gz
    rsync Local案例
     1 [root@zrlog ~]# hostname -I
     2 10.2.2.125 
     3 [root@zrlog ~]# cd /backup/
     4 [root@zrlog backup]# ls
     5 xtrabackup-1.6.7.tar.gz
     6 [root@zrlog backup]# touch stu{1..100}
     7 [root@zrlog backup]# ls
     8 stu1    stu14  stu2   stu25  stu30  stu36  stu41  stu47  stu52  stu58  stu63  stu69  stu74  stu8   stu85  stu90  stu96
     9 stu10   stu15  stu20  stu26  stu31  stu37  stu42  stu48  stu53  stu59  stu64  stu7   stu75  stu80  stu86  stu91  stu97
    10 stu100  stu16  stu21  stu27  stu32  stu38  stu43  stu49  stu54  stu6   stu65  stu70  stu76  stu81  stu87  stu92  stu98
    11 stu11   stu17  stu22  stu28  stu33  stu39  stu44  stu5   stu55  stu60  stu66  stu71  stu77  stu82  stu88  stu93  stu99
    12 stu12   stu18  stu23  stu29  stu34  stu4   stu45  stu50  stu56  stu61  stu67  stu72  stu78  stu83  stu89  stu94  xtrabackup-1.6.7.tar.gz
    13 stu13   stu19  stu24  stu3   stu35  stu40  stu46  stu51  stu57  stu62  stu68  stu73  stu79  stu84  stu9   stu95
    14 
    15 [lcx@cgp ~]$ hostname -I
    16 10.2.2.137 
    17 [lcx@cgp ~]$ sudo mkdir /backup
    18 [lcx@cgp ~]$ ll /backup/
    19 total 0
    20 
    21 
    22 [root@zrlog ~]# rsync /backup/ -avzP -e "ssh -p 22" root@10.2.2.137:/backup/
    23 root@10.2.2.137's password: 
    24 sending incremental file list
    25 ./
    26 stu1
    27               0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=100/102)
    28 ........
    29 xtrabackup-1.6.7.tar.gz
    30      12,345,435 100%   16.73MB/s    0:00:00 (xfr#101, to-chk=0/102)
    31 
    32 sent 12,228,591 bytes  received 1,941 bytes  627,206.77 bytes/sec
    33 total size is 12,345,435  speedup is 1.01
    34 
    35 
    36 [lcx@cgp ~]$ ls /backup/
    37 stu1    stu14  stu2   stu25  stu30  stu36  stu41  stu47  stu52  stu58  stu63  stu69  stu74  stu8   stu85  stu90  stu96
    38 stu10   stu15  stu20  stu26  stu31  stu37  stu42  stu48  stu53  stu59  stu64  stu7   stu75  stu80  stu86  stu91  stu97
    39 stu100  stu16  stu21  stu27  stu32  stu38  stu43  stu49  stu54  stu6   stu65  stu70  stu76  stu81  stu87  stu92  stu98
    40 stu11   stu17  stu22  stu28  stu33  stu39  stu44  stu5   stu55  stu60  stu66  stu71  stu77  stu82  stu88  stu93  stu99
    41 stu12   stu18  stu23  stu29  stu34  stu4   stu45  stu50  stu56  stu61  stu67  stu72  stu78  stu83  stu89  stu94  xtrabackup-1.6.7.tar.gz
    42 stu13   stu19  stu24  stu3   stu35  stu40  stu46  stu51  stu57  stu62  stu68  stu73  stu79  stu84  stu9   stu95
    rsync Acess via remote shell PUSH案例
     1 [root@zrlog ~]# rm -rf /backup/*
     2 [root@zrlog ~]# ll /backup/
     3 total 0
     4 [root@zrlog ~]# rsync -avzP -e "ssh - p 22"root@10.2.2.137:/backup/ /backup
     5 root@10.2.2.137's password: 
     6 receiving incremental file list
     7 ./
     8 stu1
     9               0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=100/102)
    10 .....
    11 xtrabackup-1.6.7.tar.gz
    12      12,345,435 100%   11.46MB/s    0:00:01 (xfr#101, to-chk=0/102)
    13 
    14 sent 1,933 bytes  received 12,227,643 bytes  1,630,610.13 bytes/sec
    15 total size is 12,345,435  speedup is 1.01
    16 [root@zrlog ~]# ls /backup/
    17 stu1    stu14  stu2   stu25  stu30  stu36  stu41  stu47  stu52  stu58  stu63  stu69  stu74  stu8   stu85  stu90  stu96
    18 stu10   stu15  stu20  stu26  stu31  stu37  stu42  stu48  stu53  stu59  stu64  stu7   stu75  stu80  stu86  stu91  stu97
    19 stu100  stu16  stu21  stu27  stu32  stu38  stu43  stu49  stu54  stu6   stu65  stu70  stu76  stu81  stu87  stu92  stu98
    20 stu11   stu17  stu22  stu28  stu33  stu39  stu44  stu5   stu55  stu60  stu66  stu71  stu77  stu82  stu88  stu93  stu99
    21 stu12   stu18  stu23  stu29  stu34  stu4   stu45  stu50  stu56  stu61  stu67  stu72  stu78  stu83  stu89  stu94  xtrabackup-1.6.7.tar.gz
    22 stu13   stu19  stu24  stu3   stu35  stu40  stu46  stu51  stu57  stu62  stu68  stu73  stu79  stu84  stu9   stu95
    rsync Acess via remote shell PULL案例
    rsync deamon模式

     rsync deamon 模式分为服务端和客户端,服务端需要编辑配置rsyncd.conf文件.

    案例演示 server ip 10.2.2.125  client ip 10.2.2.137

     1 #global
     2 pid file = /var/run/rsyncd.pid
     3 port = 873
     4 address = 10.2.2.125
     5 uid = rsync
     6 gid = rsync
     7 max connections=5
     8 timeout = 600
     9 lock file = /var/run/rsyncd.lock
    10 log file = /var/log/rsyncd.log
    11 log format = %t %a %m %f %b
    12 transfer logging = yes
    13 motd file = /usr/local/rsync/rsyncd.motd
    14 
    15 #modules name
    16 [backup]
    17 path = /backup
    18 ignore errors
    19 list = false
    20 hosts allow = *
    21 auth users = rsync
    22 read only = no
    23 write only = yes
    24 use chroot = no
    25 secrets file = /usr/local/rsync/rsync.passwd
    rsyncd.conf  
     1 全局参数
     2 在全局参数部分也可以定义模块参数,这时该参数的值就是所有模块的默认值
     3 address --在独立运行时,用于指定的服务器运行的 IP 地址;由 xinetd 运行时将忽略此参数,使用命令行上的 –address 选项替代。默认本地所有IP
     4 port --指定 rsync 守护进程监听的端口号。 由 xinetd 运行时将忽略此参数,使用命令行上的 –port 选项替代。默认 873
     5 motd file --指定一个消息文件,当客户连接服务器时该文件的内容显示给客户
     6 pid file --rsync 的守护进程将其 PID 写入指定的文件
     7 log file --指定 rsync 守护进程的日志文件,而不将日志发送给 syslog
     8 syslog facility --指定 rsync 发送日志消息给 syslog 时的消息级别
     9 socket options --指定自定义 TCP 选项
    10 lockfile --指定rsync的锁文件存放路径
    11 timeout = 600 --超时时间
    12 模块参数
    13 模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的
    14 基本模块参数
    15 path --指定当前模块在 rsync 服务器上的同步路径,该参数是必须指定的
    16 comment --给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
    17 模块控制参数
    18 use chroot = --默认为 true,在传输文件之前首先 chroot 到 path 参数所指定的目录下;优点,安全;缺点,需要 root 权限,不能备份指向 path 外部的符号连接所指向的目录文件
    19 uid = --指定该模块以指定的 UID 传输文件;默认nobody
    20 gid = --指定该模块以指定的 GID 传输文件;默认nobody
    21 max connections --最大并发连接数,0为不限制
    22 lock file --指定支持 max connections 参数的锁文件。默认 /var/run/rsyncd.lock
    23 list --指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。默认为 true,显示
    24 read only = --只读选择,也就是说,不让客户端上传文件到服务器上。默认true
    25 write only = --只写选择,也就是说,不让客户端从服务器上下载文件。默认false
    26 ignore errors --忽略IO错误。默认true
    27 ignore nonreadable --指定 rysnc 服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些不应该被备份者获得的文件时是有意义的。 false
    28 timeout = --该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。对于匿名 rsync 服务器来说,理想的数字是 600(单位为秒)。 0 (未限制)
    29 dont compress --用来指定那些在传输之前不进行压缩处理的文件。该选项可以定义一些不允许客户对该模块使用的命令选项列表。必须使用选项全名,而不能是简称。当发生拒绝某个选项的情况时,服务器将报告错误信息然后退出。例如,要防止使用压缩,应该是:”dont compress = *”。 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
    30 模块文件筛选参数
    31 exclude --指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 exclude 列表中。这等同于在客户端命令中使用 –exclude 来指定模式
    32 exclude from --指定一个包含 exclude 规则定义的文件名,服务器从该文件中读取 exclude 列表定义
    33 include --指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到 include 列表中。这等同于在客户端命令中使用 –include 来指定模式
    34 include from --指定一个包含 include 规则定义的文件名,服务器从该文件中读取 include 列表定义
    35 模块用户认证参数
    36 auth users --指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块(和系统用户没有任何关系)。用户名和口令以明文方式存放在 secrets file 参数指定的文件中。默认为匿名方式
    37 secrets file --指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用。文件权限必须是 600
    38 strict modes --指定是否监测口令文件的权限。为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认为true
    39 模块访问控制参数
    40 hosts allow --用一个主机列表指定哪些主机客户允许连接该模块。不匹配主机列表的主机将被拒绝。默认值为 *
    41 hosts deny --用一个主机列表指定哪些主机客户不允许连接该模块
    42 模块日志参数
    43 transfer logging --使 rsync 服务器将传输操作记录到传输日志文件。默认值为false
    44 log format --指定传输日志文件的字段。默认为:”%o %h [%a] %m (%u) %f %l”
    45 设置了”log file”参数时,在日志每行的开始会添加”%t [%p]“;
    46 可以使用的日志格式定义符如下所示:
    47 %o --操作类型:”send” 或 “recv”
    48 %h --远程主机名
    49 %a --远程IP地址
    50 %m --模块名
    51 %u --证的用户名(匿名时是 null52 %f --文件名
    53 %l --文件长度字符数
    54 %p --该次 rsync 会话的 PID
    55 %P --模块路径
    56 %t --当前时间
    57 %b --实际传输的字节数
    58 %c --当发送文件时,记录该文件的校验码
    配置差数详解
     1 #确保SElinux 是关闭状态
     2 [root@zrlog rsync]# getenforce 
     3 Disabled
     4 #关闭iptables 或者添加新规则
     5 [root@zrlog rsync]# iptables -I INPUT -p tcp --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
     6   
     7 #启动rsync daemon
     8 #将/usr/local/rsync/rsync.passwd 文件权限更改为600
     9 [root@zrlog rsync]# rsync --daemon --config=/usr/local/rsync/rsyncd.conf 
    10 [root@zrlog rsync]# lsof -i :873
    11  COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    12  rsync   24492 root    4u  IPv4 377427      0t0  TCP zrlog.simple.com:rsync (LISTEN)
    13 
    14 PUSH 案例
    15 服务端backup目录:
    16 [root@simple backup]# ll
    17 total 0
    18 
    19 rsync客户端
    20 [lcx@cgp ~]$ rsync --password-file=./rsync.passwd -avz ./xtrabackup-1.6.7.tar.gz rsync@10.2.2.125::backup
    21 sending incremental file list
    22 xtrabackup-1.6.7.tar.gz
    23 sent 12349678 bytes received 27 bytes 1899954.62 bytes/sec
    24 total size is 12345435 speedup is 1.00
    25 
    26 服务端backup目录:
    27 [root@simple backup]# ll
    28 total 12060
    29 -rw-r--r-- 1 rsync rsync 12345435 Mar 27 12:58 xtrabackup-1.6.7.tar.gz
    30 
    31 PULL案例  即要想从服务端数据同步到rsync客户端的话,read only = no,write only = no
    32 否则会报这种错误
    33 [lcx@cgp ~]$ rsync -avz rsync@10.2.2.125::backup ./
    34 Password: 
    35 receiving incremental file list
    36 rsync: connection unexpectedly closed (5 bytes received so far) [Receiver]
    37 rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
    38 
    39 在服务端看rsync日志
    40 
    41 2018/04/08 14:12:52 [2407] ERROR: module is write only
    42 2018/04/08 14:12:52 [2407] rsync error: syntax or usage error (code 1) at main.c(786) [sender=3.1.2]
    43 2018/04/08 14:14:07 [2412] params.c:Parameter() - Ignoring badly formed line in config file: ignore errors
    44 
    45 [root@simple backup]# cp /usr/local/rsync/rsyncd.conf  ./
    46 [root@simple backup]# ls
    47 rsyncd.conf  xtrabackup-1.6.7.tar.gz
    48 客户端操作:
    49 [lcx@cgp ~]$ rsync --password-file=./rsync.passwd -avz rsync@10.2.2.125::backup ./
    50 receiving incremental file list
    51 ./
    52 rsyncd.conf
    53 
    54 sent 114 bytes received 1054 bytes 2336.00 bytes/sec
    55 total size is 12378443 speedup is 10597.98
    56 
    57 ###结合crond服务就可以定期往服务器PUSH
  • 相关阅读:
    百度前端技术学院task35源代码——听指令的小方块3
    百度前端技术学院task34源码——会指令的小块2
    ManyToManyField 增加记录
    同一个页面多个按钮,根据按钮名字执行相应功能
    django 函数装饰器 变为 类装饰器
    script 跳出小窗口
    django 把函数装饰器变为方法装饰器
    modelform添加属性
    Cannot assign “A1”: “B1” must be a “C1” instance.
    Django form choices, placeholder
  • 原文地址:https://www.cnblogs.com/simple001/p/8716531.html
Copyright © 2020-2023  润新知