日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux unison 效率,linux inotify+unison双向同步环境部署

發布時間:2023/12/18 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux unison 效率,linux inotify+unison双向同步环境部署 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近做的一個項目,項目上線 ,代碼部署在,做了LVS負載均衡的兩臺web服務器,那么問題來了,怎么樣保證兩臺服務器的代碼文件和資源文件實時同步呢?

在liux下做文件同步,通常有如下幾種方式:

1、nfs實現web數據共享

nfs能實現數據同步是通過NAS(網絡附加存儲),在服務器上共享一個文件,且服務器需要設置文件系統的權限和配置文件設置的權限,權限兩者之間取交集,然后客戶端把共享的文件掛載到本地,客戶端對文件有讀寫權限,則實現數據的同步,nfs-utils提供nfs服務.

2、rsync +inotify實現web數據同步

可以鏡像保存整個目錄樹和文件系統

可以同步增量同步數據,文件傳輸效率高,因而同步時間很短

可以保持原有文件的權限、時間等屬性

加密傳輸數據,保證了數據的安全性

支持匿名傳輸

rsync也能實現同步,但是需要自己手動的去同步數據,當數據量非常的頻繁時,無疑是加大了運維人員的工作,inotify是一種強大的、細粒度的、異步的文件系統事件監控機制,inotify-tools工具的出現,解決了這種工作,安裝inotify軟件的主機會監聽服務器端的主機是否數據和本機不一樣,(因為在上傳數據時,運維人員先上傳到安裝inotify主機上),不一樣就用rsync命令直接把數據傳輸過去。客戶端安裝rsync軟件是為了調用rsync的命令,安裝inotify軟件是監聽和數據是否發生改變,服務器端安裝rsync軟件時為了提供rsync服務。

3、rsync+sersync更快更節約資源實現web數據同步

sersync是使用c++編寫,而且對linux系統文件系統產生的臨時文件和重復的文件操作進行過濾,所以在結合rsync同步的時候,節省了運行時耗和網絡資源。因此更快。

sersync配置起來很簡單,其中bin目錄下已經有基本上靜態編譯的2進制文件,配合bin目錄下的xml配置文件直接使用即可。

sersync使用多線程進行同步,尤其在同步較大文件時,能夠保證多個服務器實時保持同步狀態。

sersync有出錯處理機制,通過失敗隊列對出錯的文件重新同步,如果仍舊失敗,則按設定時長對同步失敗的文件重新同步。

sersync自帶crontab功能,只需在xml配置文件中開啟,即可按您的要求,隔一段時間整體同步一次。無需再額外配置crontab功能。

4、unison+inotify實現web數據雙向同步

Unison是一款跨平臺的文件同步對象,不僅支撐本地對本地同步,也支撐經由過程SSH、RSH和Socket等收集和談進行同步。Unison支撐雙向同步操縱,你既可以從A同步到B,也可以從B同步到A,這些都不須要額外的設定

只有第四種方案支持雙向實時同步,且當其中一臺服務器宕機,也不會影響web的訪問。

環境部署,有如下兩臺服務器需要做雙向同步:

192.168.10.1是server1

192.168.10.2是server2

第一步,配置ssh key信任,保證兩臺服務器之間可以通過ssh無密碼訪問

在server1上創建key并配置server2的信任

ssh-keygen -t rsa

在提示保存私鑰(key)和公鑰(public key)的位置時,使用默認值;

在提示是否需要私鑰密碼(passphrase)時,直接敲回車,即不使用私鑰密碼。

之后,將生成一對密鑰,id_rsa(私鑰文件)和id_rsa.pub(公鑰文件),保存在/root/.ssh/目錄下

cd ~/.ssh

ssh "-p 22" 192.168.10.1 cat /root/.ssh/id_rsa.pub >> authorized_keys

ssh "-p 22" 192.168.10.2 cat /root/.ssh/id_rsa.pub >> authorized_keys

scp ?-P 22 authorized_keys 192.168.10.2:/root/.ssh/

#分別在server1和server2上操作.

chmod 600 /root/.ssh/authorized_keys

#重啟sshd服務

service sshd restart #server1

service sshd restart #server2

分別在兩臺機器上執行如下測試

ssh -p 22 192.168.10.1 date

ssh -p 22 192.168.10.2 date

第一次驗證需要輸入登陸用戶官,如果接著看到直接輸出系統時間,至此用戶授權完成.

第二,兩個服務器都編譯安裝這三個源碼包

安裝ocaml,版本至少為3.07或更高 下載地址:http://caml.inria.fr/pub/distrib/ocaml-3.10/

tar xf ocaml-3.10.2.tar.gz

cd ocaml-3.10.2

./configure

make world opt

make install

cd ..

安裝unison

下載地址:http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.13.16/

tar xvf unison-2.13.16.tar.gz

cd unison-2.13.16

make UISTYLE=text THREADS=true STATIC=true

cp unison /usr/local/bin

cd ..

#UISTYLE=text THREADS=true STATIC=true表示使用命令行方式,加入線程支持以靜態模式編譯

如果出現類似/usr/bin/ld: cannot find -lxxx ?報錯提示. 你得先安裝擴展:

yum install glibc-static

安裝inotify 下載地址:http://inotify-tools.sourceforge.net

tar xvf inotify-tools-3.14.tar.gz

cd inotify-tools-3.14

./configure

make

make install

cd ..

到此所需的軟件都已安裝完畢,可以在server1服務器上執行這個命令,來查看兩臺服務器之間是否可以同步文件,unison -batch /home/server1/ ssh://192.168.10.2//home/server2

touch a.log /home/server1/

第三步,創建.sh腳本來執行同步

1)server1上創建腳本/root/inotify.sh(chmod a+x /root/inotify.sh):

#/bin/bash

ip2="192.168.10.2"

src2="/home/server1/"

dst2="/home/server2/"

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

/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2

echo -n "$line " >> /var/log/inotify.log

echo `date | cut -d " " -f1-4` >> /var/log/inotify.log

done

1)server2上創建腳本/root/inotify.sh(chmod a+x /root/inotify.sh):

#/bin/bash

ip1="192.168.10.1"

src1="/home/server2/"

dst1="/home/server1/"

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

/usr/local/bin/unison -batch $src1 ssh://$ip1/$dst1

echo -n "$line " >> /var/log/inotify.log

echo `date | cut -d " " -f1-4` >> /var/log/inotify.log

done

分別在后臺進行監聽執行,進行實時同步處理.

nohup /root/inotify.sh &

ps -ef | grep inofity

如果能打印到inotify進程. 至此,雙向實時同步工作完成.

相關注解如下:

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:unison配置文件默認位于當前用戶下的.unison目錄,默認的配置文件名是default.prf。

最 近做的一個項目,項目上線 ,代碼部署在,做了LVS負載均衡的兩臺web服務器,那么問題來了,怎么樣保證兩臺服務器的代碼文件和資源文件實時同步呢?

總結

以上是生活随笔為你收集整理的Linux unison 效率,linux inotify+unison双向同步环境部署的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。