UNISON+inotify數據的雙向實時同步

UNISON安裝部署手冊vim

操做系統:SUSE12bash

安裝包:inotify-tools-3.13.tar.gz  ocaml-4.02.0.tar.gz   unison-2.48.4.tar.gzssh

主機:FH-UMP-PORTAL1  192.168.1.181 測試

  FH-UMP-PORTAL2  192.168.1.182spa

登陸用戶/密碼:root/123456操作系統

配置文件:/root/.unison/default.prfrest

 

Unison雙向同步基本原理是:假若有A B兩個文件夾,A文件夾把本身的改動同步到B,B文件夾也把本身的改動同步到A,最後A B兩文件夾的內容相同,是AB文件夾的合集。
Unison雙向同步的一個缺點是,對於一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,由於unison沒法判斷以那個爲準。

blog

1、安裝前的準備crontab

1. 查看空間大小ip

# df -h

2. 建立目錄

#mkdir /opt/unison

3. 上傳安裝包到指定目錄

 

2、解壓及安裝

4. 解壓、編譯、安裝

(1) 對於ocaml-4.02.0.tar.gz(Linux下經過源碼包編譯安裝Unison時,須要用到Objective Caml compiler)

解壓:#tar zxfv ocaml-4.02.0.tar.gz

進入解壓目錄:#cd ocaml-4.02.0

配置:#./configure

編譯:#make world opt

安裝:#make install

(2) 安裝unison-2.48.4.tar.gz

解壓:#tar zxvf unison-2.48.4.tar.gz

         

 

進入解壓目錄:#cd src/

編譯:#make UISTYLE=text

安裝:#make install

5. 有安裝信息說明安裝成功

       

 

 

3、配置雙機ssh 信任 (免密登陸)

6. 在FH-UMP-PORTAL1上建立key並配置PORTAL2的信任

(1) 獲取密鑰對

# ssh-keygen -t rsa

 

 

(2)將公鑰添加到authorized_keys文件中,並修改權限

 

 

(3)使用rsync 遠程同步將密鑰傳到PORTAL2

 

 

 

7. 一樣的,在FH-UMP-PORTAL2上建立key並配置PORTAL1的信任

#ssh-keygen -t rsa

#cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

#chmod 700 ~/.ssh/

#chmod 600 ~/.ssh/authorized_keys

#rsync -avz /root/.ssh/authorized_keys root@192.168.1.181:/root/.ssh/authorized_keys

 

注:配置結束後,在兩臺機器上分別ssh對方IP,能無密碼登陸則表示配置成功。

如:

    

 

 

4、Unison的配置與使用

8. Unison的使用方法

     

 

(1) 本地使用
使用方法:
#unison  111 222  #同步本地的111和222文件夾

(2) unison遠程使用
使用方法:
# unison <本地目錄> ssh://remotehostname(IP)/<遠程目錄的絕對路徑>
例如:
# unison /home/AAA ssh://username@remotehostname(ip)//DB/path/BBB
表示將本機的目錄/home/AAA和遠端主機的/DB/path/BBB進行同步。通常的,須要兩臺機能ssh鏈接。
注意: 在主機和目錄間又多加了一個 "/"

 

9. Unison的相關配置

修改unison配置文檔(以共享/opt目錄爲例):

#cd /root/.unison

#vim default.prf

 # Unison preferences file

root = /opt

root = ssh://192.168.1.182//opt

#force =

#ignore =

batch = true

#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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

PORTAL2:

#vim /root/.unison/default.prf

# Unison preferences file

root = /opt

root = ssh://192.168.1.181//opt

#force =

#ignore =

batch = true

#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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相關注解以下:
1.兩個root表示須要同步的文件夾。

2.force表示以本地的文件夾爲標準,將該目錄同步到遠端,開啓後則變成單項同步

3.ignore = Path表示忽略某個目錄,即同步時不一樣步它。

4. batch=true 表示全自動模式,接受並執行默認動做

5.log = true表示在終端輸出運行信息。

6.logfile則指定了同時將輸出寫入log文件。

7.owner = true //保持同步過來的文件屬主 

8.group = true //保持同步過來的文件組信息 

9.perms = -1 //保持同步過來的文件讀寫權限 

10.repeat = 1 //間隔1秒後,開始新的一次同步檢查 

11.retry = 3 //失敗重試 

12.sshargs = -C //使用ssh的壓縮傳輸方式 

fastcheck true 表示同步時僅經過文件的建立時間來比較,若是選項爲false,Unison則將比較兩地文件的內容。 

auto //接受缺省的動做,而後等待用戶確認是否執行。 

ignore xxx //增長 xxx 到忽略列表中  :經測試此參數不能用。

ignorecase [true|false|default] //是否忽略文件名大小寫 

follow xxx //是否支持對符號鏈接指向內容的同步 

xferbycopying = true

immutable xxx //不變目錄,掃描時能夠忽略 

silent //安靜模式 

times=true //同步修改時間 

path xxx 參數 //只同步 -path 參數指定的子目錄以及文件,而非整個目錄,-path 能夠屢次出現。

confirmbigdel=false//默認值爲true,表示當須要同步的兩個目錄一個爲空時,unison將中止,這裏設置爲false,即使爲空unison也不會中止運轉

 

10. 測試(手動推)

(對於unison),在PORTAl1中有變化,則執行unison後PORTAL2就會發生對應的變化,例如:PORTAL1:

#mkdir /opt/dir1

#ll

   

 

 

 

 

 

 

而此時的PORTAL2是沒有dir1文件的

執行命令同步:

PORTAL1:

#unison

 

 

PORTAL2:

#ll

 

 

    

 

 

 

 

 

則會出現dir1文件,說明同步成功。

 

注:unison只會同步變更的一方,因此在生產環境中不能輕易改動PORTAL2中的內容。

PORTAl2只在PORTAL1出故障的時候啓用,因此必須保證同步是正確的,且及時。

 

5、定時或按期執行同步

若是想要按期執行,則經過crontab計劃任務來實現,例如經過如下方式設置每5分鐘執行一次。

#crontab -e

* * * * * /usr/local/bin/unison
使計劃任務生效 須要重啓 crond服務
[root@vm1 ~]# service crond restart


6、安裝inotify實時監控

11. 查看系統是否支持inotify

    

 

說明支持。

12. 安裝inotify

#cd /opt

#tar zxvf inotify-tools-3.13.tar.gz

#cd inotify-tools-3.13/

#./configure

#make && make install

13. 編寫inotify實時監控腳本

#cd /tmp

#cd ..

#vim inotify.sh

#!/bin/bash

UNISON=`ps -ef |grep -v grep|grep -c inotifywait`

if [ ${UNISON} -lt 1 ]

then

        user2="unison"

        ip2="FH-UMP-PORTAL2"

        src2="/opt"

        dst2="/opt"

        /usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src1 | while read line

        do

                #/root/bin/unison -batch $src2 ssh://$user2@$ip2//$dst2

                /root/bin/unison

                echo -n "$line " >> /opt/inotify/inotify$(date +%u).log

                echo ` date +%F %T " " -f1-4` >> /opt/inotify/inotify$(date +%u).log

        done

fi

 

 

#chmod +x inotify.sh

相關文章
相關標籤/搜索