Linux系统间文件双向同步搭建Unison版
一、Unison簡介
Unison是Windows、Linux以及其他Unix平臺下都可以使用的文件同步工具,它能使兩個文件夾(本地或網絡上的)保持內容的一致。Unison擁有與其它一些同步工具或文件系統的相同的特性,但也有自身的特點:
1.跨平臺使用;
2.對內核和用戶權限沒有特別要求;
3.Unison是雙向的,它能自動處理兩分拷貝中更新沒有沖突的部分,有沖突的部分將會顯示出來讓用戶選擇更新策略;
4.只要是能連通的兩臺主機,就可以運行unison,可以直接使用socket連接或安全的ssh連接方式,對帶寬的要求不高,使用類似rsync的壓縮傳輸協議。
環境如下:
vm1 192.168.254.141
vm2 192.168.254.128
二、編譯安裝Unison
Linux下通過源碼包編譯安裝Unison時,需要用到Objective Caml compiler。
通過以下方式安裝
[root@vm1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.0.tar.gz?
[root@vm1 ~]# tar -xzvf ocaml-4.02.0.tar.gz
[root@vm1 ~]# cd ocaml-4.02.0
[root@vm1 ocaml-4.02.0]# ./configure
[root@vm1 ocaml-4.02.0]# make world opt
[root@vm1 ocaml-4.02.0]# make install
編譯安裝Unison
[root@vm1 ~]# wget ftp://133.31.130.35/pub/pkgsrc/distfiles/unison-2.48.3.tar.gz
[root@vm1 ~]# tar -xzvf unison-2.48.3.tar.gz
[root@vm1 ~]# cd unison-2.48.3
[root@vm1 unison-2.48.3]# make UISTYLE=text
[root@vm1 unison-2.48.3]# make install
在執行make install的過程中,可能會出現以下錯誤提示:
mv: cannot stat ‘/root/bin//unison’: No such file or directory
make: [doinstall] Error 1 (ignored)
cp unison /root/bin/
cp: cannot create regular file ‘/root/bin/’: Is a directory
make: *?[doinstall] Error 1
出現錯誤的原因在與Unison默認是將文件Copy到/root/bin目錄,但Linux默認是沒有該目錄的,因此我們需要將生成的可執行文件unison復制到系統的PATH目錄。
[root@vm1 unison-2.48.3]# cp unison /usr/local/bin
將可執行文件unison上傳到遠程主機192.168.254.128
[root@vm1 unison-2.48.3]# scp unison root@192.168.254.128:/root/
通過SSH登陸到遠程主機,再將unison復制到vm2的PATH目錄
[root@vm2 ~]#cp unison /usr/local/bin
三、配置ssh key信任
建議通過普通用戶進行操作,理由是通過root操作本身就危險,免密碼登陸的root就更危險了。
我們使用部署 OA應用程序的用戶即可,如 我們的應用程序放在了 /home/oa/tomcat7/webapps/下面,我們可以使用oa用戶進行登陸
在兩臺服務器上創建oa用戶的命令
[root@vm1 ~]# useradd oa
[root@vm1 ~]# passwd oa
在vm1上創建key并配置vm2的信任
[root@vm1 ~]# su – oa
[oa@vm1 ~]$ ssh-keygen -t rsa
在提示保存私鑰(key)和公鑰(public key)的位置時,使用默認值;
在提示是否需要私鑰密碼(passphrase)時,直接敲回車,即不使用私鑰密碼。
之后,將生成一對密鑰,id_rsa(私鑰文件)和id_rsa.pub(公鑰文件),保存在/home/oa/.ssh/目錄下。
將公鑰添加到vm2的 authorized_keys 文件中
將文件上傳到vm2
[oa@vm1 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.254.128:/home/oa/
使用rsync用戶SSH到登陸到遠程主機,并將公鑰添加到 authorized_keys 文件中
[oa@vm2 ~]$ mkdir .ssh
[oa@vm2 ~]$ chmod 700 .ssh
[oa@vm2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
[oa@vm2 ~]$ chmod 600 ~/.ssh/authorized_keys
同理,執行以下步驟在vm2上創建key并配置vm1的信任
[root@vm2 ~]# su – oa
[oa@vm2 ~]$ ssh-keygen -t rsa
將文件上傳到vm1
[oa@vm2 ~]$ scp ~/.ssh/id_rsa.pub oa@192.168.254.141:/home/oa/
使用rsync用戶SSH到登陸到vm1,并將公鑰添加到 authorized_keys 文件中
[oa@vm1 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys
重啟SSH服務
[root@vm1 ~]# service sshd restart
[root@vm2 ~]# service sshd restart
四、Unison的配置與使用
直接使用已部署好的應用程序目錄進行同步測試,配置前請先對應用程序進行備份。
在實際部署中可先部署將應用程序部署在其中一臺應用服務器上,然后使用同步工具測試時直接進行同步。
在兩臺服務器上分別執行一次unison,如果出現提示確認,則直接敲回車選擇默認值;
如果報錯提示權限問題請使用chown命令、chmod命令進行相應文件、文件夾的屬主及執行權限的變更
[oa@vm1 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.254.128//home/oa/tomcat7/webapps/OA/
[oa@vm2 ~]$ unison -batch /home/oa/tomcat7/webapps/OA/ ssh://oa@192.168.254.141//home/oa/tomcat7/webapps/OA/
如果上述執行順利,說明雙向同步的環境已經搭建起來了,下面就是做一些配置 使文件同步常態化。
修改兩臺服務器的unison配置文件,輸入以下內容
[oa@vm1 ~]$ vi /home/oa/.unison/default.prf
#Unison preferences file
root = /home/oa/tomcat7/webapps/OA/
root = ssh://oa@192.168.254.128//home/oa/tomcat7/webapps/OA/
#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 = /home/oa/.unison/unison.log
?[oa@vm2 ~]$ vi /home/oa/.unison/default.prf
#Unison preferences file
root = /home/oa/test
root = ssh://oa@192.168.254.141//home/oa/tomcat7/webapps/OA/
#force =
#ignore =
batch = true
#repeat = 1
#retry = 3
#iowner = true
#igroup = true
#iperms = -1
#ifastcheck = false
#irsync = false
#isshargs = -C
#ixferbycopying = true
log = true
logfile = /home/oa/.unison/unison.log
相關注解如下:
force表示會以本地所指定文件夾為標準,將該目錄同步到遠端。這里需要注意,如果指定了force參數,那么Unison就變成了單項同步了,也就是說會以force指定的文件夾為準進行同步,類似與rsync。
Unison雙向同步基本原理是:假如有A B兩個文件夾,A文件夾把自己的改動同步到B,B文件夾也把自己的改動同步到A,最后A B兩文件夾的內容相同,是AB文件夾的合集。
Unison雙向同步的一個缺點是,對于一個文件在兩個同步文件夾中都被修改時,unison是不會去同步的,因為unison無法判斷以那個為準。
ignore = Path表示忽略指定目錄,即同步時不同步它。
batch = true,表示全自動模式,接受缺省動作,并執行。
-fastcheck true 表示同步時僅通過文件的創建時間來比較,如果選項為false,Unison則將比較兩地文件的內容。
log = true 表示在終端輸出運行信息。
logfile 指定輸出的log文件。
另外,Unison有很多參數,這里僅介紹常用的幾個,詳細的請參看Unison手冊。
-auto //接受缺省的動作,然后等待用戶確認是否執行。
-batch //batch mode, 全自動模式,接受缺省動作,并執行。
-ignore xxx //增加 xxx 到忽略列表中
-ignorecase [true|false|default] //是否忽略文件名大小寫
-follow xxx //是否支持對符號連接指向內容的同步
owner = true //保持同步過來的文件屬主
group = true //保持同步過來的文件組信息
perms = -1 //保持同步過來的文件讀寫權限
repeat = 1 //間隔1秒后,開始新的一次同步檢查
retry = 3 //失敗重試
sshargs = -C //使用ssh的壓縮傳輸方式
xferbycopying = true”
-immutable xxx //不變目錄,掃描時可以忽略
-silent //安靜模式
-times //同步修改時間
-path xxx 參數 //只同步 -path 參數指定的子目錄以及文件,而非整個目錄,-path 可以多次出現。
PS:Windows下的unison配置文件默認位于C:\Documents and Settings\currentuser.unison目錄,默認的配置文件名是default.prf。
五、測試
在應用服務器vm1、vm2的 /home/oa/tomcat7/webapps/OA/目錄中 新建一個文件
[oa@vm1 OA]# touch app1.txt
[oa@vm1 OA]# touch app2.txt
在vm1上執行unison
[oa@vm1 OA]# unison
在vm1與vm2上查看文件是否同步
[oa@vm1 ~]$ cd ./tomcat7/webapps/OA
[oa@vm1 OA]$ ls
app1.txt app2.txt
[oa@vm2 ~]\$ cd ./tomcat7/webapps/OA
[oa@vm2 OA]\$ ls
app1.txt app2.txt
均看到了“app1.txt app2.txtt”所有文件,說明文件同步已經成功!
注意:第一次SSH連接的時候可能需要輸入一次密碼,之后就不需要輸入了。
六、定期或實時執行同步
如果想要定期執行,則通過crontab計劃任務來實現,例如通過以下方式設置每5分鐘執行一次
[root@vm1 ~]# su - oa
[oa@vm1 ~]$ crontab -e
*/5 * * * * /usr/local/bin/unison
使計劃任務生效 需要重啟 crond服務
[root@vm1 ~]# service crond restart
本幫助文檔改編自http://hx100.blog.51cto.com/44326/612301/
?
總結
以上是生活随笔為你收集整理的Linux系统间文件双向同步搭建Unison版的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串计算加减乘除代码_Py
- 下一篇: python实现守护进程_守护进程原理及