简介
rsync=remote sync,即远程数据同步备份工具,最大的优势就是快速
特性
-
可以镜像保存整个目录树和文件系统;
-
可以很容易做到保持原来文件的权限、时间、软硬链接等等;
-
无须特殊权限即可安装;
优势
-
快速:
-
第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件;
-
rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽;
-
-
安全:
-
可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
-
工作模式
-
shell模式:也称本地模式,类似cp;
-
远程shell模式:此时可以使用ssh协议承载其数据传输过程;
-
列表模式:仅列出源的内容,使用选项-nv即可,类似ls;
-
服务器模式:此时rsync工作为守护进程,能够接受客户端的数据传输请求;在使用时,可以在客户端使用rsync命令把文件发送给守护进程,也可以向服务器请求获取文件;
常用使用选项一级
1
2
3
4
5
6
7
8
9
10
11
12
|
-n:
# 测试指令,在不确定命令能否能按照意愿执行时,务必要先进行测试
-
v
:--verbose
# 详细输出模式
-q:--quiet
# 静默模式
-c:--checksum
# 开启校验功能,强制对文件传输进行校验
-r:--recursive
# 递归复制
-a:--archive
# 归档,保留文件的原有属性,等同于-rlptgoD,一般都使用此选项
-p:perms
# 保留文件的权限
-t:
times
# 保留文件的时间戳,很重要,保持源端文件和目的端文件的mtime一致能避免重复同步问题
-l:links
# 保留文件的符号链接
-g:group
# 保留文件的属组
-o:owner
# 保留文件的属主
-D:--devices
# 保留设备文件
|
注:对-r选项的重点解释
常用使用选项二级
1
2
3
4
5
6
7
8
9
10
11
12
|
-e
ssh
# 表示使用ssh协议作承载(rsync不具备加密功能)
-z
# 对文件压缩后传输
--progress
# 显示每个文件传输进度条
--stats
# 显示传输文件的统计信息
--existing
# 不同步新文件,只同步已存在目的端的文件
--ignore-existing
# 不更新已存在文件,只同步新文件
--delete
# 目的端删除源端不存在的文件,即保持和源端一致
--delete-before
# 默认删除策略,同步前删除目的端文件
--delete-after
# 删除策略,同步后删除目的端文件
--delete-excluded
# 专门指定需在目的端删除的文件,后跟--exclude选项
--exclude=PATTERN
# 源端匹配PATTERN模式的文件,屏蔽其同步
--exclude-from=FILE
# 从文件中读取PATTERN
|
配置rsync以daemon方式运行
设定rsync服务器端
安装并启动xinetd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 安装程序
yum -y
install
xinetd
rsync
# 配置文件设置
# vi /etc/rsyncd.conf
# Global Settings
uid = nobody
# 运行rsync的用户
gid = nobody
# 运行rsync的组
use chroot = no
# 关闭chroot
max connections = 2
# 最大连接数
strict mode =
yes
# 开启对密码文件权限的严格限制,不能被除rsync运行用户以外的用户访问,即密码文件权限一般得是600
pid
file
=
/var/run/rsyncd
.pid
# pid文件
log
file
=
/var/log/rsyncd
.log
# 日志文件
# Directory Settings
[mydata]
# 对于备份目录的模块名,在同步时使用
path =
/mydata/data
# 需备份的数据目录
ignore errors =
yes
# 同步时,忽略错误
read
only = no
# 非只读
write only = no
# 非只写
hosts allow = 172.16.0.0
/16
# 访问控制,允许访问的来源IP段
hosts deny = *
# 访问控制,不允许访问的来源IP,此处*代表全部
list =
false
# 不允许列出目录
uid = root
# 会覆盖global settings的相关配置
gid = root
# 同上
auth
users
= jason
# 允许同步数据的用户,在此只有一个jason
secrets
file
=
/etc/rsyncd
.
passwd
# 密码文件目录
|
配置密码文件/etc/rsyncd.passwd
1
2
3
4
|
# 格式:username:password,
# vi /etc/rsyncd.passwd
jason:jason123
chmod
600
/etc/rsyncd
.
passwd
|
配置服务启动
1
2
3
|
chkconfig
rsync
on
service xinetd start
# 注:rsync被xinetd调用后监听在873/tcp端口
|
客户端配置
客户端也必须配置密码文件,但格式略有不同
1
2
3
4
|
格式:password
# vi /etc/rsyncd.passwd
jason123
chmod
600
/etc/rsyncd
.
passwd
|
测试数据同步的用法
如果需要做周期性操作,则需要将命令写入crontab中:
1
2
|
# crontab -e
*
/5
* * * *
/usr/bin/rsync
-a --password-
file
=
/etc/rsyncd
.
passwd
jason@172.16.251.182::mydata
/data
&>
/dev/null
|
高级应用:rsync+inotify实现数据实时同步
简介
-
rsync和crontab结合虽然可以实现数据定时同步,但对于需要实时备份数据的场景就不适用了,此时就可借助于inotify了;
-
inotify实际上是Linux Kernel中的一个特性,可以监控文件系统,比如删除、读、写和卸载操作等;
-
可以利用inotify的监控功能,当待备份文件出现改变(如新增,删除,修改等)时,及时通知rsync进行数据同步操作,就实现了实时同步的目的;
原理说明
因为是发起rsync的主动同步,而且是推送(即PUSH)数据,只能是从rsync客户端向rsync服务器端推送数据,这点与rsync+crontab形式的从服务器端拉取(即PULL)数据不同,区别如下
具体部署
-
rsync的服务器端和客户端的配置与上面所述基本相同,不再赘述;
-
在rsync客户端不再是拉取数据,而是推送数据,首先安装inotify-tools,其中包含所需的inotifywait文件系统监控工具
1yum -y
install
inotify-tools
-
然后配置运行一个后台程序,用以实时监控待备份的数据目录,下面用例中监控本地/tmp目录,将数据同步至rsyns服务器的mydata模块对应的目录下
更多技巧
因为inotify是针对文件系统的监控,非常灵敏,为了防止一些临时文件或者大文件的不断同步问题,可利用如下技巧:
-
解决编辑文件时产生临时文件同步:--exclude ".*(swp|swx|~)"
-
解决写入大文件时不断同步的问题:-e close_write,delete,create,attrib