rsync實現文件備份全攻略

簡介shell

rsync=remote sync,即遠程數據同步備份工具,最大的優點就是快速安全

特性bash

  • 能夠鏡像保存整個目錄樹和文件系統;服務器

  • 能夠很容易作到保持原來文件的權限、時間、軟硬連接等等;ssh

  • 無須特殊權限便可安裝; socket

優點tcp

  • 快速:ide

    • 第一次同步時 rsync 會複製所有內容,但在下一次只傳輸修改過的文件;工具

    • rsync 在傳輸數據的過程當中能夠實行壓縮及解壓縮操做,所以可使用更少的帶寬; 測試

  • 安全:

    • 可使用scp、ssh等方式來傳輸文件,固然也能夠經過直接的socket鏈接;


工做模式

  • shell模式:也稱本地模式,相似cp;

  • 遠程shell模式:此時可使用ssh協議承載其數據傳輸過程;

  • 列表模式:僅列出源的內容,使用選項-nv便可,相似ls;

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


經常使用使用選項一級

-n:# 測試指令,在不肯定命令可否能按照意願執行時,務必要先進行測試
-v:--verbose # 詳細輸出模式
-q:--quiet # 靜默模式
-c:--checksum # 開啓校驗功能,強制對文件傳輸進行校驗
-r:--recursive # 遞歸複製
-a:--archive # 歸檔,保留文件的原有屬性,等同於-rlptgoD,通常都使用此選項
-p:perms # 保留文件的權限
-t:times # 保留文件的時間戳,很重要,保持源端文件和目的端文件的mtime一致能避免重複同步問題
-l:links # 保留文件的符號連接
-g:group # 保留文件的屬組
-o:owner # 保留文件的屬主
-D:--devices # 保留設備文件

注:對-r選項的重點解釋

wKiom1NFKRyR2GNEAAL72OtFfn8117.jpg


經常使用使用選項二級

-e ssh # 表示使用ssh協議做承載(rsync不具有加密功能)
-z # 對文件壓縮後傳輸
--progress # 顯示每一個文件傳輸進度條
--stats # 顯示傳輸文件的統計信息
--existing # 不一樣步新文件,只同步已存在目的端的文件
--ignore-existing # 不更新已存在文件,只同步新文件
--delete # 目的端刪除源端不存在的文件,即保持和源端一致
--delete-before # 默認刪除策略,同步前刪除目的端文件
--delete-after # 刪除策略,同步後刪除目的端文件
--delete-excluded # 專門指定需在目的端刪除的文件,後跟--exclude選項
--exclude=PATTERN # 源端匹配PATTERN模式的文件,屏蔽其同步
--exclude-from=FILE # 從文件中讀取PATTERN


配置rsync以daemon方式運行

設定rsync服務器端

安裝並啓動xinetd

# 安裝程序
yum -y install xinetd rsync
# 配置文件設置
# vi /etc/rsyncd.conf
# Global Settings
uid = nobody            # 運行rsync的用戶
gid = nobody            # 運行rsync的組
use chroot = no         # 關閉chroot
max connections = 2     # 最大鏈接數
strict mode = yes       # 開啓對密碼文件權限的嚴格限制,不能被除rsync運行用戶之外的用戶訪問,即密碼文件權限通常得是600
pid file = /var/run/rsyncd.pid  # pid文件
log file = /var/log/rsyncd.log  # 日誌文件
# Directory Settings
[mydata]                # 對於備份目錄的模塊名,在同步時使用
path = /mydata/data     # 需備份的數據目錄
ignore errors = yes     # 同步時,忽略錯誤
read only = no          # 非只讀
write only = no         # 非只寫
hosts allow = 172.16.0.0/16             # 訪問控制,容許訪問的來源IP段
hosts deny = *                          # 訪問控制,不容許訪問的來源IP,此處*表明所有
list = false            # 不容許列出目錄
uid = root              # 會覆蓋global settings的相關配置
gid = root              # 同上
auth users = jason      # 容許同步數據的用戶,在此只有一個jason
secrets file = /etc/rsyncd.passwd       # 密碼文件目錄

配置密碼文件/etc/rsyncd.passwd

# 格式:username:password,
# vi /etc/rsyncd.passwd
    jason:jason123
chmod 600 /etc/rsyncd.passwd

配置服務啓動

chkconfig rsync on
service xinetd start
# 注:rsync被xinetd調用後監聽在873/tcp端口


客戶端配置

客戶端也必須配置密碼文件,但格式略有不一樣

格式:password
# vi /etc/rsyncd.passwd
    jason123
chmod 600 /etc/rsyncd.passwd

測試數據同步的用法

wKiom1NFK66QhPqHAAWiZRFoduw664.jpg

若是須要作週期性操做,則須要將命令寫入crontab中

# crontab -e
*/5 * * * * /usr/bin/rsync -a --password-file=/etc/rsyncd.passwd jason@172.16.251.182::mydata /data &>/dev/null

高級應用:rsync+inotify實現數據實時同步

簡介

  • rsync和crontab結合雖然能夠實現數據定時同步,但對於須要實時備份數據的場景就不適用了,此時就可藉助於inotify了;

  • inotify其實是Linux Kernel中的一個特性,能夠監控文件系統,好比刪除、讀、寫和卸載操做等;

  • 能夠利用inotify的監控功能,當待備份文件出現改變(如新增,刪除,修改等)時,及時通知rsync進行數據同步操做,就實現了實時同步的目的;

原理說明

由於是發起rsync的主動同步,並且是推送(即PUSH)數據,只能是從rsync客戶端向rsync服務器端推送數據,這點與rsync+crontab形式的從服務器端拉取(即PULL)數據不一樣,區別以下

wKiom1NFLa_TOibFAAEXSSwYCwQ311.jpg

具體部署

  • rsync的服務器端和客戶端的配置與上面所述基本相同,再也不贅述;

  • 在rsync客戶端再也不是拉取數據,而是推送數據,首先安裝inotify-tools,其中包含所需的inotifywait文件系統監控工具

    yum -y install inotify-tools
  • 而後配置運行一個後臺程序,用以實時監控待備份的數據目錄,下面用例中監控本地/tmp目錄,將數據同步至rsyns服務器的mydata模塊對應的目錄下

wKiom1NFLiHxJYxyAARAZF6HJcw005.jpg

更多技巧

由於inotify是針對文件系統的監控,很是靈敏,爲了防止一些臨時文件或者大文件的不斷同步問題,可利用以下技巧:

  • 解決編輯文件時產生臨時文件同步:--exclude ".*(swp|swx|~)"

  • 解決寫入大文件時不斷同步的問題:-e close_write,delete,create,attrib

相關文章
相關標籤/搜索