歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

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 用於排除不需要的文件類型。

[email protected]::lansggtest 指定備份的服務器和相關的模塊, lansgg 為服務器Server上面設置的rsync同步帳號;

/backup 指定備份的文件在客戶端上的存放位置 。

--password-file=/etc/rsyncd.pass 指定客戶端存放密碼文件的位置。

rsync簡單應用;

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

1、Server端安裝rsync;

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

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

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

修改密碼文件權限

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

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

[root@Centos ~]# vim /etc/rsyncd.conf
uid=root  #該選項指定當該模塊傳輸文件時守護進程應該具有的uid;默認值是"nobody",
gid=root  ##該選項指定當該模塊傳輸文件時守護進程應該具有的gid;默認值是”nobody”。
use chroot=no   #不使用chroot
max connections=0   #設置最大連接數,默認為0,即無限制。你可以隨意設置,10、20都可以
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

[root@Centos ~]# rsync --daemon

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

2、Client操作;

安裝rsync

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

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

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

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

開始同步;

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

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

沒有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端(三台)配置如上;

uid=root  #該選項指定當該模塊傳輸文件時守護進程應該具有的uid;默認值是"nobody",
gid=root  ##該選項指定當該模塊傳輸文件時守護進程應該具有的gid;默認值是”nobody”。
use chroot=no   #不使用chroot
max connections=0   #設置最大連接數,默認為0,即無限制。你可以隨意設置,10、20都可以
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

[root@Centos ~]# yum install inotify-tools -y

rpm -ql inotify-tools

/usr/bin/inotifywait

/usr/bin/inotifywatch

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

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

mkdir /root/backup

vim /etc/rsyncd.pass

lansgg123

編寫實時檢測同步腳本;

vi  dataup.sh
#!/bin/bash
server1=192.168.182.130
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| while read 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執行:

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

本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/

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

你會發現Client客戶端日志:

你去查看server端;

全部已經同步了;

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

本文出自 “Coffee_藍山” 博客,請務必保留此出處http://lansgg.blog.51cto.com/5675165/1227600

Copyright © Linux教程網 All Rights Reserved