從定時(shí)到實(shí)時(shí):用 inotify+rsync 實(shí)現(xiàn)文件高效同步
在上一篇文章:一文搞懂 rsync:原理剖析 + Rocky Linux 主機(jī)同步部署實(shí)戰(zhàn)
我們實(shí)現(xiàn)了通過(guò) rsync + cron 的方式定時(shí)同步文件,適用于對(duì)實(shí)時(shí)性要求不高的場(chǎng)景。比如網(wǎng)站內(nèi)容部署、日志備份、圖片上傳等。然而在很多實(shí)際應(yīng)用中,我們希望文件一旦發(fā)生變更,馬上同步到目標(biāo)位置。
這時(shí),我們就可以用今天要介紹的組合:inotify + rsync 實(shí)時(shí)文件同步方案。
1. inotify 是什么?
inotify 是 Linux 內(nèi)核提供的一種機(jī)制,可以監(jiān)聽文件系統(tǒng)的變化,比如文件的創(chuàng)建、修改、刪除、移動(dòng)等操作。我們可以通過(guò)工具如 inotifywait 來(lái)利用它。
實(shí)現(xiàn)思路:通過(guò) inotify 實(shí)時(shí)監(jiān)聽源目錄,當(dāng)檢測(cè)到變化時(shí),立即觸發(fā)一次 rsync 同步操作,極大地提升了效率和數(shù)據(jù)一致性。
inotify+rsync組合優(yōu)勢(shì):
- 實(shí)時(shí)響應(yīng):監(jiān)控文件變化,立即觸發(fā)同步
- 資源占用低:相比定時(shí)輪詢更省資源
- 部署簡(jiǎn)單:無(wú)需額外服務(wù)進(jìn)程,腳本即可運(yùn)行
2. 實(shí)戰(zhàn)部署
上一篇文章已經(jīng)將rsync部署好了,這次只需要安裝inotify就行.
在源主機(jī)(10.0.0.110)上操作:
(1) 安裝 inotify-tools
Rocky Linux 默認(rèn)的軟件倉(cāng)庫(kù)中 沒有inotify-tools,所以我們需要啟用 EPEL源才能安裝。
# 安裝epel源
dnf install -y epel-release
# 安裝inotify-tools
dnf install inotify-tools -y
# 檢查
inotifywait --help
(2) 編寫實(shí)時(shí)同步腳本
我們編寫一個(gè)腳本 /opt/realtime_rsync.sh,實(shí)現(xiàn)文件變更即同步。
#!/bin/bash
# 實(shí)時(shí)同步腳本:部署在 10.0.0.110 上(源服務(wù)器)
SRC="/var/www/html" # 本地源目錄,末尾必須加斜杠
DEST="10.0.0.111:/backup/web" # 遠(yuǎn)程目標(biāo)地址
LOG="/var/log/realtime_rsync.log" # 日志文件位置
while inotifywait -r -e modify,create,delete,move "$SRC"
do
rsync -azP --delete $EXCLUDE"$SRC""$DEST" >> "$LOG" 2>&1
echo"[$(date)] 同步完成" >> "$LOG"
# 可選:避免頻繁觸發(fā)同步,稍作延遲
sleep 2
done
參數(shù)說(shuō)明:
命令 | 作用 |
| 遞歸監(jiān)聽目錄及其子目錄的修改/創(chuàng)建/刪除/移動(dòng)事件 |
| 增量歸檔壓縮傳輸,顯示進(jìn)度 |
| 刪除目標(biāo)中源目錄已刪除的文件,實(shí)現(xiàn)鏡像同步 |
| 把輸出追加到日志文件中便于排查問題 |
(3) 配置SSH 免密登錄
為了實(shí)現(xiàn)自動(dòng)同步,建議你在 10.0.0.110 上配置對(duì) 10.0.0.111 的 SSH 免密登錄
ssh-keygen -t rsa # 一路回車
ssh-copy-id root@10.0.0.111
# 輸入密碼
# 測(cè)試
ssh root@10.0.0.111
(4) 后臺(tái)運(yùn)行腳本(推薦)
nohup bash /opt/realtime_rsync.sh &
(5) 測(cè)試驗(yàn)證
在源主機(jī)上同步目錄創(chuàng)建新文件
cd /var/www/html
touch touch test1.txt
從圖片可以看到新建的文件已經(jīng)自動(dòng)完成了同步:
檢查日志的同步情況:
【溫馨提示】這個(gè)日志一直會(huì)生成,建議做個(gè)定時(shí)任務(wù)定時(shí)清理,不然會(huì)導(dǎo)致磁盤空間。
3. 應(yīng)用場(chǎng)景推薦
- Web 服務(wù)器部署代碼實(shí)時(shí)同步
- 圖片/視頻上傳目錄備份到云服務(wù)器
- 多機(jī)共享一個(gè)工作目錄(只讀同步)
- 日志文件收集實(shí)時(shí)傳送到分析服務(wù)
本次分享結(jié)束啦,后期會(huì)更新更多技術(shù)干貨文章!