1. 程式人生 > >unison+inotify的Web目錄同步方案

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上生成金鑰,不輸入私鑰密碼:

步驟如下:

[[email protected] ]# ssh-keygen----- 資訊省略,回車三下 --------
[[email protected] web1 ]# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
[[email protected] web1 ]# chmod 700 ~/.ssh
[[email protected] web1 ]# chmod 600 ~/.ssh/authorized_keys
[[email protected] web1 ]# rsync -avz /root/.ssh/authorized_keys
[[email protected] web1 ]# rsync -avz /root/.ssh/authorized_keys [email protected]192.168.239.62:/root/.ssh/authorized_keys
  • web2同理!

8、配置雙機web目錄同步

8.1、Web1上操作:

[[email protected] ]# mkdir -p /root/.unison/
[[email protected] ]# 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上操作:

[[email protected] ]# mkdir -p /root/.unison/
[[email protected] ]# 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方式執行。

[[email protected] ~]# mkdir /script
[[email protected] ~]# 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的日誌;
[[email protected] ]# mkdir /var/log/inotify

11、兩臺機器都需要新增定時任務

[[email protected] ~]# crontab -e
--------- 計劃任務如下 ----------

* * * * *  nohup  /script/inotify.sh
  •  實時使用nohup執行此指令碼,實現實時同步資料

12、最後測試

  • 重啟電腦,測試二臺伺服器中/opt/http/的內容是否能同步
  • 不重啟電腦,手動執行指令碼也可以測試
  • /bin/bash /script/inotify.sh或/script/inotify.sh
  • 在其中一臺/opt/http/目錄中新增,或修改,或刪除檔案的時候,可以看到指令碼狀態,同時另一臺伺服器也應該會跟隨操作。