自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從定時(shí)到實(shí)時(shí):用 inotify+rsync 實(shí)現(xiàn)文件高效同步

運(yùn)維 系統(tǒng)運(yùn)維
在很多實(shí)際應(yīng)用中,我們希望文件一旦發(fā)生變更,馬上同步到目標(biāo)位置這時(shí),我們就可以用今天要介紹的組合:inotify + rsync 實(shí)時(shí)文件同步方案。

在上一篇文章:一文搞懂 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ō)明:

命令

作用

inotifywait -r -e modify,create,delete,move

遞歸監(jiān)聽目錄及其子目錄的修改/創(chuàng)建/刪除/移動(dòng)事件

rsync -azP

增量歸檔壓縮傳輸,顯示進(jìn)度

--delete

刪除目標(biāo)中源目錄已刪除的文件,實(shí)現(xiàn)鏡像同步

>> $LOG

把輸出追加到日志文件中便于排查問題

(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ù)干貨文章!

責(zé)任編輯:趙寧寧 來(lái)源: 運(yùn)維李哥不背鍋
相關(guān)推薦

2011-06-22 10:37:08

rsyncinotify

2023-01-31 08:34:19

2009-03-09 20:57:28

linuxrsync文件同步備份

2024-10-18 11:39:55

MySQL數(shù)據(jù)檢索

2024-07-03 08:02:19

MySQL數(shù)據(jù)搜索

2014-08-14 10:52:49

windowslinux

2022-05-31 07:40:44

LsyncdCentOS7

2024-01-03 08:14:33

GreatSQLMyCat庫(kù)名字

2024-11-04 16:01:01

2017-01-04 13:42:35

MINIFILTER文件重定向源碼

2017-06-29 09:28:37

OracleMariaDB復(fù)制

2024-01-19 16:35:23

2024-08-02 09:36:03

2020-09-24 08:45:10

React架構(gòu)源碼

2022-07-25 11:33:48

Python大文件

2010-05-17 14:00:07

MySql數(shù)據(jù)庫(kù)

2018-08-03 15:28:51

數(shù)據(jù)平臺(tái)數(shù)據(jù)倉(cāng)庫(kù)OLTP

2021-05-27 09:57:55

Inotify監(jiān)控系統(tǒng)

2023-11-07 12:07:22

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)