通過rsync+inotify-tools+ssh實現觸發式遠程即時同步

來源:互聯網
上載者:User

通過rsync+inotify-tools+ssh實現觸發式遠程即時同步 檔案的同步鏡像在很多地方都需要用到,因此rsync這款免費軟體得到了廣泛的應用,包括在Windows平台上,都已經有了支援rsync的“cwRsyncServer”。 但是,我們一般都是通過結合crontab計劃任務來實現檔案同步的,這樣做的缺點是效率低,不能做到即時同步。 現在,在Linux平台下我們可以利用2.6核心的inotify監控檔案系統機制,通過inotify-tools來實現即時同步了。 具體操作如下:  1.安裝所需軟體 目前各大Linux發行版本都已經具有了rsync與inotify-tools的軟體包,推薦通過RPM,yum,apt-get等方式進行安裝。 RHEL: [root@server1 ~]# rpm -ivh rsync-* [root@server1 ~]# rpm -ivh inotify-tools-*  CentOS: [root@server1 ~]# yum install rsync inotify-tools  Ubuntu: [root@server1 ~]# apt-get install rsync inotify-tools  採用源碼方式安裝的步驟如下: [root@server1 ~]# wget ftp://ftp.samba.org/pub/rsync/rsync-3.0.8.tar.gz [root@server1 ~]# tar xzvf rsync-3.0.8.tar.gz [root@server1 ~]# cd rsync-3.0.8 [root@server1 ~]# ./configure [root@server1 ~]# make [root@server1 ~]# make install  [root@server1 ~]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@server1 ~]# tar xzvf inotify-tools-3.14.tar.gz [root@server1 ~]# cd inotify-tools-3.14 [root@server1 ~]# ./configure [root@server1 ~]# make [root@server1 ~]# make install  2.配置ssh key信任 建議通過普通使用者進行操作,理由是通過root操作本身就危險,免密碼登陸的root就更危險了。  在兩台伺服器上建立rsync使用者 [root@server1 ~]# useradd -m rsync [root@server1 ~]# passwd rsync [root@server2 ~]# useradd -m rsync [root@server2 ~]# passwd rsync  [root@server1 ~]# su - rsync [rsync@server1 ~]$ ssh-keygen -t rsa 在提示儲存私密金鑰(key)和公開金鑰(public key)的位置時,使用預設值; 在提示是否需要私密金鑰密碼(passphrase)時,直接敲斷行符號,即不使用私密金鑰密碼。 之後,將產生一對密鑰,id_rsa(私密金鑰檔案)和id_rsa.pub(公開金鑰檔案),儲存在/home/rsync/.ssh/目錄下。  將公開金鑰添加到遠程主機的 authorized_keys 檔案中 將檔案上傳到遠程主機(假設遠程主機IP為192.168.10.4) [rsync@server1 ~]$ scp ~/.ssh/id_rsa.pub rsync@192.168.10.4:/home/rsync/  使用rsync使用者SSH到登陸到遠程主機,並將公開金鑰添加到 authorized_keys 檔案中 [rsync@server2 ~]$ mkdir .ssh [rsync@server2 ~]$ chmod 700 .ssh [rsync@server2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys  重啟SSH服務 [root@server1 ~]# /etc/init.d/sshd restart [root@server2 ~]# /etc/init.d/sshd restart  3.建立inotify_rsync.sh指令碼 [root@server1 ~]# vim inotify_rsync.sh #!/bin/sh SRC=/home/rsync/test DST=rsync@192.168.10.4:/home/rsync/test      /bin/su - rsync /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F do    /usr/bin/rsync -ahqzt --delete $SRC $DST done  相關註解如下: /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src} -m 是保持一直監聽 -r 是遞迴查看目錄 -q 是列印出事件 -e create,move,delete,modify,attrib 是指 “監聽 建立 移動 刪除 寫入 許可權” 事件  /usr/bin/rsync -ahqzt --delete $SRC $DST -a 存檔模式 -h 儲存硬串連 -q 制止非錯誤資訊 -z 壓縮檔資料在傳輸 -t 維護修改時間 -delete 刪除於多餘檔案  要排除同步某個目錄時,為rsync添加--exculde=PATTERN參數,注意,路徑是相對路徑,具體查看man rsync。 要排除某個目錄的事件監聽的處理時,為inotifywait添加--exclude或--excludei參數,具體查看man inotifywait。  inotifywait 命令產生三個傳回值,分別是“日期,時間,檔案” 這3個傳回值會做為參數傳給read,因此指令碼中的“while read D E F” 寫法細化了傳回值。  賦予指令碼可執行許可權 [root@server1 ~]# chmod +x inotify_rsync.sh 執行指令碼 [root@server1 ~]# /root/inotify_rsync.sh & 設定指令碼開機自啟動 [root@server1 ~]# cat "/root/inotify_rsync.sh &" >> /etc/rc.local  4.測試 首先在server1伺服器的/home/rsync/test目錄下建立檔案或目錄,然後再到server2的/home/rsync/test目錄下查看,如果看到就說明成功了。 [rsync@server1 ~]$ cd test [rsync@server1 test]$ touch a.txt 注意:第一次SSH串連的時候可能需要輸入一次密碼,之後就不需要輸入了。  [rsync@server2 ~]$ cd test [rsync@server2 test]$ ls a.txt  看到了a.txt檔案,說明檔案同步已經成功! 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.