1. 程式人生 > >rsync+inotify實現全網自動化資料備份-技術流ken

rsync+inotify實現全網自動化資料備份-技術流ken

1.rsync簡介

“rsync是linux系統下的資料映象備份工具。使用快速增量備份工具Remote Sync可以遠端同步,支援本地複製,或者與其他SSH、rsync主機同步”

2.rsync的功能和特點

1. 可以實現伺服器各種資源的備份(可以誇檔案系統)

2. linux-rsyncwindows-cwrsync

3. 可以做全量備份,也可以做增量備份

4. 在做備份的時候,可以排除一些特定的檔案不做備份

5. 可以結合ssh實現加密傳輸

6. rsync支援工作在後臺的模式(守護程序模式)

7. rsync可以結合inotify/sersync實現自動實時備份

8. rsync在傳輸檔案的過程中可做限速

3.rsync的工作模式

1. 命令列模式(shell模式)

類似於cpdd命令,實現備份檔案的複製(備份)

2. 遠端模式(遠端shell模式)

利用ssh實現資料的遠端傳輸,類似於 scp

3. 列表模式

類似於執行ls命令,僅僅用於列出檔案內容列表(不是做複製操作)

4. 後臺模式(守護程序模式)

rsync是工作在後臺的

4.rsync實現自動備份

rsync實時自動備份

結合inotify/sersync

inotify/sersync:監控檔案和目錄中的檔案是否發生更改(找出新檔案)

rsync:將找出的檔案備份過去

rsync的用法

1.本地使用(cp

2.遠端使用(scp

3.守護程序(

socket

5.rsync選項詳解

選項
-p:保持檔案的許可權屬性不變
-v:顯示執行過程資訊
-r:目錄做遞迴
-a:歸檔(包含r)
-z:壓縮
-l:僅僅傳輸軟連結自身
-L:傳輸軟連線所指向的原始檔案
-b:在備份檔案的時候,如果備份檔案已經存在,會將目標位置下舊的檔案重新命名,然後生成新的備份
--suffix=xxx        指定舊備份檔案的字尾名
--backup-dir=xxxx   指定將舊備份檔案移動到哪個位置下
-e:結合ssh實現加密傳輸
-e "ssh -p 22"
組合:-avz

6.rsync配置檔案引數詳解

模組:其實就是一個目錄,這個模組用於儲存客戶端所傳遞過來的檔案
    引數:
        pid file:指定rsync的pid檔案的儲存位置
        uid:指定執行rsync程序的使用者id
        gid:指定執行rsync程序的使用者組id
        port:指定rsync所監聽的埠(預設埠873)
        path:指定模組所對應的目錄的位置
        use chroot:指定將使用者鎖定在家目錄中
        max connections:最大連線數(指定最多同時有多少個客戶端在傳輸檔案)
        log file:指定日誌檔案的位置
        log format:指定日誌格式
        
lock file:指定rsync程序的鎖檔案的位置 read only:指定模組是否為只讀狀態 write only:指定模組是否為只寫狀態 list:指定用使用者是否可以檢視模組所對應的路徑下的檔案列表 exclude:指定排除不做傳輸的檔案 exclude from:通過讀取一個檔案,來獲取不對哪些檔案做傳輸 auth users:指定用於連線這個模組所要使用的匿名使用者名稱 secrets file:指定儲存虛擬使用者和密碼檔案 hosts allow:指定可以做檔案傳輸的主機 hosts deny:黑名單 timeout:指定客戶端的超時時間

7.inotify簡介

inotify查詢傳送了改變的檔案或者新檔案,可以持續檢測一個目錄中的檔案是否發生更改。

軟體inotify-tools有兩個元件

inotifywait:檢測一個目錄下的檔案所發生事件

inotifywatch:統計所觸發的事件的次數

8.inotifywait的選項

    -r:遞迴目錄
    -q:僅僅列印監控的事件資訊
    -m:一直處於監控狀態[組合使用-mqr]
    --excludei:排除檔案或目錄(不區分大小寫)
    --exclude:排除檔案或目錄(區分大小寫)
    --format:指定輸出格式
        %w:顯示觸發監控的事件的所在路徑.[%w%f組合使用就能得到檔名]
        %f:顯示觸發監控的事件的檔名
        %e:顯示所觸發的事件
        %T:顯示事件的觸發時間
    --timefmat:指定輸出的時間的格式
    -e:指定要監控的事件

9.inotify監控的事件

    access              file or directory contents were read
    modify              file or directory contents were written
    attrib              file or directory attributes changed
    close_write          file or directory closed, after being opened in writeable mode
    close_nowrite      file or directory closed, after being opened in read-only mode
    close              file or directory closed, regardless of read/write mode
    open              file or directory opened
    moved_to          file or directory moved to watched directory
    moved_from          file or directory moved from watched directory
    move              file or directory moved to or from watched directory
    create              file or directory created within watched directory
    delete              file or directory deleted within watched directory
    delete_self          file or directory was deleted
    unmount              file system containing file or directory unmounted

10.rsync+inotify全網自動化備份實戰案例

1.環境準備

centos7.5

rsync服務端IP:172.20.10.7/28

inotify服務端IP:172.20.10.8/28

2.關閉安全服務

[[email protected] ~]# systemctl stop firewalld 
[[email protected] ~]# setenforce 0
[[email protected] ~]# iptables -F

3. 配置rsync服務端

建立共享目錄

[[email protected] ~]# mkdir /ken

建立用於執行rsync程序的使用者

[[email protected] ~]# useradd -r -s /sbin/nologin -u 333 kenken

修改屬主和陣列

[[email protected] ~]# chown -R kenken.kenken /ken

檢視rsync的檔案,/etc/rsyncd.conf,此檔案預設不存在,需要自己手工寫。

[[email protected] ~]# rpm -ql rsync 
/etc/rsyncd.conf
/etc/sysconfig/rsyncd
/usr/bin/rsync
...

建立rsync配置檔案

[[email protected] ~]# vim /etc/rsyncd.conf 
pid file=/var/lock/subsys/pidfile
lock file=/var/lock/subsys/rsync
log file=/var/log/rsync
uid=333
gid=333
timeout=100
max connections=199
[ken]
path=/ken
list=yes
use chroot=yes
read only=no
auth users=user1
secrets file=/etc/rsyncd.pwd
hosts allow=172.20.10.8/28

建立虛擬使用者檔案

[[email protected] ~]# echo "user1:123">>/etc/rsyncd.pwd

修改許可權為600

[[email protected] ~]# chmod 600 /etc/rsyncd.pwd 

啟動rsync服務

[[email protected] ~]# rsync --daemon
[[email protected] ~]# ss -tnl | grep 873
LISTEN     0      5            *:873                      *:*                  
LISTEN     0      5           :::873                     :::*                  

 4.配置inotify服務端

 下載inotify需要配置epel倉庫,複製如下程式碼到你的yum配置檔案裡面即可

[ken]
name=ken
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/

下載inotify

[[email protected] ~]# yum install rsync inotify-tools -y

建立需要備份資料的目錄

[[email protected] ~]# mkdir /kenken

建立一個儲存rsync虛擬使用者和密碼的檔案並更改許可權為600

[[email protected] ~]# echo "123" >>/etc/rsync.pwd
[[email protected] ~]# chmod 600 /etc/rsync.pwd

 建立自動化監控備份指令碼

[[email protected] ~]# vim authbak.sh
#!/bin/bash
prog="inotifywait"
events="create,delete,close_write"
opt="-mrq"
dir="/kenken"
remote_host="172.20.10.7"
anon_user="user1"
mod_name="ken"
pwd_file="/etc/rsync.pwd"
$prog $opt -e $events --format "%w%f" $dir | while read line
do
     rsync -rz --delete $dir [email protected]$remote_host::$mod_name --password-file=$pwd_file
done

客戶端執行指令碼

[[email protected] ~]# bash authbak.sh

5.在客戶端進行測試

客戶端建立檔案測試

[[email protected] kenken]# touch {1..10}.txt
[[email protected] kenken]# ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

在rsync伺服器端檢視是否有相同檔案

[[email protected] ken]# ls
10.txt  1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  7.txt  8.txt  9.txt

測試成功!

客戶端刪除檔案測試

[[email protected] kenken]# rm -rf 1.txt 4.txt [[email protected] kenken]# ls10.txt  2.txt  3.txt  5.txt  6.txt  7.txt  8.txt  9.txt

在rsync伺服器端檢視檔案是否也已經被刪除

[[email protected] kenken]# ls
10.txt  2.txt  3.txt  5.txt  6.txt  7.txt  8.txt  9.txt

測試成功!

至此我們已經可以實現全網自動化, 無差異化資料備份了。