1.1 简介
1.1.1 rsync
rsync,全称(Remote Rynchronization),是一款开源、快速、多功能的、可实现全量及增量的本地或远程数据镜像同步备份的工具。可实现本地和远程两台主机之间的数据快速复制同步镜像、远程备份等功能。
相关特性:
1、 可排除指定目录或文件同步
2、 可以保持原文件或目录的权限、时间、软硬链接等所有属性不变
3、 可实现增量同步,即只同步发生变化的数据,因此数据传输速率较高
4、 可使用rcp、rsh、ssh等方式配合传输文件
5、 支持匿名或认证的进程模式传输,实现方便安全的数据备份及镜像。
rsync的不足:
首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!
1.1.2 inotify
Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
1.2 rsync+inotify的使用
1.2.1 Server端
1、 安装rsync
通过xinetd管理rsync
yum install rsync xinetd -y
修改/etc/xinetd.d/rsync文件,使其随xinetd启动而启动
vim /etc/xinetd.d/rsync
......将disable = yes 修改为 disable =no
disable = no
2、 建立rsync的配置文件
/etc/rsync.conf
uid=root gid=root use chroot=no max connections=10 timeout = 600 port = 873 pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock log file = /var/log/rsyncd.log secrets file=/etc/rsyncd.password
[backup] path = /home/jyli/test1 ignore errors read only = no list = no hosts allow=* auth users=jyli |
3、建立/etc/ rsyncd.password文件
jyli:iflytek |
格式 用户名:密码
# chmod 600 /etc/rsyncd.password
该文件必须有600权限
4、rsync启动
/etc/init.d/xinetdrestart
或
#chkconfig xinetd on
#chkconfig rsync on
1.2.2 client端
1、 安装rsync,同server端
2、 安装inotifytools工具包
# tar zxf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure && make && make install |
3、 建立/etc/rsyncd.password文件
iflytek |
这里只填写密码即可,需注意的是,必须是server端对应要同步模块的用户名密码
同样必须是600权限
4、 编写inotify.sh监控脚本
src=/home/spwang/logs/ des=backup user=jyli ip=192.168.72.59
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y/%H:%M' --format '%T%w%f' -e modify,delete,create,attrib $src | while read file do rsync -vzrtopg --partial --progress $src $user@$ip::$des --password-file=/etc/rsyscd.password done
|
启动
# chmod +x /root/inotify.sh
# /root/inotify.sh & #在后台执行
6、相关问题
(1)、 同步时删除源机器中的文件及目录时,要求不删除备份服务器的文件。
可以实现,通过rsync的配置,在inotify.sh监控脚本配置中,去除—delete参数即可。
--delete参数含义:删除那些DST中SRC没有的文件
(2)、 在同步时网络断开,网络恢复时,能否继续同步?
添加—partial参数,--timeout=15
--partial:断点续传
--timeout:超时