rsync+inotify实现远程文件时时同步

Rsync(remote synchronize)是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件。Rsync 使用所谓的“Rsync 算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送个文件的不同部分,而不是每次都整份传送,因此速度相当快。rsync 同时也在拷贝文件时,加--partial可支持断点续传,比cp要好多了,同时也rsync也可以拷贝链接文件,这一点是cp做不到的。
 
inotify 是文件系统事件监控机制,作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify 是一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。
 
1.首先,要安装rsync服务,安装后,修改  /etc/xinetd.d/rsync 使disable这一行改为no 就行

2.建立 rsync 目录
$ vi /etc/rsyncd/rsyncd.conf
   pid file = /var/run/rsyncd.pid   
   port = 873                        
   address = 10.1.1.100           
   uid = root                       
   gid = root                                  
   #read only = yes              
   max connections = 5                 
   #LOG
   log file = /var/log/rsync.log    
   transfer logging = yes             
   log format = %t %a %m %f %b      
   syslog facility = local3
   timeout = 300
   [test]
    path = /etc/123
    comment = this is a public     #这是个最简单的设置
   [test1]                          
   path = /home/test/ceshi
   uid = test
   gid = test              
   list=yes                                          
   auth users = fei                   
   secrets file = /etc/rsyncd.secrets  
   read only = no                            
   comment = test home                    
   在test1中需要密码,所以在建立相应的虚拟用户密码文件
   vi  /etc/rsyncd.secrets
   fei:fei  #用户名:密码
   注:最上面一般不用root 避免造成不必要的损失,可改成nobody

3.启动rsync服务
  service xinetd restart

4.测试(在10.1.1.99上测试)
  rsync -av rsync://10.1.1.100
 可观察到 有 test  和 test1 两个模块  再继续 rsync -av rsync://10.1.1.100/test
 可以看到下面的目录和子目录 全被列出来  这种情况不推荐,这里只是测试,无密码验证的话很容  易让人钻空了
空子  再用rsync -av rsync://10.1.1.100/test1时就不行了,需要密码验证
 所以应该加用户测试   rsync -av rsync://[email protected]/test1 再输入密码就好了
 Rsync -av --delete �Cprogress --stats rsync://[email protected]/test1 .也可以走ssh加密通道
 rsync -av --delete  -progress --stats -e “ssh -p 22 -c arcfour "  [email protected]:/home/test/ceshi
.
rsync同步是可以了,但我们不能一直手动同步,但也不能过很长时间再去同步,可能就有好几十个G要同步,那就
不好办了呀 所以我们引入inotify机制,让它检测出有更新的文件,自动去同步。
1.安装inotify服务

2.运行 inotify 设置监控目录
   /usr/local/bin/inotifywait -mrq --timefmt '%Y%m%d%H%M' --format '%T %w%f %e' /home/test/ceshi
   --timefmt 时间的格式
   --format 输出的格式
   -m 保持一直监听
   -r 是递归查看目录
   -q 是打印出事件
   -e 监听的事件
 
4.写个inotif_rsync.sh脚本
#!/bin/bash
src=/backuprsync
des=/home/test/ceshi
rsserver=10.1.1.100
/usr/local/bin/inotifywait -mrq  --format  '%w%f' -e modify,delete,create,attrib ${src} | while read  status
        do
                rsync -avz --delete --progress ${src} test@${ip}:${des} &&
                echo "${status} was rsynced"
                echo "---------------------------------------------------------------------------"
        done

执行此脚本:sh inotif_rsync.sh
 
5.测试
 在测试的机子上 /backuprsync 下touch个文件或rm个文件时 能够在服务器10.1.1.100上也能增加和减少个文件就OK了
 
注:这种方法虽然好,时时更新,但是有个弊端很不好,就是有人要在测试的机子上for循环touch n多个文件时,这时服务器端要时时更新,服务器会很慢很慢的。不过还是可以处理的,让服务器一次性最多同步定量的数,如超出这个的话,可再过多长时间继续同步。
 

       

本文出自 “理想CTO” 博客,谢绝转载!

你可能感兴趣的:(职场,休闲,rsync+inotify)