天天看點

Linux之rsync簡單應用&&rsync+inotify實時應用

本文系統Centos6.0

Server:(Centos)  192.168.182.130

Client:(lv2)     192.168.182.129

它的特性如下:

可以很容易做到保持原來檔案的權限、時間、軟硬連結等等。

無須特殊權限即可安裝。

安全:可以使用scp、ssh等方式來傳輸檔案,當然也可以通過直接的socket連接配接。

支援匿名傳輸,以友善進行網站鏡象。

usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

/etc/rsyncd/rsyncd.conf 是你剛才編輯的rsyncd.conf的位置.

也可以在/etc/rc.d/rc.local裡加入讓系統自動啟動等.

rsync -參數 使用者名@同步伺服器的IP::rsyncd.conf中那個方括号裡(子產品名)的内容 本地存放路徑 如:

rsync –vzrtopg –delete --progress --exclude “*.log”  [email protected]::lansggtest /root/backup --password-file=/etc/rsyncd.pass

該指令的解釋如下:

-v即--verbose   顯示傳輸的詳細資訊

-z 即--compress 傳輸時對檔案進行壓縮

-r 即—recursive 對子目錄進行遞歸處理

-t 即—times    保持檔案的時間資訊

-o即—owner  用來保持檔案的屬主資訊

-p 即 --perms 保持檔案權限

-g 即 –group 保持檔案屬組資訊

-a 即 --archive 歸檔模式,表示以遞歸方式傳輸檔案,并保持所有檔案屬性,等于-rlptgoD

--delete  以rsync伺服器為基準保持資料同步,如果伺服器删除了某一檔案,用戶端也會删掉。

--progress 顯示出詳細的進度情況。

--exclude 用于排除不需要的檔案類型。

/backup 指定備份的檔案在用戶端上的存放位置 。

--password-file=/etc/rsyncd.pass 指定用戶端存放密碼檔案的位置。

rsync簡單應用;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/224936526.jpg"></a>

1、Server端安裝rsync;

1

<code>[root@Centos ~]# yum install -y rsync</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/225921156.jpg"></a>

建立同步測試目錄并且建立同步使用者;

2

3

<code>[root@Centos ~]# mkdir /root/test</code>

<code>[root@Centos ~]# vim /etc/rsyncd.pass</code>

<code>lansgg:lansgg123</code>

修改密碼檔案權限

<code>[root@Centos ~]# chmod </code><code>600</code> <code>/etc/rsyncd.pass</code>

嗚呼,當你rpm -ql該包的時候,你會發現沒有什麼配置檔案,下面就是自己寫配置檔案了;

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>[root@Centos ~]# vim /etc/rsyncd.conf</code>

<code>uid=root  #該選項指定當該子產品傳輸檔案時守護程序應該具有的uid;預設值是</code><code>"nobody"</code><code>,</code>

<code>gid=root  ##該選項指定當該子產品傳輸檔案時守護程序應該具有的gid;預設值是”nobody”。</code>

<code>use</code> <code>chroot=no   #不使用chroot</code>

<code>max connections=</code><code>0</code>   <code>#設定最大連接配接數,預設為</code><code>0</code><code>,即無限制。你可以随意設定,</code><code>10</code><code>、</code><code>20</code><code>都可以</code>

<code>strict mode=yes   #設定是否檢查密碼檔案的權限</code>

<code>pid file=/</code><code>var</code><code>/run/rsyncd.pid  #指定rysnc程序的pid檔案位置</code>

<code>lock file=/</code><code>var</code><code>/lock/rsync.lock  #指定支援max connections的鎖檔案</code>

<code>log file=/</code><code>var</code><code>/log/rsyncd.log   #指定 rsync日志輸出路徑</code>

<code>[lansggtest]                     #子產品名,可使用任意名稱</code>

<code>path=/root/test/                 #同步源目錄路徑</code>

<code>comment=lansgg test         #子產品描述</code>

<code>ignore errors          #出現I/O錯誤時可忽略。</code>

<code>read only=no            #是否隻讀,設定為no時用戶端可上傳檔案。</code>

<code>write only=no           #設定為no 時用戶端可下載下傳檔案。</code>

<code>hosts allow=</code><code>192.168</code><code>.</code><code>182.129</code>        <code>#允許通路主機 </code>

<code>hosts deny=*                      #拒絕通路的主機,*表示所有主機。</code>

<code>list=</code><code>false</code>                  <code>#設定用戶端請求時是否列出該子產品,</code><code>false</code><code>為隐藏。</code>

<code>auth users=lansgg            #設定連接配接時使用的使用者,即密碼檔案裡面定義的使用者名。如果沒有這行,則表明是匿名</code>

<code>secrets file=/etc/rsyncd.pass     #指定密碼檔案位置</code>

啟動rsync

<code>[root@Centos ~]# rsync --daemon</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232522588.jpg"></a>

在測試目錄中建立測試檔案

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232745966.jpg"></a>

2、Client操作;

安裝rsync

<code>[root@lv2 ~]# yum install rsync -y</code>

配置密碼檔案,裡面寫入與伺服器Server上相同的密碼,但不需要再寫帳号名。

<code>[root@lv2 ~]# vim /etc/rysncd.pass</code>

<code>lansgg123</code>

mkdir /root/backup   #此為建立本地備份目錄

開始同步;

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress --exclude </code><code>"*.log"</code> <code>lansgg@</code><code>192.168</code><code>.</code><code>182.130</code><code>::lansggtest /root/backup --password-file=/etc/rsyncd.pass</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/001123934.jpg"></a>

沒有log日志檔案;

Ps:你可以将rsync --daemon寫入rc.local檔案,

你可以将上面的指令寫入cron;實作定時同步;

下面是rsync+inotify實作資料實時同步;

上面已經表明,rsync無法實作實時的同步;是以才做了cron;這也是rsync的不足;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/103831503.jpg"></a>

這就是常說的rsync可以下發多台機器配置檔案的圖;其實和上面的案例是反過來,上面是client下載下傳server端,進行備份,這個案例是client端進行上傳到多台server端,比如叢集的話;

在Server端(三台)配置如上;

<code>hosts allow=</code><code>192.168</code><code>.</code><code>182.129</code>        <code>#允許通路主機</code>

下面是接着在Client端安裝inotify-tools

<code>[root@Centos ~]# yum install inotify-tools -y</code>

<code>rpm -ql inotify-tools</code>

<code>/usr/bin/inotifywait</code>

<code>/usr/bin/inotifywatch</code>

inotifywait用于等待檔案或檔案集上的一個特定事件,可以監控任何檔案和目錄設定,并且可以遞歸地監控整個目錄樹;

inotifywatch用于收集被監控的檔案系統統計資料,包括每個inotify事件發生多少次等資訊。

<code>mkdir /root/backup</code>

<code> </code><code>vim /etc/rsyncd.pass</code>

編寫實時檢測同步腳本;

<code>vi  dataup.sh</code>

<code>#!/bin/bash</code>

<code>server1=</code><code>192.168</code><code>.</code><code>182.130</code>

<code>server2=</code><code>192.168</code><code>.</code><code>182.131</code>

<code>server3=</code><code>192.168</code><code>.</code><code>182.132</code>

<code>src=/root/backup</code>

<code>dstmode=mode1</code>

<code>user=lansgg</code>

<code>/usr/bin/inotifywait -mrq --timefmt </code><code>'%d/%m/%y %H:%M'</code> <code>--format </code><code>'%T %w%f%e'</code> <code>-e modify,</code><code>delete</code><code>,create,attrib $src| </code><code>while</code> <code>read files</code>

<code>do</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server1::$dstmode</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server2::$dstmode</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server3::$dstmode</code>

<code>echo </code><code>"$files was rsynced"</code> <code>&gt;&gt; /tmp/rsync.log </code><code>2</code><code>&gt;&amp;</code><code>1</code>

<code>done</code>

inotifywait的相關參數:

-m 即 –monitor ,表示始終保持事件監聽狀态;

-r  即 –recursive,表示遞歸查詢目錄

-q 即 –quiet ,列印出監控事件

--timefmt,指定時間的輸出格式

--format,指定變化檔案的詳細資訊

sh inotify.sh &amp;

echo “sh inotify.sh &amp;” &gt;&gt; /etc/rc.local

現在可以在client;建立、删除檔案進行測試;

Client執行:

<code>[root@node1 ~]# ./dataup.sh &amp;</code>

<code>[</code><code>1</code><code>] </code><code>10461</code>

<code>[root@node1 ~]# tail -f /tmp/rsync.log</code>

當你在Client執行mkdir /root/backup/testtesttest (建立測試目錄)

你會發現Client用戶端日志:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233804703.jpg"></a>

你去檢視server端;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233826865.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233826163.jpg"></a>

全部已經同步了;

Ps:在執行search inotify的時候,發現一款incron;系統簡介:incron.i686 : Inotify cron system;大家可以去研究下;

本文轉自 西索oO 51CTO部落格,原文連結:http://blog.51cto.com/lansgg/1227600

繼續閱讀