unison+inotify的Web目錄同步方案
1、在Linux下做WEB目錄檔案同步
一般有如下幾種方式:
-----------------------------------------------
1) nfs實現web資料共享
2) rsync +inotify實現web資料同步
3) rsync+sersync更快更節約資源實現web資料同步
4) unison+inotify實現web資料雙向同步
--------------------------------------------------
- 他們各有優缺點,這裡我根據實際情況,選擇方案4。
------------------------------------------------
2、Unison簡介
Unison是windows和unix平臺下都可以使用的檔案同步工具,它能使兩個資料夾(本地或網路上的)保持內容的一致。Unison擁有其它一些同步工具或檔案系統的相同特性,但也有自己的特點:跨平臺使用;對核心和使用者許可權沒有特別要求;Unison是雙向的,它能自動處理兩分拷貝中更新沒有衝突的部分,有衝突的部分將會顯示出來讓使用者選擇更新策略;只要是能連通的兩臺主機,就可以執行Unison,可以直接使用socket連線或安全的ssh連線方式,對頻寬的要求不高,使用類似rsync的壓縮傳輸協議。
3、 環境準備如下:
4、安裝ocaml
下載:
wget http://caml.inria.fr/pub/distrib/ocaml-4.00/ocaml-4.00.1.tar.gz
解壓、安裝:
# tar -zxvf ocaml-4.00.1.tar.gz # cd ocaml-4.00.1 # ./configure # make world opt # make install
- 注意:請下載此版本的ocaml,高版本安裝時可能會出錯。
5、安裝unison
# 缺少此安裝包時下面make步驟會報錯
# yum -y install ctags-etags # wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz # mkdir unison-2.48.4 && cd unison-2.48.4 # tar -zxvf /root/unison-2.48.4.tar.gz # cd src # make UISTYLE=text THREADS=true # cp unison /usr/local/bin/ # unison -version# 有版本資訊出現,則安裝成功
6、安裝inotify
下載連結:http://mirrors.aliyun.com/repo/epel-6.repo
- 以上安裝操作兩臺機器都需要操作!
- 到此需要的軟體就安裝完成了!
7、配置雙機ssh信任
在web1上生成金鑰,不輸入私鑰密碼:
步驟如下:
[root@web1 ]# ssh-keygen ----- 資訊省略,回車三下 --------
[root@ web1 ]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys [root@ web1 ]# chmod 700 ~/.ssh [root@ web1 ]# chmod 600 ~/.ssh/authorized_keys [root@ web1 ]# rsync -avz /root/.ssh/authorized_keys [root@ web1 ]# rsync -avz /root/.ssh/authorized_keys [email protected]:/root/.ssh/authorized_keys
- web2同理!
8、配置雙機web目錄同步
8.1、Web1上操作:
[root@web1 ]# mkdir -p /root/.unison/ [root@web1 ]# vim /root/.unison/default.prf
---------------- 配置資訊如下 ------------------ #Unison preferences file root = /opt/html/ root = ssh://[email protected]/ /opt/html/ #force = #ignore = batch = true maxthreads = 300 #repeat = 1 #retry = 3 owner = true group = true perms = -1 fastcheck = false rsync = false sshargs = -C xferbycopying = true log = true logfile = /root/.unison/unison.log ----------------------------------------
8.2、Web2上操作:
[root@web2 ]# mkdir -p /root/.unison/ [root@web2 ]# vim /root/.unison/default.prf
---------------- 配置資訊如下 ------------------ #Unison preferences file root = /opt/html/ root = ssh://[email protected]/ /opt/html/ #force = #ignore = batch = true maxthreads = 300 #repeat = 1 #retry = 3 owner = true group = true perms = -1 fastcheck = false rsync = false sshargs = -C xferbycopying = true log = true logfile = /root/.unison/unison.log ----------------------------------------
9、在兩臺機器都新增如下指令碼,並使用nohup方式執行。
[root@web1 ~]# mkdir /script [root@web1 ~]# vim /script/inotify.sh
------------- 指令碼資訊如下 ------------- #/bin/bash src="/opt/html/" /usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do /usr/local/bin/unison echo -n "$(date +%F-%T) $line" >> /var/log/inotify.log done --------------------------------------------------------------------------
10、兩臺機器都需要建立日誌目錄
- 如果/var/log/inotify目錄沒有則需要手工建立,用來存放inotify的日誌;
[root@web1 ]# mkdir /var/log/inotify
11、兩臺機器都需要新增定時任務
[root@web1 ~]# crontab -e
--------- 計劃任務如下 ---------- * * * * *nohup/script/inotify.sh
- 實時使用nohup執行此指令碼,實現實時同步資料
12、最後測試
- 重啟電腦,測試二臺伺服器中/opt/http/的內容是否能同步
- 不重啟電腦,手動執行指令碼也可以測試
- /bin/bash /script/inotify.sh或/script/inotify.sh
- 在其中一臺/opt/http/目錄中新增,或修改,或刪除檔案的時候,可以看到指令碼狀態,同時另一臺伺服器也應該會跟隨操作。