使用場景
成都創(chuàng)新互聯(lián)專注于廣南企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城網(wǎng)站建設(shè)。廣南網(wǎng)站建設(shè)公司,為廣南等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
現(xiàn)有服務(wù)器A和服務(wù)器B,如果服務(wù)器A的指定目錄(例如 /home/paul/rsync/
)中的內(nèi)容發(fā)生變更(增刪改和屬性變更),實時將這些變更同步到服務(wù)器B的目標(biāo)目錄中(例如 /home/paul/rsync/
)。
數(shù)據(jù)鏡像備份工具Rsync
Rsync是一個非??焖俸挽`活的文件復(fù)制工具。它支持本機(jī)或者是和遠(yuǎn)程服務(wù)器間的文件復(fù)制。Rsync使用了delta-transfer算法,它只需要傳送源端和目標(biāo)端的文件差異部分,大大減少了網(wǎng)絡(luò)帶寬的消耗和復(fù)制耗費的時間。Rsync多用于數(shù)據(jù)備份和鏡像。
Rsync使用了快速檢查算法,通過比較文件大小或最后修改時間的變化來判斷文件是否需要同步。
Rsync連接遠(yuǎn)程主機(jī)有兩種方式:使用ssh或rsync daemon。這里使用Rsync方式來實現(xiàn)遠(yuǎn)程文件備份。
Rsync的安裝與操作
安裝Rsync
分別在服務(wù)器A和服務(wù)器B的terminal執(zhí)行:
sudo yum install rsync
安裝完畢后,會發(fā)現(xiàn)rsync的配置文件位于 etc/rsyncd.conf 。該文件使用daemon方式同步時需要使用,此處暫不介紹。
配置服務(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)建測試文件
echo "Hello from Server A" >> /home/paul/rsync/demo.txt
執(zhí)行文件傳送命令
在服務(wù)器A運行:
# (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
會發(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僅是一個文件復(fù)制工具,它無法對源端文件的增刪改操作進(jìn)行監(jiān)聽。在源端做出更改后,需要執(zhí)行rsync命令才能將變更同步到目標(biāo)端。
Rsync在每次同步前需要掃描整個目錄。如果源目錄內(nèi)的文件數(shù)量比較多,掃描可能需要耗費較多的時間。
為了滿足實時監(jiān)聽的要求,我們需要引入另一個工具:inotify。
文件系統(tǒng)事件監(jiān)聽工具inotify
inotify-tools為inotify提供一個簡單接口。它是一個c語言編寫的庫,同時也包含命令行工具。
inotify-tools的詳細(xì)介紹請點擊: https://github.com/rvoicilas/inotify-tools/wiki
inotify-tools的安裝
對于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ù)解析
對于每次觸發(fā)的監(jiān)聽時間,inotifywait會執(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
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。