rsync+inotify實現數據實時同步

一、rsync

(一)、rsync簡介

rsync是Linux和Unix下一款遠程數據同步工具,rsync第一次會把數據全量同步到遠端服務器,之後會對比兩個文件的不同,傳輸差異文件,實現增量同步
優點:安全性高、備份迅速,使用同步算法,只同步有變化的文件 備份文件保持原有文件的屬性軟硬連接,且支持排除備份等
缺點:在數據同步之前需要掃描所有的文件進行對比才能進行差異化同步,如果同步文件達到百萬級或者千萬級,掃描文件同步將變得非常的耗時,降低了同步的效率

(二)、rsync基本命令介紹(1V4)

rsync是一個強大的命令,他可以同時實現複製,刪除,查看,遠程同步等功能
1. rsync==cp
root@nfs01 test]# rsync -a aa.txt aa.txt.bak
[root@nfs01 test]# ls
aa.txt aa.txt.bak

2、 rsync==scp
[root@nfs01 test]# rsync -rp /test/ 10.0.0.41:/test/
[email protected]'s password:

3rsync==rm

[root@nfs01 test]# mkdir /null
[root@nfs01 test]# rsync -r --delete /null/ /test/
[root@nfs01 test]# ls
4rsync==ls
[root@nfs01 test]# rsync /etc/hosts
-rw-r--r-- 352 2018/09/15 01:51:11 hosts

(三)、rsync工作方式

1、本地備份方式

語法:Local: rsync [OPTION...] SRC... [DEST]

練習:[root@nfs01 test]# rsync -a /etc/hosts /tmp/hosts.bak
   [root@nfs01 test]# ll /tmp/hosts.bak
   -rw-r--r-- 1 root root 352 Sep 15 01:51 /tmp/hosts.bak

2、遠程數據備份方式

語法:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

練習:[root@nfs01 test]# rsync -avz /backup/ [email protected]:/backup/
[email protected]'s password:
sending incremental file list
./

sent 1703 bytes received 333 bytes 370.18 bytes/sec
total size is 1622 speedup is 0.80

  • 小提示:如果不指定user信息表示以當前用戶進行登陸

3、守護進程傳輸模式

語法:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

  • 小提示:這裏的SRC與遠程傳輸方式不同,這裏的指的是模塊信息

    守護進程方式部署流程

    一、服務端部署流程
    1)檢查軟件是否安裝
    [root@backup ~]# rpm -qa rsync
    rsync-3.0.6-12.el6.x86_64
    2)編寫配置文件(注意默認是沒有的,需要手動創建)

    [root@backup ~]# vim /etc/rsyncd.conf
    #rsync_config
    #created by HQ at 2017
    ##rsyncd.conf start##
    uid = rsync
    gid = rsync
    use chroot = no
    max connections = 200
    timeout = 300
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    ignore errors
    read only = false
    list = false
    hosts allow = 172.16.1.0/24
    hosts deny = 0.0.0.0/32
    auth users = jiang
    secrets file = /etc/rsync.password
    [backup]
    comment = "practice and use"
    path = /backup
    ~
    -- INSERT --

配置參數詳細說明

配置參數 說明
uid = rsync 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作者
gid = rsync 指定rsync服務運行的時候,向磁盤進行讀取和寫入操作的操作組
use chroot = no 進行數據同步存儲時,安全相關參數,默認內網進行數據同步,可以關閉
max connections = 200 定義向備份服務器進行數據存儲的併發連接數
timeout = 300 定義與備份服務器建立的網絡連接,在多長時間沒有數據傳輸時,就釋放連接
pid file = /var/run/rsyncd.pid 服務程序運行時,會將進程的pid信息存儲到一個指定的pid文件中
lock file = /var/run/rsync.lock 定義鎖文件,主要用於配合max connections 參數,當達到最大連接就禁止繼續訪問
log file = /var/log/rsyncd.log 定義服務的日誌文件保存路徑信息
[backup] 指定備份目錄的模塊名稱信息
path = /backup 指定數據進行備份的目錄信息
ignore errors 在進行數據備份傳輸過程過程中,忽略一些I/O產生的傳輸錯誤
list = false 確認是否可以將服務配置的模塊信息,在客戶端可以查看顯示
hosts allow = 172.16.1.0/24 設置備份目錄允許進行網絡數據備份的主機地址或網段信息,即設置白名單
hosts deny = 0.0.0.0/32 設置備份目錄禁止進行網絡數據備份的主機地址或網段信息,即設置黑名單
auth users = jiang 指定訪問備份數據目錄的認證用戶信息,爲虛擬定義的用戶,不需要進行創建
secrets file = /etc/rsync.password 設置訪問備份數據目錄進行認證用戶的密碼文件信息,會在文件中設置認證用戶密碼信息

3)、創建備份服務管理用戶
useradd rsync -M -s /sbin/nologin
4)創建備份目錄
mkdir /backup
chown -R rsync.rsync /backup
5)創建認證文件
echo "jiang:jiang123" >>/etc/rsync.password
chmod 600 /etc/rsync.password
6)啓動rsync服務
rsync --daemon
二、客戶端部署流程
1)確認軟件是否安裝
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2)創建認證密碼文件
echo "jiang" >>/etc/rsync.password
chmod 600 /etc/rsync.password
3)、進行數據備份測試
[root@nfs01 tmp]# rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
sending incremental file list
hosts

二、利用inotify實現實時同步

(一)、inotify簡介

Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。要使用 inotify,必須具備一臺帶有 2.6.13 或更新內核的 Linux 機器

(二)、實時同步概念

一、爲什麼要使用實時同步

  • 因爲定時任務有缺陷,一分鐘以內的數據無法進行同步,容易造成數據丟失

    二、實時同步的工作原理

    1、 創建要存儲數據的目錄
    2、 利用實時同步的軟件監控我們進行備份的數據目錄
    3、 利用rsync服務進行數據推送傳輸備份

    (三)、實時同步軟件部署

    1)、安裝inotify軟件
    yum install -y inotify-tools
    2)、編寫實時同步的腳本
    #!/bin/bash
    ####################
    inotifywait -mrq --format "%w%f" -e create,delete,moved_to,close_write /data|\
    while read line
    do
    rsync -az --delete /data/ [email protected]::backup --password-file=/etc/rsync.password
    done
    說明:在編寫同步腳本之前需要保證rsyc守護進程方式同步正常

    (四)、inotify命令說明

    inotifywait
    -m|--monitor 始終保持事件監聽狀態
    -r 進行遞歸監控
    -q|--quiet 將無用的輸出信息,不進行顯示
    --timefmt <fmt> 設定日期的格式
    man strftime 獲取更多時間參數信息
    --format <fmt> 命令執行過程中,輸出的信息格式
    -e 指定監控的事件信息
    man inotifywait 查看所有參數說明和所有可以監控的事件信息
    總結主要用到的事件信息:
    create創建、delete刪除、moved_to移入、close_write修改
    PS:因爲rsync是單線程方式監控目錄,所以如果文件數量達到百萬級會降低實時同步的效率,這時候我們可以考慮使用sersync+rsync的方式進行實時同步,sersync是國內開發者開發的一款軟件,使用c++ 編寫而成,他的優點:多線程方式工作,提高同步效率,使用方便,配置簡單,感興趣的小夥伴可以自行研究

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