rsync+inotify同步備份

來自bing壁紙

簡介

rsync是一個同步工具,支持增量和全量備份。配合inotify可以實現(xiàn)同步備份。

實驗準(zhǔn)備

192.168.80.10,192.168.80.20這兩臺服務(wù)器分別為源主機和目標(biāo)主機,分別在兩臺服務(wù)器上建立/rsyncsrc/rsyncdes用來存放實驗文件。

安裝

一、僅rsync的方式

對于源主機而言是將文件“推送到(push)目標(biāo)主機”
對于目標(biāo)主機而言是將文件從源主機“拉取到(pull)本地”

下載rsync

yum -y install rsync 

由于rsync支持ssh,rsync兩種協(xié)議,下面分別對這兩種進(jìn)行實驗:

a. 使用ssh協(xié)議進(jìn)行同步

在源主機/rsyncsrc下建立文件
image.png
將源主機內(nèi)容推送到目標(biāo)主機
rsync -avz /rsyncsrc/* root@192.168.80.20:/rsyncdes

a: 遞歸保留文件的屬性
v: 顯示過程
z: 壓縮

image.png

可以看到目標(biāo)主機有了源主機推送的內(nèi)容

同理,在目標(biāo)主機將文件推送到源主機
rsync -avz /rsyncdes/* root@192.168.80.10:/rsyncsrc/
image.png

Note: 若要配置免密登陸
ssh-keygen -t rsa
ssh-copy-id hostname

b.使用rsync協(xié)議進(jìn)行同步

修改/etc/rsyncd.conf
添加如下內(nèi)容

uid = nobody
gid = nobody
use chroot = yes
address = 192.168.80.10
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
[web]
    path = /rsyncsrc
    read only = no
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
    auth users = test1
    secrets file = /etc/rsyncd_users.db

新建/etc/rsyncd_users.db用于保存rsync所需的用戶和密碼
test1:123456

修改權(quán)限(必須,否則不會生效)
chmod 600 /etc/rsyncd_users.db
啟動服務(wù)
rsync --daemon
查看進(jìn)程
image.png

測試

下行同步(下載):
rsync -avz rsync://test1@192.168.80.10/web/ /rsyncdes/
上行同步 (上傳)
rsync -avz /rsyncdes/* rsync://test1@192.168.80.10/web

拓展: --delete 刪除本地比源主機上多的文件(源主機沒有,本地有)

Note:由于在目標(biāo)主機是用nobody進(jìn)行操作的,因此對于源主機的/rsyncsrc目錄可能沒有足夠的權(quán)限去操作。因此可以配合ACL來增加特殊權(quán)限。
setfacl -m u:nobody:rwx /rsyncsrc

拓展

rsync協(xié)議若想要免密登陸,由客戶端添加一個環(huán)境變量,export RSYNC_PASSWORD=虛擬用戶密碼

二、rsync+inotify 同步備份

解壓inotify源碼文件并編譯安裝。
inotifywait -mrq -e create,modify,delete /rsyncsrc/ &

其中 m:保持監(jiān)聽狀態(tài)
r 遞歸查詢
q 只打印監(jiān)控事件的信息
e 后面跟具體的事件

基于以上,可以寫個腳本用來實時同步備份文件(在源主機上執(zhí)行)

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /rsyncsrc/"
RSYNC_CMD="rsync -azH --delete /rsyncsrc/ root@192.168.80.20:/rsyncdes"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 5 ] ; then
        $RSYNC_CMD
    fi
done

結(jié)果如下:


image.png
image.png
試驗成功!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容