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

本文系統Centos6.0

Server:(Centos)  192.168.182.130

Client:(lv2)     192.168.182.129

rsync是類unix系統下的數據鏡像備份工具,從軟件的命名上就可以看出來了——remote sync。

它的特性如下:
可以鏡像保存整個目錄樹和文件系統。
可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
無須特殊權限即可安裝。
快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。

支持匿名傳輸,以方便進行網站鏡象。

服務器端啓動

usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
可能需要root權限運行.
/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 用於排除不需要的文件類型。
http://www.01chengde.cn 指定備份的服務器和相關的模塊, lansgg 爲服務器Server上面設置的rsync同步帳號;
/backup 指定備份的文件在客戶端上的存放位置 。
--password-file=/etc/rsyncd.pass 指定客戶端存放密碼文件的位置。

rsync簡單應用;


1、Server端安裝rsync;

1
[root@Centos ~]# yum install -y rsync

創建同步測試目錄並且創建同步用戶;

1
2
3
[root@Centos ~]# mkdir /root/test
[root@Centos ~]# vim /etc/rsyncd.pass
lansgg:lansgg123

修改密碼文件權限

1
[root@Centos ~]# chmod 600/etc/rsyncd.pass

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@Centos ~]# vim /etc/rsyncd.conf
uid=root  #該選項指定當該模塊傳輸文件時守護進程應該具有的uid;默認值是"nobody"
gid=root  ##該選項指定當該模塊傳輸文件時守護進程應該具有的gid;默認值是”nobody”。
usechroot=no   #不使用chroot
max connections=0#設置最大連接數,默認爲0,即無限制。你可以隨意設置,1020都可以
strict mode=yes   #設置是否檢查口令文件的權限
pid file=/var/run/rsyncd.pid  #指定rysnc進程的pid文件位置
lock file=/var/lock/rsync.lock  #指定支持max connections的鎖文件
log file=/var/log/rsyncd.log   #指定 rsync日誌輸出路徑
[lansggtest]                     #模塊名,可使用任意名稱
path=/root/test/                 #同步源目錄路徑
comment=lansgg test         #模塊描述
ignore errors          #出現I/O錯誤時可忽略。
read only=no            #是否只讀,設置爲no時客戶端可上傳文件。
write only=no           #設置爲no 時客戶端可下載文件。
hosts allow=192.168.182.129#允許訪問主機
hosts deny=*                      #拒絕訪問的主機,*表示所有主機。
list=false#設置客戶端請求時是否列出該模塊,false爲隱藏。
auth users=lansgg            #設置連接時使用的用戶,即密碼文件裏面定義的用戶名。如果沒有這行,則表明是匿名
secrets file=/etc/rsyncd.pass     #指定密碼文件位置

啓動rsync

1
[root@Centos ~]# rsync --daemon


在測試目錄中創建測試文件

2、Client操作;

安裝rsync

1
[root@lv2 ~]# yum install rsync -y

配置密碼文件,裏面寫入與服務器Server上相同的密碼,但不需要再寫帳號名。

1
2
[root@lv2 ~]# vim /etc/rysncd.pass
lansgg123

mkdir /root/backup   #此爲創建本地備份目錄

開始同步;

1
rsync -vzrtopg --delete--progress --exclude "*.log"lansgg@www.jingjingdianying.com::lansggtest /root/backup --password-file=/etc/rsyncd.pass


沒有log日誌文件;

Ps:你可以將rsync --daemon寫入rc.local文件,

你可以將上面的命令寫入cron;實現定時同步;

下面是rsync+inotify實現數據實時同步;

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

Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。您還可以跟蹤活動的源頭和目標等細節。

要使用 inotify,必須具備一臺帶有 2.6.13 或更新內核的 Linux 機器(以前的 Linux 內核版本使用更低級的文件監控器 dnotify)。如果不知道內核的版本,請轉到 shell,輸入 uname -a:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uid=root  #該選項指定當該模塊傳輸文件時守護進程應該具有的uid;默認值是"nobody"
gid=root  ##該選項指定當該模塊傳輸文件時守護進程應該具有的gid;默認值是”nobody”。
usechroot=no   #不使用chroot
max connections=0#設置最大連接數,默認爲0,即無限制。你可以隨意設置,1020都可以
strict mode=yes   #設置是否檢查口令文件的權限
pid file=/var/run/rsyncd.pid  #指定rysnc進程的pid文件位置
lock file=/var/lock/rsync.lock  #指定支持max connections的鎖文件
log file=/var/log/rsyncd.log   #指定 rsync日誌輸出路徑
[lansggtest]                     #模塊名,可使用任意名稱
path=/root/test/                 #同步源目錄路徑
comment=lansgg test         #模塊描述
ignore errors          #出現I/O錯誤時可忽略。
read only=no            #是否只讀,設置爲no時客戶端可上傳文件。
write only=no           #設置爲no 時客戶端可下載文件。
hosts allow=192.168.182.129#允許訪問主機
hosts deny=*                      #拒絕訪問的主機,*表示所有主機。
list=false#設置客戶端請求時是否列出該模塊,false爲隱藏。
auth users=lansgg            #設置連接時使用的用戶,即密碼文件裏面定義的用戶名。如果沒有這行,則表明是匿名
secrets file=/etc/rsyncd.pass     #指定密碼文件位置

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

1
[root@Centos ~]# yum install inotify-tools -y
1
2
3
rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch

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

inotifywatch用於收集被監控的文件系統統計數據,包括每個inotify事件發生多少次等信息。

1
2
3
mkdir /root/backup
vim /etc/rsyncd.pass
lansgg123

編寫實時檢測同步腳本;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi  dataup.sh
#!/bin/bash
server1=http://dy.01chengde.cn
server2=192.168.182.131
server3=192.168.182.132
src=/root/backup
dstmode=mode1
user=lansgg
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M'--format '%T %w%f%e'-e modify,delete,create,attrib $src| whileread files
do
rsync -vzrtopg --delete--progress  --password-file=/etc/rsyncd.pass  $src $user@$server1::$dstmode
rsync -vzrtopg --delete--progress  --password-file=/etc/rsyncd.pass  $src $user@$server2::$dstmode
rsync -vzrtopg --delete--progress  --password-file=/etc/rsyncd.pass  $src $user@$server3::$dstmode
echo "$files was rsynced">> /tmp/rsync.log 2>&1
done

inotifywait的相關參數:
-m 即 –monitor ,表示始終保持事件監聽狀態;
-r  即 –recursive,表示遞歸查詢目錄
-q 即 –quiet ,打印出監控事件
--timefmt,指定時間的輸出格式
--format,指定變化文件的詳細信息

sh inotify.sh &

echo “sh inotify.sh &” >> /etc/rc.local

現在可以在client;創建、刪除文件進行測試;

Client執行:

1
2
3
[root@node1 ~]# ./dataup.sh &
[1] 10461
[root@node1 ~]# tail -f /tmp/rsync.log

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

你會發現Client客戶端日誌:

你去查看server端;

全部已經同步了;

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章