1. Rsync介绍
1.1 什么是Rsync?
Rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具。Rsync软件适用于unix/linux/windows等多种操作系统平台。
官网:https://www.samba.org/ftp/rsync/rsync.html
1.2 Rsync简介
- Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。
- 当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
小提示:利用Rsync还可以实现删除文件何目录的功能,这又相当于rm命令!
-
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
-
在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据。
提示:传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能及效率上,Rsync工具更胜一筹。
-
CentOS5,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步。
-
CentOS6,rsync3.x比对方法,一边比对差异,一边对差异的部分进行同步。
1.3 Rsync的特性
Rsync的特性如下:
- 支持拷贝特殊文件,如链接文件,设备等。
- 可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能(--exclude=PATTERN)
- 可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等属性均不改变-p
- 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)
- 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
- 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
- 支持匿名的或认证(不需要系统用户,不需要超级用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
1.4 Rsync的企业工作场景说明
1.1.4.1 两台服务器之间数据同步(定时任务+备份数据)即crond+rsync
生产场景集群架构服务器备份方案项目
借助crond+rsync把所有客户服务器数据同步到备份服务器
通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。
1.1.4.2 实时同步,实时备份(解决存储服务器等的单点问题)
利用rsync结合inotify的功能做实时的数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或sersync结合rsync命令实时同步到备份服务器,还可以通过drbd方案以及双写的方案实现双机数据同步。
- sersync + rsync
- inotify + rsync
- Irsyncd + rsync
2. Rsync的工作模式
一般来说,Rsync大致使用三种主要的传输数据的方式。分别为:
- 单个主机本地之间的数据传输(此时类似于cp命令的功能)
- 借助rcp,ssh等通道来传输数据(此时类似于scp命令的功能)
- 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能)
以上的几种rsync的工作方式,我们可以通过man rsync帮助或查看官方的手册获得。
rsync - a fast, versatile, remote (and local) file-copying tool
语法:
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 Usages with just one SRC arg and no DEST arg will list the source files instead of copying.
2.1 本地数据传输模式(local-only mode)
语法:
Local: rsync [OPTION...] SRC... [DEST]
说明:
- Rsync为同步的命令;
- [OPTION]为同步时的参数选项
- SRC为源,即待拷的分区,文件或目录等;
- [DEST]为目的分区,文件或目录等;
参数:
- -v, --verbose 详细模式输出,传输时的进度等信息
- -z, --compress 传输时进行压缩,以提高传输效率,--compress-level=NUM可按级别压缩
- -a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDl
- ------------------------------------------------------------------
- -r, --recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
- -t, --times 保持文件时间信息
- -o, --owner 保持文件属主信息
- -g, --group 保持文件数组信息
- -p, --perms 保持文件权限
- -D, --devices 保持设备文件信息
- -l, --links 保持软连接
- -------------------------------------------------------------------
- -P, --progress 显示同步的过程及传输时的进度等信息
- -e, --rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序。如:ssh
- --exclude=PATTERN 指定排除不需要传输的文件模式(和tar的排除参数用法一样)
- --exclude-from=file 文件名所在的目录文件(和tar参数一样)
- --bwlimit=RATE 限速,限制socket I/O带宽 bandwidth(rsync,scp,ftp等都有限速功能)
- --delete 让目标目录DST和 源目录数据SRC 一致。
示例:
- rsync /etc/hosts /tmp/ # 将/etc/hosts文件拷贝到本地的/tmp/目录下
- rsync /etc/hosts /opt
- rsync -avz /opt /mnt 把opt目录拷贝到/mnt目录下,相当于cp -ap /opt /mnt
- 保持同步目录和文件属性
- -avz相当于-vzrtopgDI
- 生产环境常用参数选项为-avzP(或-vzrtopgP)
- 如果是在脚本中,也可以把-v和-P去掉
- rsync -avz --bwlimit=100 dbfile 192.16.1.41:/backup
- 限制带宽做远程备份
- rsync -avz --delete /old/ /tmp/ 删除功能,相当于rm命令
- 相当于同步的功能,即本地不存在,则删除目标dist
- 若本地存在,远端会同步
- 非常危险的操作,如果不对,会导致差异化数据的丢失。
[root@oldboy dir1]# tree -L 2 # 数据模拟,显示模拟数据结构 . |-- dir2 | |-- t1 | |-- t2 | |-- t3 | `-- t4 `-- dir2.ori |-- t11 |-- t12 |-- t13 `-- t14 2 directories, 8 files [root@oldboy dir1]# rsync -avz --delete dir2/ dir2.ori/ # 同步数据,若源数据没有,则远端删除;同时需要同步 sending incremental file list ./ deleting t14 deleting t13 deleting t12 deleting t11 # 删除了目标远端中与本地差异化的数据 t1 t2 t3 t4 # 将源数据同步到远端 sent 209 bytes received 91 bytes 600.00 bytes/sec total size is 0 speedup is 0.00 [root@oldboy dir1]# tree -L 2 . |-- dir2 | |-- t1 | |-- t2 | |-- t3 | `-- t4 `-- dir2.ori |-- t1 |-- t2 |-- t3 `-- t4 2 directories, 8 files