unison+inotify的Web目錄同步方案
阿新 • • 發佈:2018-12-17
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/目錄中新增,或修改,或刪除檔案的時候,可以看到指令碼狀態,同時另一臺伺服器也應該會跟隨操作。