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 

 

Ubuntu16.04下安装配置rsync

1.ubuntu 16.04默认已安装rsync,rsync服务默认不是启动的,我们要修改rsync文件。

vim /etc/default/rsync

RSYNC_ENABLE=true    #false改true

2.创建配置文件

vim /etc/rsyncd.conf

uid=root
gid=root
max connections=360
timeout = 600
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock

[wifi1]
path=/data
comment = /data

munge symlinks = no

read only = no
hosts allow = 192.168.1.1
hosts deny = 0.0.0.0/0

3.启动rsync daemon服务

service rsync start

 

 

#保持软链接不变

munge symlinks = no

posted @ 2019-02-13 16:15  醒袭z  阅读(499)  评论(0编辑  收藏  举报