> CentOS > CentOS服务器 > 文件同步 >

双向实时远程同步文件(inotify+rsync与nfs)

项目中遇到两台机子上文件需要实时同步的情况,尝试了下面两种方法:
项目要求:A机(190)与B机(217)要求一个文件夹内容同对方一致,A机与B机都有可能单独接收到文件从而同步到对方。
方法一、使用rsync-server与inotify配合同步文件

1、rsync-server配置(217)

 

 
  1. # vi /etc/xinetd.d/rsync  
  2. # default: off  
  3. #       allows crc checksumming etc.  
  4. service rsync  
  5. {  
  6.         disable = no  
  7.         socket_type     = stream  
  8.         wait            = no  
  9.         user            = root  
  10.         server          = /usr/bin/rsync  
  11.         server_args     = --daemon  
  12.         log_on_failure  += USERID  
  13. }  

 

2、指定文件位置

 

 
  1. # vi /etc/rsyncd.conf  
  2. uid = root  
  3. gid = root  
  4. use chroot = yes  
  5. max connections = 4  
  6. strict modes = yes  
  7. syslog facility = local5  
  8. port = 873  
  9. [backup]  
  10. path = /home/rsync/test/  ##要同步的文件夹  
  11. comment = This is a test  
  12. ignore errors  
  13. read only = no   ##写权限  
  14. list = yes  
  15. auth users = rsync  
  16. secrets file = /etc/rsync.pas   ##验证文件,对方机子也要存在这个文件  
  17. hosts allow = 192.168.1.190 ##客户端IP  

3、创建rsync.pas

 

 
  1. # vi /etc/rsync.pas  
  2. sync:test      #用户名和密码  

4、客户端同步脚本(190)

 

 
  1. #vi inotify_rsync.sh  
  2. #!/bin/bash  
  3. SRC=/home/rsync/test/  
  4. DST=rsync@192.168.1.217::backup  
  5. /usr/bin/inotifywait -mrq -e modify,<del datetime="2011-11-07T01:44:44+00:00">delete</del>,create,attrib ${SRC} | while read D E F  
  6. do  
  7. /usr/bin/rsync -ahqzt --progress <del datetime="2011-11-07T01:44:44+00:00">--delete</del> --password-file=/etc/rsync.pas $SRC $DST  
  8. done  

 

5、设置脚本开机自启动


# cat "/root/inotify_rsync.sh" >> /etc/rc.local  

 

6、双向同步的实现及存在问题以上只是实现A机(190)同步到B机(217)的操作,把配置改一下在A机(190)上建立rsync服务器,即可实现双向同步,但不能执行删除操作,因为它们并没有方法判断以谁的操作为主,会造成新建文件被删除

7、客户端执行

 

 
  1. #  rsync -rvlHpogDtS  sync@192.168.1.217:/home/rsync/test/   /home/rsync/test/  
然后会提示输入服务器端密码 : 输入即可

 

 


方法二、使用NFS共享服务器实现文件同步

1、配置NFS

 

 
  1. #service portmap start  
  2. #service nfs start  
  3. #vi /etc/exports  
  4. /home/rsync/test *(rw,sync,no_root_squash) ##rw:可读写的权限;sync:资料同步写入存储器中; no_root_squash: 登入到NFS主机的用户如果是ROOT用户,他就用有ROOT的权限  
  5. # exportfs -rv  ##重新将设定加载  

 

2、加载NFS共享目录加载之前先用SSH连接一下两台机子,这样就不用配验证了,再写入到/etc/fstab文件里就OK了。

 


 
  1. mount -t nfs 192.168.1.190:/home/rsync/test /home/rsync/test  


写在最后:方法一文件同时存在两台机子上,具有实时性,安全性,但只适合不执行删除的文件的环境;方法二文件只存在于NFS服务器上,如果配合rsync服务器定时备份到另一地方,出现故障时可以人工恢复,也是不错的选择。

 

(责任编辑:IT)