Linux服務(wù)器間文件實(shí)時(shí)同步的實(shí)現(xiàn)
使用場(chǎng)景
現(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使用了快速檢查算法,通過(guò)比較文件大小或最后修改時(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存在的問(wèn)題
Rsync僅是一個(gè)文件復(fù)制工具,它無(wú)法對(duì)源端文件的增刪改操作進(jìn)行監(jiān)聽(tīng)。在源端做出更改后,需要執(zhí)行rsync命令才能將變更同步到目標(biāo)端。
Rsync在每次同步前需要掃描整個(gè)目錄。如果源目錄內(nèi)的文件數(shù)量比較多,掃描可能需要耗費(fèi)較多的時(shí)間。
為了滿足實(shí)時(shí)監(jiān)聽(tīng)的要求,我們需要引入另一個(gè)工具:inotify。
文件系統(tǒng)事件監(jiān)聽(tīng)工具inotify
inotify-tools為inotify提供一個(gè)簡(jiǎn)單接口。它是一個(gè)c語(yǔ)言編寫(xiě)的庫(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)聽(tīng)
監(jiān)聽(tīng)腳本如下(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īng)狀態(tài),如果不寫(xiě)該參數(shù),inotifywait會(huì)在監(jiān)聽(tīng)到一次事件之后退出。
- -r 遞歸方式監(jiān)聽(tīng)目錄。
- -q 安靜模式,打印輸出較少的內(nèi)容。
- --timefmt 指定時(shí)間的輸出格式。
- --format 指定事件輸出的格式。
- -e 設(shè)置監(jiān)聽(tīng)的事件類(lèi)型。這里監(jiān)聽(tīng)增刪改和metadata的變更。
對(duì)于每次觸發(fā)的監(jiān)聽(tīng)時(shí)間,inotifywait會(huì)執(zhí)行do和done之間的代碼。在這里,我們調(diào)用之前所說(shuō)的rsync命令進(jìn)行文件同步。
監(jiān)聽(tīng)腳本加入crontab
crontab -e * * * * * sh /home/paul/inotifywait-rsync.sh
參考資料
https://rsync.samba.org
https://github.com/rvoicilas/inotify-tools/wiki
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- linux采用scp命令拷貝文件到本地,拷貝本地文件到遠(yuǎn)程服務(wù)器的方法
- Linux服務(wù)器刪除文件夾、刪除文件、解壓命令的方法
- 使用Samba在Linux服務(wù)器上搭建共享文件服務(wù)的方法
- 在Linux服務(wù)器和windows系統(tǒng)之間上傳與下載文件的方法
- python 讀取Linux服務(wù)器上的文件方法
- SSH 上傳文件及文件夾到linux服務(wù)器的方法
- Linux本機(jī)與服務(wù)器文件互傳及Linux服務(wù)器文件上傳下載命令寫(xiě)法
- linux兩臺(tái)服務(wù)器實(shí)現(xiàn)自動(dòng)同步文件
相關(guān)文章
Linux初學(xué)(CnetOS7 Linux)之切換命令模式和圖形模式的方法
本篇文章主要介紹了Linux初學(xué)(CnetOS Linux7)之切換命令模式和圖形模式的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
給Linux定時(shí)備份數(shù)據(jù)庫(kù)的實(shí)現(xiàn)腳本
這篇文章主要介紹了Linux定時(shí)備份數(shù)據(jù)庫(kù)實(shí)現(xiàn)方式,如果你的服務(wù)器數(shù)據(jù)庫(kù)需要實(shí)現(xiàn)每天定時(shí)備份,那么這篇文章會(huì)對(duì)你大有幫助,有需要的朋友可以借鑒參考下2021-09-09
ubuntu中實(shí)現(xiàn)定時(shí)彈窗的提醒腳本
最近的項(xiàng)目是在ubuntu的環(huán)境下工作的,因?yàn)殚L(zhǎng)時(shí)間工作身體不適,所以想寫(xiě)個(gè)腳本定時(shí)提醒自己喝水,伸懶腰,這篇文章記錄了整個(gè)開(kāi)發(fā)的過(guò)程,有需要的朋友們可以來(lái)一起看看。2016-10-10
CentOS 8設(shè)置自動(dòng)更新的完整步驟
這篇文章主要給大家介紹了關(guān)于CentOS 8設(shè)置自動(dòng)更新的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用CentOS 8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
在Ubuntu中實(shí)現(xiàn)人臉識(shí)別登錄的完整步驟
這篇文章主要給大家介紹了關(guān)于在Ubuntu中實(shí)現(xiàn)人臉識(shí)別登錄的完整步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Linux兩臺(tái)服務(wù)器之間復(fù)制文件及免密碼登錄的方法
有時(shí)候搭建集群機(jī)器是,需要在多臺(tái)機(jī)器中間相互拷貝文件,一種方式是同事sftp拷貝到本機(jī),再分別拷貝到其他服務(wù)器上。這里介紹一種直接在兩臺(tái)服務(wù)器之間拷貝文件且去掉繁瑣的登陸操作的方法2017-04-04

