Linux服務(wù)器間文件實(shí)時(shí)同步的實(shí)現(xiàn)

發(fā)布時(shí)間:2024-02-04
現(xiàn)有服務(wù)器a和服務(wù)器b,如果服務(wù)器a的指定目錄(例如 /home/paul/rsync/ )中的內(nèi)容發(fā)生變更(增刪改和屬性變更),實(shí)時(shí)將這些變更同步到服務(wù)器b的目標(biāo)目錄中(例如 /home/paul/rsync/ )。
數(shù)據(jù)鏡像備份工具rsync
rsync是一個(gè)非??焖俸挽`活的文件復(fù)制工具。它支持本機(jī)或者是和遠(yuǎn)程服務(wù)器間的文件復(fù)制。rsync使用了delta-transfer算法,它只需要傳送源端和目標(biāo)端的文件差異部分,大大減少了網(wǎng)絡(luò)帶寬的消耗和復(fù)制耗費(fèi)的時(shí)間。rsync多用于數(shù)據(jù)備份和鏡像。
rsync使用了快速檢查算法,通過比較文件大小或最后修改時(shí)間的變化來(lái)判斷文件是否需要同步。
rsync連接遠(yuǎn)程主機(jī)有兩種方式:使用ssh或rsync daemon。這里使用rsync方式來(lái)實(shí)現(xiàn)遠(yuǎn)程文件備份。
rsync的安裝與操作
安裝rsync
分別在服務(wù)器a和服務(wù)器b的terminal執(zhí)行:
sudo yum install rsync安裝完畢后,會(huì)發(fā)現(xiàn)rsync的配置文件位于 etc/rsyncd.conf 。該文件使用daemon方式同步時(shí)需要使用,此處暫不介紹。
配置服務(wù)器a和b之間的免密登錄
服務(wù)器a執(zhí)行:
ssh-keygen ssh-copy-id 服務(wù)器b的ip地址創(chuàng)建源端目錄和目標(biāo)端目錄
在服務(wù)器a中:
mkdir /home/paul/rsync在服務(wù)器b中:
mkdir /home/paul/rsync在服務(wù)器a創(chuàng)建測(cè)試文件
echo hello from server a >> /home/paul/rsync/demo.txt 執(zhí)行文件傳送命令
在服務(wù)器a運(yùn)行:
# (1) rsync -avpz --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync # (2) rsync -avpz --delete --progress /home/paul/rsync 192.168.100.130:/home.paul/rsync會(huì)發(fā)現(xiàn)在demo.txt也出現(xiàn)在了服務(wù)器b中/home/paul/rsync目錄。
命令解析:
(1) 將服務(wù)器a中的/home/paul/rsync目錄內(nèi)的文件復(fù)制到服務(wù)器b(192.168.100.130)的/home.paul/rsync中。
(2) 比較目標(biāo)端和源端的文件,如果目標(biāo)端的文件在源端不存在,在目標(biāo)端刪除該文件。
rsync存在的問題
rsync僅是一個(gè)文件復(fù)制工具,它無(wú)法對(duì)源端文件的增刪改操作進(jìn)行監(jiān)聽。在源端做出更改后,需要執(zhí)行rsync命令才能將變更同步到目標(biāo)端。
rsync在每次同步前需要掃描整個(gè)目錄。如果源目錄內(nèi)的文件數(shù)量比較多,掃描可能需要耗費(fèi)較多的時(shí)間。
為了滿足實(shí)時(shí)監(jiān)聽的要求,我們需要引入另一個(gè)工具:inotify。
文件系統(tǒng)事件監(jiān)聽工具inotify
inotify-tools為inotify提供一個(gè)簡(jiǎn)單接口。它是一個(gè)c語(yǔ)言編寫的庫(kù),同時(shí)也包含命令行工具。
inotify-tools的詳細(xì)介紹請(qǐng)點(diǎn)擊: https://github.com/rvoicilas/inotify-tools/wiki
inotify-tools的安裝
對(duì)于centos7系統(tǒng),依次執(zhí)行:
yum install -y epel-release yum --enablerepo=epel install inotify-tools使用inotifywait命令進(jìn)行事件監(jiān)聽
監(jiān)聽腳本如下(inotifywait-rsync.sh):
inotifywait -mrq --timefmt '%d/%m/%y %h:%m' --format '%t %w%f' -e modify,delete,create,attrib /home/paul/rsync/ | while read file do rsync -avpz --progress /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/ rsync -avpz --delete /home/paul/rsync/ 192.168.100.130:/home/paul/rsync/ echo ${file} was synchronized done參數(shù)解析
-m 保持持續(xù)監(jiān)聽狀態(tài),如果不寫該參數(shù),inotifywait會(huì)在監(jiān)聽到一次事件之后退出。-r 遞歸方式監(jiān)聽目錄。-q 安靜模式,打印輸出較少的內(nèi)容。–timefmt 指定時(shí)間的輸出格式。–format 指定事件輸出的格式。-e 設(shè)置監(jiān)聽的事件類型。這里監(jiān)聽增刪改和metadata的變更。對(duì)于每次觸發(fā)的監(jiān)聽時(shí)間,inotifywait會(huì)執(zhí)行do和done之間的代碼。在這里,我們調(diào)用之前所說的rsync命令進(jìn)行文件同步。
監(jiān)聽腳本加入crontab
crontab -e * * * * * sh /home/paul/inotifywait-rsync.sh參考資料
https://rsync.samba.org
https://github.com/rvoicilas/inotify-tools/wiki
上一個(gè):收購(gòu)必須需在上市公司之間嗎
下一個(gè):蘋果電腦可以安雙系統(tǒng)嗎(蘋果電腦可以做兩個(gè)系統(tǒng)嗎)

黑茶 老粗茶里的保健養(yǎng)生功效
不銹鋼電加熱器的應(yīng)用范圍
桑樹種植技術(shù)
室內(nèi)標(biāo)高和幾何尺寸的監(jiān)理驗(yàn)收措施有哪些?
從三個(gè)方面辨別普洱茶干倉(cāng)熟茶?
印刷電路板的設(shè)計(jì)與制作
【蕪湖seo】seo優(yōu)化中需要注意什么
香櫞栽培技術(shù)
樂視s1怎么弄會(huì)員,樂視手機(jī)怎樣領(lǐng)取會(huì)員
西門子PLC功能圖的畫法
十八禁 网站在线观看免费视频_2020av天堂网_一 级 黄 色 片免费网站_绝顶高潮合集Videos