我們知道rsync可以做很多事情,例如同步數據,互傳數據等,是個非常好用的命令
在公司裏做網站,需要上傳產品,這是件很頭痛的事情,產品量大會對服務器網絡有影響,所以有搞一個實時同步,這樣數據量就會小很多,其實我們知道rsync自身也可以做到同步,要藉助cron才行,這個有缺點就是不是實時的,如果產品要急着上還要等時間,太浪費時間了,所以今天搞了一下rsync+inotify來實現實時同步。
1.圖形服務器(被同步端)
一般服務器都安裝了rsync,如果沒有就安裝一下
- yum install rsync
注:安裝好了,rsync不需要配置
然後來安裝inotify-tools
默認系統是沒有安裝的,好像系統光盤裏也沒有,可以通過這樣來安裝
- wget http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm
- rpm -Uvh epel-release-6-5.noarch.rpm
不同的系統下載對應的版本epel-reslease-*.noarch.rpm
我下載的適應centos6 redhat6都可以用
安裝inotify
- yum install inotify
看看有沒有安裝上
- [root@RedHat-6 ~]# ll /proc/sys/fs/inotify/
- 總用量 0
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_queued_events
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_user_instances
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_user_watches
如果沒有就說明沒有安裝成功。
現在就是實現實時同步的腳本了,哈哈!!(腳本名可以隨便取),我這裏叫inotifyrsync.sh
- #!/bin/bash
- host=192.168.1.220
- src=/data0/p_w_picpath/
- dst=p_w_picpath
- /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
- | while read files;
- do
- /usr/bin/rsync -vzurtopg --progress --delete --password-file=/etc/rsyncd/rsyncd.secrets $src root@$host::$dst >> /var/log/rsync.log 2>&1
- echo "${files} was rsyncd" >> /etc/rsyncd/rsyncd.log 2>&1
- done
這裏說明一下:dst是rsync服務端的模塊名稱。
然後就創建一個密碼文件rsyncd.secrets我的文件都放在/etc/rsyncd目錄下
- mkdir /etc/rsyncd
- touch /etc/rsyncd/rsyncd.secrets
- chmod 600 /etc/rsyncd/rsyncd.secrets
- [root@RedHat-6 rsyncd]# cat /etc/rsyncd/rsyncd.secrets
- 123456 #這裏只需要密碼
注:這裏的rsyncd.secrets密碼文件權限一定要是600不然後面會報錯的。
最後真要把腳本inotifyrsync.sh放到後臺去執行就可以,這樣就配置完了
- /etc/rsyncd/inotifyrsync.sh &
2.同步端
同樣的要確定有沒有安裝rsync,如果安裝了就可以配置了,沒有安裝就像上面說的安裝一下然後配置一下。rsync安裝是沒有配置文件的,需要手動創建。
- mkdir /etc/rsyncd
- touch /etc/rsyncd/rsyncd.conf
- touch /etc/rsyncd/rsyncd.secrets
先把密碼文件配一下(密碼格式爲:用戶名:密碼)
- [root@localhost rsyncd]# cat rsyncd.secrets
- root:123456
現在來配置一下rsync服務rsyncd.conf
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsync.lock
- port = 873
- address = 192.168.1.220
- uid = nobody
- gid = nobody
- use chroot = no
- #read only = yes
- #limit access to private LANS
- max connections = 5
- #strict modes = yes
- transfer logging = yes
- #motd file = /etc/rsyncd/rsyncd.motd
- #log file
- log file = /var/log/rsyncd.log
- log format = %t %a %m %f %b
- syslog facility = local3
- timeout = 300
- [p_w_picpath] #模板名
- path = /data0/p_w_picpath/
- list = false
- ignore errors
- read only = no
- write only = no
- hosts allow = 192.168.1.9
- hosts deny = *
- uid = root
- gid = root
- auth users = root
- secrets file = /etc/rsyncd/rsyncd.secrets
- comment = Rsync Path
- exclude = web/
配置好之後,就可以啓動了
- rsync --daemon --config=/etc/rsyncd/rsyncd.conf
搞好之後,就可以測試一下了,看看你改圖片服務器上面的東西,同步端有沒有什麼變化。
錯誤分析:
1. @ERROR: auth failed on module Path #說明密碼文件權限不正確。