rsync 實時同步

 我們知道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   #說明密碼文件權限不正確。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章