rsync+inotify實現數據實時備份

rsync+inotify實現數據實時備份

§·rsync簡單介紹 1

§·什么是rsync 1

§·rsync的功能特性 1

§·rsync的優點和不足 2

§·初識inotify 2

§·rsync命令工作模式 2

§·rsync常用命令選項 3

§·配置rsync以守護進程的方式運行 3

※·安裝并啟動 xinetd 3

※·為rsync服務器提供配置文件 3

※·配置/etc/rsyncd.passwd文件格式 4

※·配置服務開機啟動 4

※·客戶端測試命令 4

§·實驗案例:rsync配合inotify實現數據的實時備份 5

§·rsync備份服務器的搭建 5

※·rsync客戶端連接服務器 6

§·rsync服務器配置小結: 6

§·安裝inotify工具inotify-tools 6

※·判斷系統內核是否支持inotify 6

※·安裝inotify-tools 7

 

 

 

§·rsync簡單介紹

傳統的數據備份方式有cp命令,cp命令的源文件和目標文件都在本地,實現的是對文件的一種完整復制。

wget命令通過網絡進行備份,不支持增量備份。

§·什么是rsync

rsyncLinux/unix系統下的文件同步和數據傳輸工具,它采用的“rsync”算法,使一個客戶機和遠程文件服務器之間的文件同步。通過rsync可以將同一個服務器的數據從一個分區備份到另一個分區,也可以將本地系統的數據通過網絡傳輸當時備份到任何一個遠程主機上,rsync可以在中斷之后恢復傳輸,rsync只傳輸源文件和目標文件之間不一致的部分,rsync可以執行完整備份或增量備份。

§·rsync的功能特性

rsyncremote sync。從軟件名稱上就可以看出來它實現的功能,rsync有如下特性:

1.可以鏡像保存整個目錄樹和文件系統;

2.可以增量同步數據,文件傳輸效果高,因而同步時間很短;

3.可以保持原有文件的權限,時間等屬性;

4.加密傳輸數據,可以保證數據的安全性;

5.可以使用rcp ssh等方式傳輸文件,當然也可以通過Socket連接傳輸文件;

6.支持匿名傳輸。

 

介紹:rsyncremote sync(遠程同步,也可以做本地同步,實現的是增量同步,對比文件特征碼)

功能:本地同步如cp ,遠程同步如:scp rsync不具備加密)

§·rsync的優點和不足

rsync具有安全性高,備份迅速,支持增量備份的優點,通過rsync可以解決對實時性要求不高的數據備份需要。

rsync在高端業務系統中逐漸暴露出很多的不足:

1rsync同步數據時,需要掃描所有文件后進行對比,然后進行差量傳輸。如果如文件數量達到百萬甚至千萬量級,掃描所有文件將是非常耗時的。

2.其次rsync不能實時監控同步數據。

 

§·初識inotify

inotify是一種強大的 細粒度的 異步的文件系統時間監控機制,linux內核從2.6.13版本起,加入了對inotify的支持。通過inotify可以監控文件系統中添加,刪除,修改,移動等各種細微時間,利用這個內核接口,第三方軟件可以監控文件系統下文件的各種變化情況,inotify-tools就是這樣的一個第三方軟件。

rsync可以實現觸發式的文件同步,但是通過crontab守護進程方式進行觸發,同步的數據和實際的數據會有差異,而inotify可以監控文件系統的各種變化,當文件有任何變動時,會觸發rsync同步,這樣剛好解決了同步數據的實時性問題。

 

§·rsync命令工作模式

第一種:shell模式,也稱為本地模式

Local:  
   rsync  [OPTION...]  SRC...  [DEST]
 
[root@love681 rsync-test-dir]# rsync  -av  /etc   ./
[root@love681 rsync-test-dir]# ls
etc

第二種:遠程shell模式,此時可以利用ssh協議承載其數據傳輸過程

第三種:列表模式(干跑模式)其工作方式與ls相似,僅列出源的內容: -nv

      Access via remote shell:
      Pull: rsync   [OPTION...]  [USER@]HOST:SRC... [DEST](獲取目標文件)
 
 
      Push: rsync  [OPTION...]  SRC... [USER@]HOST:DEST(上傳文件)
           # rsync  fstab  root@10.1.16.20:/root/rsync-test

第四種:服務器模式,此時rsync可以工作為守護進程,能夠接收客戶端的數據傳輸請求;在使用時,可以在客戶端使用rsync命令把文件發送給守護進程,也可以向服務器獲取數據文件。

§·rsync常用命令選項

 

-n:在不確定命令是否能按愿意執行時,務必要事先測試:-n可以完成此功能;

-v–verbose ,詳細輸出模式;

-q–quiet,靜默模式;

-c–checksum,開啟校驗功能,強制對文件傳輸進行校驗;

-r–recursive,遞歸模式;

-a–archives,歸檔,保留文件的原有屬性;

-p–perms 保留文件的權限;

-t–times 保留文件的時間戳;

-l–links 保留文件的符號鏈接;

-g–group保留文件的屬組;

-o–owne保留文件的屬主;

-D: –devices 保留設備文件

 

-essh 表示使用ssh協議作為承載;

-z : 對文件壓縮后傳輸;

–progress : 顯示進度條;

–stats :顯示如何執行壓縮和傳輸的過程

 

注意:rsync命令使用時,如果源參數的末尾有斜線,就會復制指定目錄的內容,而不會復制目錄本身;如果沒有斜線,則會復制目錄本身;目標參數末尾的斜線沒有作用,命令使用如下:

#rsync  -r /mydata/data   /backups/   :會把目錄data直接同步到/backups目錄中;

#rsync  -r /mydata/data/  /backups/   :會把目錄data/中的所有文件直接同步到/backups目錄中;

§·配置rsync以守護進程的方式運行

※·安裝并啟動 xinetd

#yum -y install xinetd rsync

 

※·為rsync服務器提供配置文件

配置文件為: /etc/rsyncd.conf

定義一個全局配置和多個rsync的共享配置:

#Global  Settings
uid = nobody
gid = nobody
use chroot = no
max connetions = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
 
#Directory to be rsynced 
[rsynced_name]
path = /path/to/some_dir
ignore errors = yes
read only = no
write only = no
hosts allow = white_list_ip/net
hosts deny = *

說明:

1.二者都不出現時,默認為允許訪問;

2.只出現hosts allow : 定義白名單,但是沒有被匹配到的主機由默認規則處理,即為允許;

3.只出現hosts deny : 定義黑名單,出現在名單中的都被拒絕,不匹配的即為允許;

4.二者同時出現,先檢查hosts allow 如果匹配就allow,否則,檢查hosts deny,如果匹配則拒絕;如果二

者均無匹配,則有默認規則處理,即為允許。 

list = falseuid = rootgid = rootauth users = usernamesecrets file = /etc/rsyncd.passwd

※·配置/etc/rsyncd.passwd文件格式

文件格式(明文):

usernamepassword

文件權限設置為:600

※·配置服務開機啟動

#chkconfig  rsync  on

#service  xinetd  start

監聽于  873/tcp

 

※·客戶端測試命令

 

        

 Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]  (下載數據)
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
格式:rsync  -av  username@10.1.16.20::rsynced_name/*   ./
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST   (上傳數據)
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
格式 :rsync -av   /etc  username@10.1.16.20::rsynced_name

§·實驗案例:rsync配合inotify實現數據的實時備份

rsync+inotify實現數據實時備份 

§·rsync備份服務器的搭建

(別人可以備份數據到服務器,也可以把服務器上的數據同步到自己的本地去)

1 .提供其配置文件:

~]# yum  -y  install  xinetd  rsync   #服務器端安裝rsync服務器軟件(該軟件也包含客戶端工具)
~]# vim /etc/rsyncd.conf   #編輯主配置文件(默認該文件是沒有的)
uid = nobody
gid = nobody
use chroot = no
max connetions = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
 
[ixdba]    #服務器被訪問時的對外地址(必要重要)
path = /webdata  #服務器上世紀存放數據的目錄
comment = ixdba files #描述信息
ignore errors = yes  #是否忽略錯誤
read only = no   #只讀  關閉
write only = no  #只寫 關閉
hosts allow = *  #允許訪問的主機
list = false
uid = root    #啟動rsync服務的用戶
gid = root    #啟動rsync該服務的組
auth users = user1,user2   #遠程登錄服務器的認證用戶
secrets file = /etc/server.pass  #認證用戶的密碼文件

2.由于rsync服務為xinetd管理的服務的,添加rsync服務開機自動啟動

#chkconfig --add rsync
#chkconfig  rsync  on
#service  xinetd  start
監聽于  873/tcp

3.設置服務器密碼文件:

注意把文件權限改為:600權限,不讓其他人可以看到密碼

vim  /etc/server.pass
user1:123456
user2:666666

 

※·rsync客戶端連接服務器

1.客戶端準備密碼文件,方便自動登錄rsync服務器

注意把文件權限改為:600權限,不讓其他人可以看到密碼

vim  /etc/rsync-back
123456

2.使用命令連接到rsync服務器

[root@Centos7 ~]# rsync  -vzrtopg  --delete  --progress  user1@10.1.16.44::ixdba  /ixdba.net 
 
--password-file=/etc/server.pass

# -vzrtopg  : 查看前面介紹,備份文件是不改變文件屬性

v是:即詳細輸出模式;

z是:表示–compress壓縮

r是:表示–recursive,對子目錄以遞歸模式處理

t是:–times,保持的時間信息

o是:–owner,保持文件的屬組

p是:–perms,保持文件的權限

g是:–group 保持文件的屬組信息

–delete   rsync服務器端基準進行數據鏡像同步,以服務器的數據為準

# –progress :顯示數據鏡像同步的過程

# user1@10.1.16.44::ixdba  :對rsync服務器ixdba模塊進行備份

# /ixdba.net   : 客戶端存放數據的路徑

# –password-file=/etc/server.pass  :指定user1的密碼文件路徑

3.讓其自動備份服務器上的數據,需要在crontab計劃任務

crontab -e
30 3 * * *  /usr/bin/rsync  -vzrtopg  --delete  --progress  user1@10.1.16.44::ixdba  /ixdba.net  --password-file=/etc/server.pass

 

§·rsync服務器配置小結:

以上兩步的搭建保證了客戶端可以把服務器上的數據每天備份一次,我們配合inotify程序的,來實現數據實現備份。linux 2.6.13以后的內核提供了 inotify文件監控機制,通過rsyncinotify的組合,完全可以實現rsync服務器端與客戶端數據的實時同步。

 

§·安裝inotify工具inotify-tools

※·判斷系統內核是否支持inotify

1.內核版本大于:2.6.13

[root@localhost ixdba.net]# uname -r
2.6.18-308.el5 
[root@localhost ixdba.net]# ll /proc/sys/fs/inotify/
總計 0
-rw-r--r-- 1 root root 0 10-14 22:51 max_queued_events
-rw-r--r-- 1 root root 0 10-14 22:51 max_user_instances
-rw-r--r-- 1 root root 0 10-14 22:51 max_user_watches
[root@localhost ixdba.net]#

※·安裝inotify-tools

◎·該軟件需要自己下載編譯安裝。inotify-tools-3.13

~}#cd inotify-tools-3.13
~}#./configure
~}#make
~}#make install

◎·inotify-tools-3.13生成的兩個命令文件

生成的兩個程序文件

[root@love681 inotify-tools-3.13]# ll /usr/local/bin/inotifywa*
-rwxr-xr-x 1 root root 38582 Oct 13 13:25 /usr/local/bin/inotifywait
-rwxr-xr-x 1 root root 40353 Oct 13 13:25 /usr/local/bin/inotifywatch
[root@love681 inotify-tools-3.13]#

inotifywait :用于等待文件或文件集上的一個特定時間,可以監控任何文件和目錄設置,并且可以遞歸地監控整個目錄樹。

inotifywatch :用于手機被監控的文件系統統計數據,包括每個inotify時間發生多少次等信息。

————————————————————————————————————————————————

關于inotify定義的一些接口參數,可以限制inotify消耗kernel menory的大小,有一下幾個參數可以了解下:

[root@love681 /]# cat  /proc/sys/fs/inotify/max_queued_events 
16384
#表示調用inotify_init是分配到的inotify instances中可排隊的event數的最大值,超出這個值的時間被丟棄,但會觸發IN_Q_OVERFLOW事件,默認值為:16384
 
[root@love681 /]# cat  /proc/sys/fs/inotify/max_user_instances 
128
#表示每一個real user ID可參見的inotify nstances的數量上限,默認值為 128
 
[root@love681 /]# cat  /proc/sys/fs/inotify/max_user_watches 
8192
#表示每個inotify 實例相關聯的watches的上限,也就是每一個inotify實例可以監控的最大目錄數量,如果監控的文件數目巨頭,需要根據時間情況適當的增加此值的大小。默認為:8192,調整方式為:
echo 30000000  > /proc/sys/fs/inotify/max_user_watches 
 
inotify instances 英文翻譯為:通知實例

inotifywait命令相關解釋

inotifywait是一個監控等待事件,可以配合shell腳本使用它。下面介紹一下常用的參數:

-m monitor ,表示始終保持事件監聽狀態

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

-q : –quiet ,表示打印出監控事件

-e : –event 通過此參數可以指定要監控的事件,常見的事件有 modify delete ,create , attrib 等等

modify  : 修改文件

delete : 刪除文件

create : 創建文件

attrib : 改變文件的屬性

close_write : 等待寫的操作完成

使用inotifywait腳本實時監控文件狀態觸發rsync上傳命令

在服務器上搭建好rsync服務,客戶機就可以自動的定時的上傳文件到服務器上,不需要手工的輸入用戶名和密碼,那我們現在只需要在客戶機上配置一個腳本,當客戶機上指定的監控目錄有文件變化時,自動觸發本地的rsync命令上傳指定監控下的文件即可。

配置實例腳本一 inotify腳本命令如下:

 

####inotify+rsync實現數據實時同步的腳本文件
#!/bin/bash
host=192.168.12.131
src=/web/wwwroot/
dst=web1
user=user1
inot_cmd=/usr/local/bin/inotifywait 
 
###把命令產生的信息管道傳到while循序語句中
inot_cmd  -mrq  --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e'  -e  modify,delete,create,attrib  $src  \
 
  |  while read files
do
/usr/bin/rsync   -vzrtopg  --delete  --progress  --password-file=/etc/server.pass  $src  $user@$host::$dst
 
echo  "${files} was resynced " >> /tmp/rsync.log 2>&1
 
done
 
####   --timefmt : 指定時間的輸出格式
####   --format : 指定變化文件的詳細信息
這兩個參數一般配合使用,通過指定輸出格式輸出類型一下的內容:
15/04/10 00:29 /web/wwwroot/ixdba.sh DELETE ,ISDIR was rsynced
15/04/10 00:30 /web/wwwroot/index.html MODIFY was rsynced
15/04/10 00:31 /web/wwwroot/prce-8.02.tar.gz CREATE was rsynced

這個腳本的作用就是通過inotify監控文件目錄的變化,監控的文件變化為 -e后面定義的變化:創建文件,刪除文件,修改文件,文件屬性修改,只有其中一項有變動,就執行rsync把本地文件上傳至rsync服務器上。

通過這樣的腳本,就可以實現在一臺本地rsync客戶端電腦上修改文件,可以自動同步數據到遠程或本地服務器上,服務器的數量可以是多臺。

 

§·小結:rsync配合inotify實現數據的實時備份

1 . 搭建多臺rsync服務器,搭建rsync服務器的要求就是,本地的客戶機上傳數據和下載數據不需要人工的干預即 可實現

2. 設置rsync客戶端實現備份遠程服務器上數據,或把本地的數據同步到遠程服務器上。

如果是備份遠程rsync服務器上的數據,可以在本地rsync客戶機上做一個計劃任務,定時去備份服務器上的數據。

如果是需要把本地的數據實時的上傳到rsync服務器上去,就需要配合inotify的通知機制,實時的監控本地需要同步是的數據,當有數據該變時,inotify腳本自動觸發rsync命令同步本地數據至服務器上。

3. inotify是由內核提供的文件系統監視機制,可以監視文件的 打開,關閉,移動/重命名,刪除,創建或者改變屬性等等,具體的inotify的機制,參考擴展 notify的機制一文。

 

 

原創文章,作者:linux_root,如若轉載,請注明出處:http://www.www58058.com/56003

(0)
linux_rootlinux_root
上一篇 2016-10-30
下一篇 2016-10-30

相關推薦

  • 用戶和組

    一、概述   Linux系統是一個多用戶多任務的分時操作系統,任何一個要使用系統資源的用戶,都必須首先向系統管理員申請一個賬號,然后以這個賬號的身份進入系統。   用戶的賬號一方面可以幫助系統管理員對使用系統的用戶進行跟蹤,并控制他們對系統資源的訪問;另一方面也可以幫助用戶組織文件,并為用戶提供安全性保護。 &nbsp…

    Linux干貨 2016-10-22
  • vsftpd

    練習:完成vsftpd配置 (1) 禁錮系統用戶于家目錄 [root@node3 ~]# yum -y install vsftpd [root@node3 ~]# vim /etc/vsftpd/vsftpd.conf chroot_local_user=YES &n…

    Linux干貨 2016-10-16
  • 重定向

    Linux下定義了三種I/O設備: 標準輸入(STDIN):用0表示,默認的標準輸入設備是鍵盤; 標準輸出(STDOUT):用1表示,默認的標準輸出設備是當前終端; 標準錯誤(STDERR):用2表示,默認的標準錯誤輸出設備是當前終端; I/O重定向即改變默認的位置 1 標準輸出重定向 (1)將標準輸出重定向到其他終端 /dev/pts/1代表偽終端1,在偽…

    Linux干貨 2017-07-31
  • 馬哥教育20期面授2班第一周課程練習1

    計算機基礎   1,計算機系統           硬件系統            主機部分:中央處理器CPU(運算器ALU、控制器CU);  &nb…

    Linux干貨 2016-07-29
  • 學習筆記–文本處理工具

    Linux下有很多文本處理工具,本文將介紹幾款比較常用的文本處理工具,比如對文本查看的工具:cat和less,文本截取工具:head和tail,按列抽取文本工具:cut,按關鍵字查詢文本工具:grep,下面將具體介紹各種工具的使用。 1、文本查看命令cat 用法: cat [OPTION]… [FILE]… cat命令一次性…

    Linux干貨 2016-08-07
  • 網絡管理命令

    linux網絡屬性     ifconfig命令家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理     ifconfig [interface]:     ifconfig -a:顯示所有接口…

    Linux干貨 2016-09-13
欧美性久久久久