rsync 加 inotify 實現無縫資料同步

來源:互聯網
上載者:User

標籤:服務端   用戶端   特徵碼   軟體   加密   

rsync 是遠程差異同步資料的工具,把一份資料複製到另一台機器上。它的同步特性是,在整個檔案域中,根據rsync演算法計算檔案的特徵碼,只同步有改變的檔案,但在同步整個域的時候,會計算整個域中所有檔案的特徵,這樣使得在檔案資料過多情況下計算檔案特性就花費了很多時間。如果不藉助其它軟體,rsync無法做到真正的即時同步資料。rsync可以對目錄或整個檔案系統做同步,可能藉助ssh加密後安全傳輸,因為只同步差異資料,所以效率較高,還支援匿名傳輸等特性。rsync分為服務端和用戶端,做為服務端隨時等待用戶端推送或拉取資料。rsync做為服務端時依賴超級守護進程xinetd為其監聽tcp873連接埠。所以xinetd一定安裝。

如果系統沒有安裝rsync,到http://rsync.samba.org/ 下載源碼編譯,或使用 yum -y install rsync 安裝。

rsync 用戶端使用的rsync命令使用

    文法格式

         拉取檔案: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]

                         rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]

         推送檔案: rsync [OPTION...] SRC... [[email protected]]HOST::DEST

                         rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST

        常用選項

            -n: 測試同步,只做測試不真正同步資料。

            -v:顯示同步過程

            -c:開啟校正功能

            -r:遞迴複製(如果同步目錄,在目錄後面不要寫/。如果寫/表示同步目錄下的檔案)

            -a:歸檔同步,資料同步後會保留檔案的原有屬性

            -p:保留檔案的所有許可權

            -t:保留檔案的時間戳記

            -l:保留符號串連

            -o:保留檔案的屬主

            -g:保留檔案的屬組

            -D:保留裝置檔案

            -e ssh :指定使用ssh協議做承載加密傳輸

            -z : 傳輸時壓縮資料轉送

            --progress : 顯示傳輸進度條

            --stats :顯示如何壓縮傳輸資料。

            --delete : 刪除多於檔案

            -q : 制止錯誤資訊

rsync 伺服器端設定檔 /etc/rsyncd.conf  。 分為兩部分,第一段定義rsync做為服務啟動並執行特性。第二部分定義rsync模組的特性,模組就是定義本地使用那個路徑做為儲存目錄,和此模組的工作特性。此檔案預設系統沒有提供,需要手動建立。

   # Global Settings   全域定義段,只能有一個。

   uid = nobody            進程以那個使用者身份運行

   gid = nobody            進程啟動並執行使用者組

   use chroot = no         運行rsync時是否支援chroot功能

   max connections = 5  最多允許多少個用戶端同時請求

   strict modes = yes          是否啟用strict 模式

   pid file = /var/run/rsyncd.pid    進程id檔案的位置

   log file = /var/log/rsyncd.log    記錄檔的位置

   # Directory to be synced     用來定義同步的目錄 ,可以有多個。

   [tools]

   path = /data                儲存同步的資料位元置

   ignore errors = yes      傳輸資料時是否忽略錯誤

   read only = no            是否為唯讀

   write only = no            是否為唯寫,如果唯寫別人不能看

   hosts allow = 172.16.0.0/16            定義用戶端的白名單

   hosts deny = *             定義預設不允許訪問原生用戶端,*表示全部。

   list = false                    是允許例出檔案,如果允許,值為ture

   uid = root                    指定此共用使用那個使用者身份運行

   gid = root                    指定此共用使用那個使用者組身份運行

   auth users = USER1, USER2   指定可以通過rsync同步的使用者

   secrets file = /etc/rsyncd.passwd      指定驗證使用者的檔案

啟動服務時需要修改設定檔,讓xinetd啟動時為其監聽服務。檔案在/etc/xinetd.d/rsync

    service rsync

    {

        disable = no     把此項的yes改為no

        flags = IPv6

        socket_type = stream

        wait = no

        user = root

        server = /usr/bin/rsync

        server_args = --daemon

        log_on_failure += USERID

    }

儲存退出後重啟xinetd服務,如果tcp的873連接埠處於監聽狀態,說明服務啟動正常。

650) this.width=650;" title="clipboard" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard" src="http://img1.51cto.com/attachment/201408/22/1080241_14087414106ntD.png" "954" height="291" />

用戶端做測試

==================================================================

inotify使用

inotify 是一個可以即時監視檔案系統的工具,檔案的建立,修改,刪除,查看等動作都可以監視到。此功能需要2.6.13以上核心支援,包括2.6.13版本。inotify-tools 這個軟體就是用來與核心的inotify互動的工具,藉助它可以即時的監視指定檔案一舉一動。與sh指令碼配置著使用,可以達到監控的效果。安裝方法如下。

# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

# tar -xf inotify-tools-3.13.tar.gz

# cd inotify-tools-3.13

# ./configure               這裡沒有指定安裝路徑,預設安裝後可執行程式在 /usr/local/bin

# make && make install

# echo "fs.inotify.max_user_watches = 100000"  >> /etc/sysctl.conf  設定最大監視的檔案數量

# sysctl -p   讓設定的核心參數生效

inotify-tools安裝後有兩個執行檔案

    inotifywait,用來監視檔案的變化

    inotifywatch,用來統計檔案系統訪問的次數,監視檔案的中繼資料

    命令選項

        -m, –monitor接收到一個事情而不退出,無限期地執行。預設的行為是接收到一個事情後立即退出。

        -r, –recursive :監視一個目錄下的所有子目錄

        -q, –quiet:指定一次,不會輸出詳細資料,指定二次,除了致命錯誤,不會輸出任何資訊。 指定一次,不會輸出詳細資料,指定二次,除了致命錯誤,不會輸出任何資訊。

        -e , –event :只監聽指定的事件。

                    事件有以下幾種

650) this.width=650;" title="clipboard[1]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[1]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741410YHoa.png" "690" height="504" />

==================================================================

配置一個rsync+inotify案例

650) this.width=650;" title="clipboard[2]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[2]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741411EjcJ.png" "619" height="459" />

1,節點1與節點2都為rsync伺服器端,

2,散發者會即時把自己變化的資料推送到節點1和節點2上。

3,節點一與節點二的環境一樣,模組名為html,共用的目錄為/data

4,傳輸過程加密

操作過程---------------------------------------------------------------------

為了同步資料時不用輸入密碼,所以選擇公開金鑰認證。在散發者上產生金鑰組兒。

# ssh-keygen -t rsa    這裡沒有設定密碼,所以一路斷行符號就可以。

# cd /root/.ssh/

# cat id_rsa.pub     查看公開金鑰檔案,並且複製      

650) this.width=650;" title="clipboard[3]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[3]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741412Wk8g.png" "822" height="438" />

把紅框中的文本複製到兩台節點伺服器上的/root/.ssh/authorized_keys檔案中,如果沒有需要手動建立。複製完成後為兩台結點伺服器編輯rsync的設定檔,內容如下。如沒有rsync需要安裝。

650) this.width=650;" title="clipboard[4]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[4]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741413nEsP.png" "323" height="296" />

完成設定檔後重啟xinetd服務。

散發者配置如上面安裝完成後編輯以下指令碼,讓其自動同步資料。

# vim /bin/inotify.sh    內容如下

source  /etc/rsync.inotify

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib /data | while read D E F

do

        /usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host}::$Dest

        /usr/bin/rsync -ahqz -e ssh --delete ${Source}/ ${Host1}::$Dest

done

#vim /etc/rsync.inotify   為上面的指令檔提供設定檔,內容如下:提供設定檔是為了以後能夠靈活擴充多個節點。

Source=/data

Host=172.16.2.10

Dest=html

Host1=172.16.2.15

# echo "/bin/inotify.sh &"  >> /etc/rc.d/rc.local                     #讓指令碼開機自動啟動

# /bin/inotrfy.sh   啟動指令碼,第一次同步資料時需要輸入yes。 所以先讓它在前台運行

# cp /bin/i* /data                     複製點檔案做測試,

到兩台節點上查看,會有點延時。

# ls /data

650) this.width=650;" title="clipboard[5]" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clipboard[5]" src="http://img1.51cto.com/attachment/201408/22/1080241_1408741413MpPZ.png" "615" height="48" />

到此完成

rsync 加 inotify 實現無縫資料同步

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.