server1(主。IP:10.108.7.8):文件变动,如存放用户文档数据等。
rsync服务 inotify服务
server2(从。IP:10.108.7.9):将server1所变动部分同步到server2.
二:配置步骤
1.ssh无密码设置
2.server1 rsync服务端安装
3.server1 inotify 安装
三:ssh无密码设置。最终的效果是server1可以直接连到server2
3.1. server1
ssh-keygen -t rsa
得到如下结果
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: 8a:53:5e:6f:0a:9f:a4:9c:bb:a1:31:8d:d8:3f:cf:db root@rpt01
中间提示输入passphrase,直接回车就行。
生成id_rsa文件为私有密钥,id_rsa.pub为公有密钥。
3.2修改.ssh目录的权限
chmod 755 ~/.ssh
3.3将密钥对中的公共密钥复制到server2,并保存为~/.ssh/authorized_keys.
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys
3.4 test 你可以重复上面这句,这次如果OS没有提示你输入密码就表示设置成功。
四:server1 rsync客户端安装
wget ftp://ftp.samba.org/pub/rsync/rsync-3.0.9.tar.gz tar -zxvf rsync-3.0.9.tar.gz cd rsync-3.0.9 ./configure --prefix=/usr/local/rsync make make install
以上过程没有出现的话就安装好了,现在就有rsync命令可以用了,rsync命令放在/usr/local/rsync/bin。用rsync命令可以去运行有rsync服务的服务器上抓取资料
比如命令:rsync -avz $SRC $DST
五 server1 inotify 安装
5.1 下载inotify-tools-3.14.tar.gz
5.2 安装
tar -zxvf inotify-tools-3.14.tar.gz cd inotify-tools-3.14 ./configure --prefix=/usr/local/inotify make make install
5.3 写脚本测试
vi inosync.sh
#!/bin/sh SRC=/home/test [email protected]:/home/ /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' \ -e create,move,delete,modify ${SRC} | while read file do rsync -avz --delete --progress ${SRC} ${DST} done
修改权限
chmod +x inosync.sh
测试
./inosync.sh &
cd /home/test
mkdir t1
5.4 将脚本设为自启动
echo "nohup /home/test/inosync.sh &" >> /etc/rc.local
理论性知识
一 rsync
rsync是一个提供快速增量文件传输的开源工具。其基于GNU General Public License 发布,目前主要有 Wayne Davison (http://opencoder.net/)维护。主页http://rsync.samba.org/
rsync是一个Unix系统的的文件传输程序,通过使用“rsync 算法”,提供远程文件同步的快速方法。顾名思义,rsync就是 remote sync。通过过程中,只是发送发生改变的文件,而不是发送全部的内容。
它的特性如下:
1、可以更新整个目录树和文件系统;
2、可以保留文件的软链接、硬链接、权限信息、属主信息、设备和时间信息;
3、无须特殊权限即可安装;
4、内部的流水线提高了多文件传输的速度;
5、可以使用ssh、rsh或者socket链接进行传输;
6、支持匿名传输;
rsync的conf详解以及命令参数可以参看http://blog.csdn.net/xw_hit/article/details/5955139
常见的参数组合说明
-avz
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v, --verbose 详细模式输出
-z, --compress 对备份的文件在传输时进行压缩处理
-aHqzt
-H, –hard-links 保留硬链结
-q, –quiet 精简输出模式
-t, –times 保持文件时间信息
--delete 删除那些DST中SRC没有的文件
二 inotify
rsync的不足:
首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发 生变化的往往是其中很少的一部分,这是非常低效的方式。
其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同 步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据
Inotify 可以监视的文件系统事件包括:
inotifywait
仅执行阻塞,等待 inotify 事件。您可以监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等)。在 shell 脚本中使用 inotifywait
。inotifywatch
收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
inotifywait 的参数
参数说明:%T 输出事件发生时的时间,--timefmt option指定格式
--timefmt '%d/%m/%y %H:%M' --format '%T %w%f'上面的输出类似于:10/03/09 15:31 /wwwpic/1
inotifywatch: 参考http://limimgjie.iteye.com/blog/747414
使用linux的inotify特性监控某段时间内的文件状态,并输出摘要报表.
样例:输出beagle目录下60秒内的访问和修改事件触发报表
% inotifywatch -v -e access -e modify -t 60 -r ~/.beagle Establishing watches... Setting up watch(es) on /home/rohan/.beagle OK, /home/rohan/.beagle is now being watched. Total of 302 watches. Finished establishing watches, now collecting statistics. Will listen for events for 60 seconds. total access modify filename 1436 1074 362 /home/rohan/.beagle/Indexes/FileSystemIndex/PrimaryIndex/ 1323 1053 270 /home/rohan/.beagle/Indexes/FileSystemIndex/SecondaryIndex/ 303 116 187 /home/rohan/.beagle/Indexes/KMailIndex/PrimaryIndex/ 261 74 187 /home/rohan/.beagle/TextCache/ 206 0 206 /home/rohan/.beagle/Log/ 42 0 42 /home/rohan/.beagle/Indexes/FileSystemIndex/Locks/ 18 6 12 /home/rohan/.beagle/Indexes/FileSystemIndex/ 12 0 12 /home/rohan/.beagle/Indexes/KMailIndex/Locks/ 3 0 3 /home/rohan/.beagle/TextCache/54/ 3 0 3 /home/rohan/.beagle/TextCache/bc/ 3 0 3 /home/rohan/.beagle/TextCache/20/ 3 0 3 /home/rohan/.beagle/TextCache/62/ 2 2 0 /home/rohan/.beagle/Indexes/KMailIndex/SecondaryIndex/