本文系統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>>> /tmp/rsync.log </code><code>2</code><code>>&</code><code>1</code>
<code>done</code>
inotifywait的相關參數:
-m 即 –monitor ,表示始終保持事件監聽狀态;
-r 即 –recursive,表示遞歸查詢目錄
-q 即 –quiet ,列印出監控事件
--timefmt,指定時間的輸出格式
--format,指定變化檔案的詳細資訊
sh inotify.sh &
echo “sh inotify.sh &” >> /etc/rc.local
現在可以在client;建立、删除檔案進行測試;
Client執行:
<code>[root@node1 ~]# ./dataup.sh &</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