安裝Rsync

分別在服務器A和服務器B的terminal執行:

sudo yum install rsync

安裝完畢后,會發現rsync的配置文件位于 etc/rsyncd.conf 。該文件使用daemon方式同步時需要使用,此處暫不介紹。

配置服務器A和B之間的免密登錄

服務器A執行:

ssh-keygen
ssh-copy-id 服務器B的IP地址

創建源端目錄和目標端目錄

在服務器A中:

mkdir /home/paul/rsync

在服務器B中:

mkdir /home/paul/rsync

在服務器A創建測試文件

echo "Hello from Server A" >> /home/paul/rsync/demo.txt

執行文件傳送命令

在服務器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

會發現在demo.txt也出現在了服務器B中/home/paul/rsync目錄。

命令解析:

(1) 將服務器A中的/home/paul/rsync目錄內的文件復制到服務器B(192.168.100.130)的/home.paul/rsync中。

(2) 比較目標端和源端的文件,如果目標端的文件在源端不存在,在目標端刪除該文件。

Rsync存在的問題

Rsync僅是一個文件復制工具,它無法對源端文件的增刪改操作進行監聽。在源端做出更改后,需要執行rsync命令才能將變更同步到目標端。

Rsync在每次同步前需要掃描整個目錄。如果源目錄內的文件數量比較多,掃描可能需要耗費較多的時間。
為了滿足實時監聽的要求,我們需要引入另一個工具:inotify。

文件系統事件監聽工具inotify

inotify-tools為inotify提供一個簡單接口。它是一個c語言編寫的庫,同時也包含命令行工具。

inotify-tools的詳細介紹請點擊: https://github.com/rvoicilas/inotify-tools/wiki

inotify-tools的安裝

對于centos7系統,依次執行:

yum install -y epel-release
yum --enablerepo=epel install inotify-tools

使用inotifywait命令進行事件監聽

監聽腳本如下(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

參數解析

對于每次觸發的監聽時間,inotifywait會執行do和done之間的代碼。在這里,我們調用之前所說的rsync命令進行文件同步。

監聽腳本加入crontab

crontab -e
* * * * * sh /home/paul/inotifywait-rsync.sh

參考資料

https://rsync.samba.org

https://github.com/rvoicilas/inotify-tools/wiki

贊(0)
聲明:本網站發布的內容(圖片、視頻和文字)以原創、轉載和分享網絡內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。郵箱:3140448839@qq.com。本站原創內容未經允許不得轉載,或轉載時需注明出處:三五互聯知識庫 » Linux服務器間文件實時同步的實現

登錄

找回密碼

注冊