
來自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