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