linux服务器之间的文件同步(双向同步unison+inotify)
在日常的運(yùn)維工作中,需要保證文件的高可用性,以防單點(diǎn)帶來的文件丟失。 根據(jù)場(chǎng)景不同,一般會(huì)有單向和雙向同步兩種方式。
1、雙向同步:unison+inotify 用于啟動(dòng)切換的場(chǎng)景
2、單向同步:rsync+inotify ?用于手工恢復(fù)的場(chǎng)景
大多數(shù)情況下,都用單向同步即可,如果有問題的話,運(yùn)維認(rèn)為手工恢復(fù)即可; 如果對(duì)恢復(fù)的實(shí)時(shí)性要求不叫高的話,可以用雙向同步,出問題的時(shí)候,讓系統(tǒng)自動(dòng)切換先用起來,然后再人工維護(hù),不影響正常使用。
我們來演示一下雙向同步環(huán)境的搭建和配置。
1 Unison簡(jiǎn)介
Unison是Windows、Linux以及其他Unix平臺(tái)下都可以使用的文件同步工具,它能使兩個(gè)文件夾(本地或網(wǎng)絡(luò)上的)保持內(nèi)容的一致。Unison擁有與其它一些同步工具或文件系統(tǒng)的相同的特性,但也有自身的特點(diǎn):
a.跨平臺(tái)使用;
b.對(duì)內(nèi)核和用戶權(quán)限沒有特別要求;
c.Unison是雙向的,它能自動(dòng)處理兩分拷貝中更新沒有沖突的部分,有沖突的部分將會(huì)顯示出來讓用戶選擇更新策略;
d.只要是能連通的兩臺(tái)主機(jī),就可以運(yùn)行unison,可以直接使用socket連接或安全的ssh連接方式,對(duì)帶寬的要求不高,使用類似rsync的壓縮傳輸協(xié)議。
示例環(huán)境:兩臺(tái)centos7的環(huán)境
vm1 192.168.1.110
vm2 192.168.1.111
2、編譯并安裝Unison
Linux下通過源碼包編譯安裝Unison時(shí),需要用到Objective Caml compiler。
2.1 編譯和安裝ocaml
[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 install2.2 編譯安裝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 install2.3 copy unsion到/usr/local/bin
[root@vm1 unison-2.48.3]# cp unison /usr/local/bin3 配置ssh的無密碼登錄
3.3.1 同步ssh-keygen生成ssh登錄安全密鑰對(duì)(兩臺(tái)機(jī)器上分別執(zhí)行)
ssh-keygen -t rsa一路回車到結(jié)束
這里將生成一對(duì)密鑰,id_rsa(私鑰文件)和id_rsa.pub(公鑰文件),保存在 ~/.ssh/目錄下
3.2 copy公鑰并授權(quán)
將id_rsa.pub(公鑰)文件的內(nèi)容,copy到另外一臺(tái)服務(wù)器的authorized_keys 文件中,完成授權(quán)
# vm1 上執(zhí)行 cat ~/id_rsa.pub # 獲取內(nèi)容,然后copy# vm2 的執(zhí)行黏貼 vi ~/.ssh/authorized_keys# vm2 文件授權(quán) chmod 700 .ssh chmod 600 ~/.ssh/authorized_keys# vm2 重啟SSH服務(wù) [root@vm1 ~]# service sshd restart# vm2 測(cè)試: ssh root@vm1同樣的反向操作,相互授權(quán)一下。
4 設(shè)置同步腳本
示例這里是同步兩臺(tái)機(jī)器的nfs文件夾
vm1 上的腳本(unsion.sh)
#/bin/sh UNISON=`ps -ef |grep -v grep|grep -c inotifywait` if [ ${UNISON} -lt 1 ] thenother_server="192.168.1.110"src1="/home/nfs/"dst2="/home/nfs/"/usr/bin/inotifywait -mrq -e create,delete,delete_self,modify,move $src1 | while read line; do/usr/bin/unison $src1 ssh://$other_server/$dst2echo -n "$line " >> /var/log/inotify.logecho `date | cut -d " " -f1-4` >> /var/log/inotify.logdone fivm2 上的腳本(unsion.sh)
#/bin/sh UNISON=`ps -ef |grep -v grep|grep -c inotifywait` if [ ${UNISON} -lt 1 ] thenother_server="192.168.1.111"src1="/home/nfs/"dst2="/home/nfs/"/usr/bin/inotifywait -mrq -e create,delete,delete_self,modify,move $src1 | while read line; do/usr/bin/unison $src1 ssh://$other_server/$dst2echo -n "$line " >> /var/log/inotify.logecho `date | cut -d " " -f1-4` >> /var/log/inotify.logdone fi然后執(zhí)行兩個(gè)腳本,則實(shí)現(xiàn)雙向同步。
5 定時(shí)檢查同步任務(wù)(以防進(jìn)程死掉)
[unison@localhost ~]# crontab -e # vm1 * * * * * nohup unsion.sh > /dev/null 2>&1 &# vm2 * * * * * nohup unsion.sh > /dev/null 2>&1 &總結(jié)
以上是生活随笔為你收集整理的linux服务器之间的文件同步(双向同步unison+inotify)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flask上传图片解决方案
- 下一篇: linux百度云下载脚本,百度网盘Lin