我们知道rsync可以做很多事情,例如同步数据,互传数据等,是个非常好用的命令

在公司里做网站,需要上传产品,这是件很头痛的事情,产品量大会对服务器网络有影响,所以有搞一个实时同步,这样数据量就会小很多,其实我们知道rsync自身也可以做到同步,要借助cron才行,这个有缺点就是不是实时的,如果产品要急着上还要等时间,太浪费时间了,所以今天搞了一下rsync+inotify来实现实时同步。

1.图形服务器(被同步端)

一般服务器都安装了rsync,如果没有就安装一下

  1. yum install rsync 

注:安装好了,rsync不需要配置

然后来安装inotify-tools

默认系统是没有安装的,好像系统光盘里也没有,可以通过这样来安装

  1. wget http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm 
  2. rpm -Uvh epel-release-6-5.noarch.rpm 

不同的系统下载对应的版本epel-reslease-*.noarch.rpm

我下载的适应centos6 redhat6都可以用

安装inotify

  1. yum install inotify 

看看有没有安装上

  1. [root@RedHat-6 ~]# ll /proc/sys/fs/inotify/ 
  2. 总用量 0 
  3. -rw-r--r-- 1 root root 0  1月 18 12:09 max_queued_events 
  4. -rw-r--r-- 1 root root 0  1月 18 12:09 max_user_instances 
  5. -rw-r--r-- 1 root root 0  1月 18 12:09 max_user_watches 

如果没有就说明没有安装成功。

现在就是实现实时同步的脚本了,哈哈!!(脚本名可以随便取),我这里叫inotifyrsync.sh

  1. #!/bin/bash 
  2. host=192.168.1.220 
  3.  
  4. src=/data0/p_w_picpath/ 
  5. dst=p_w_picpath 
  6.  
  7. /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \ 
  8.  | while read files; 
  9. do 
  10. /usr/bin/rsync -vzurtopg --progress --delete --password-file=/etc/rsyncd/rsyncd.secrets $src root@$host::$dst >> /var/log/rsync.log 2>&1 
  11. echo "${files} was rsyncd" >> /etc/rsyncd/rsyncd.log 2>&1 
  12. done 

这里说明一下:dst是rsync服务端的模块名称。

然后就创建一个密码文件rsyncd.secrets我的文件都放在/etc/rsyncd目录下

  1. mkdir /etc/rsyncd 
  2. touch /etc/rsyncd/rsyncd.secrets 
  3. chmod 600 /etc/rsyncd/rsyncd.secrets 
  4. [root@RedHat-6 rsyncd]# cat /etc/rsyncd/rsyncd.secrets 
  5. 123456                          #这里只需要密码 

注:这里的rsyncd.secrets密码文件权限一定要是600不然后面会报错的。

最后真要把脚本inotifyrsync.sh放到后台去执行就可以,这样就配置完了

  1. /etc/rsyncd/inotifyrsync.sh & 

2.同步端

同样的要确定有没有安装rsync,如果安装了就可以配置了,没有安装就像上面说的安装一下然后配置一下。rsync安装是没有配置文件的,需要手动创建。

  1. mkdir /etc/rsyncd 
  2. touch /etc/rsyncd/rsyncd.conf 
  3. touch /etc/rsyncd/rsyncd.secrets 

先把密码文件配一下(密码格式为:用户名:密码)

  1. [root@localhost rsyncd]# cat rsyncd.secrets 
  2. root:123456 

现在来配置一下rsync服务rsyncd.conf

  1. pid file = /var/run/rsyncd.pid 
  2. lock file = /var/run/rsync.lock 
  3. port = 873 
  4. address = 192.168.1.220 
  5. uid = nobody 
  6. gid = nobody 
  7.  
  8. use chroot = no 
  9. #read only = yes 
  10.  
  11. #limit access to private LANS 
  12.  
  13.  
  14. max connections = 5 
  15. #strict modes = yes 
  16. transfer logging = yes 
  17. #motd file = /etc/rsyncd/rsyncd.motd 
  18.  
  19. #log file 
  20. log file = /var/log/rsyncd.log 
  21. log format = %t %a %m %f %b 
  22. syslog facility = local3 
  23. timeout = 300 
  24.  
  25. [p_w_picpath]  #模板名
  26. path = /data0/p_w_picpath/ 
  27. list = false 
  28. ignore errors 
  29. read only = no 
  30. write only = no 
  31. hosts allow = 192.168.1.9 
  32. hosts deny = * 
  33. uid = root 
  34. gid = root 
  35. auth users = root 
  36. secrets file = /etc/rsyncd/rsyncd.secrets 
  37. comment = Rsync Path 
  38. exclude = web/ 

配置好之后,就可以启动了

  1. rsync --daemon --config=/etc/rsyncd/rsyncd.conf 

搞好之后,就可以测试一下了,看看你改图片服务器上面的东西,同步端有没有什么变化。

错误分析:

       1. @ERROR: auth failed on module Path   #说明密码文件权限不正确。