rsync+inotify實(shí)時(shí)同步-創(chuàng)新互聯(lián)

1 背景

rsync+inotify實(shí)時(shí)同步

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)內(nèi)蒙古服務(wù)器托管的網(wǎng)絡(luò)公司,有著豐富的建站經(jīng)驗(yàn)和案例。
在生產(chǎn)環(huán)境,有時(shí)會(huì)需要兩臺(tái)主機(jī)的特定目錄實(shí)現(xiàn)實(shí)時(shí)同步。比如,將NFS共享目錄的數(shù)據(jù)文件,自動(dòng)實(shí)時(shí)同步到備份的服務(wù)器特定目錄中

2 實(shí)時(shí)同步技術(shù)簡(jiǎn)介

2.1 實(shí)現(xiàn)實(shí)時(shí)同步的方法

inotify + rsync 方式實(shí)現(xiàn)數(shù)據(jù)同步
sersync :金山公司周洋在 inotify 軟件基礎(chǔ)上進(jìn)行開(kāi)發(fā)的,功能更加強(qiáng)大

2.2 工作原理

1.需要利用監(jiān)控服務(wù)(inotify),監(jiān)控同步數(shù)據(jù)服務(wù)器目錄中信息的變化
2.發(fā)現(xiàn)目錄中的數(shù)據(jù)產(chǎn)生變化,就利用rsync服務(wù)推送到備份服務(wù)器上

2.3 inotify

異步的文件系統(tǒng)事件監(jiān)控機(jī)制,利用事件驅(qū)動(dòng)機(jī)制,而無(wú)須通過(guò)諸如cron等的輪詢機(jī)制來(lái)獲取事件,linux內(nèi)核從2.6.13起支持 inotify,通過(guò)inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動(dòng)等各種事件

[root@CentOS7-02 ~]#grep -i inotify /boot/config-3.10.0-1062.el7.x86_64 
CONFIG_INOTIFY_USER=y

2.4 實(shí)現(xiàn)inotify的軟件

inotify-tools
sersync
lrsyncd

2.5 inotify+rsync使用方式

inotify 對(duì)同步數(shù)據(jù)目錄信息的監(jiān)控
rsync 完成對(duì)數(shù)據(jù)的同步
利用腳本進(jìn)行結(jié)合

3 實(shí)現(xiàn)inotify

3.1 前提條件,內(nèi)核版本不能小于2.6.13,執(zhí)行下面命令查看內(nèi)核是否支持inotify

# 列出下面的文件,說(shuō)明服務(wù)器內(nèi)核支持inotify
[root@CentOS7-02 ~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Dec 20 19:42 max_queued_events
-rw-r--r-- 1 root root 0 Dec 20 19:42 max_user_instances
-rw-r--r-- 1 root root 0 Dec 20 19:42 max_user_watches

# inotify內(nèi)核參數(shù)說(shuō)明:
max_queued_events:inotify事件隊(duì)列大長(zhǎng)度,如值太小會(huì)出現(xiàn) Event Queue Overflow 錯(cuò)誤,默認(rèn)值:16384
max_user_instances:每個(gè)用戶創(chuàng)建inotify實(shí)例大值,默認(rèn)值:128
max_user_watches:可以監(jiān)視的文件數(shù)量(單進(jìn)程),默認(rèn)值:8192

#上面的參數(shù)可以通過(guò)修改/etc/sysctl.conf文件來(lái)調(diào)整大小,如下所示
[root@CentOS7-02 ~]#vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000

[root@CentOS7-02 ~]#sysctl -p
fs.inotify.max_queued_events = 66666
fs.inotify.max_user_watches = 100000

[root@CentOS7-02 ~]#cat /proc/sys/fs/inotify/*
66666
128
100000

3.2 inotify-tools工具

# 參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
# 安裝(基于epel源)
[root@CentOS7-02 ~]#yum -y install inotify-tools

3.2.1 inotify-tools包主要工具

inotifywait: 在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open ,close,delete等)發(fā)生,常用于實(shí)時(shí)同步的目錄監(jiān)控
inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計(jì)數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計(jì)
3.2.1.1 inotifywait 命令常見(jiàn)選項(xiàng)
-m,--monitor始終保持事件監(jiān)聽(tīng)
-d, --daemon以守護(hù)進(jìn)程方式執(zhí)行,和-m相似,配合-o使用
-r, --recursive遞歸監(jiān)控目錄數(shù)據(jù)信息變化
-q, --quiet輸出少量事件信息
--exclude指定排除文件或目錄,使用擴(kuò)展的正則表達(dá)式匹配的模式實(shí)現(xiàn)
--excludei和exclude相似,不區(qū)分大小寫(xiě)
-o, --outfile打印事件到文件中,相當(dāng)于標(biāo)準(zhǔn)正確輸出,注意:使用絕對(duì)路徑
-s, --syslogOutput發(fā)送錯(cuò)誤到syslog相當(dāng)于標(biāo)準(zhǔn)錯(cuò)誤輸出
--timefmt指定時(shí)間輸出格式
--format指定的輸出格式;即實(shí)際監(jiān)控輸出內(nèi)容
-e指定監(jiān)聽(tīng)指定的事件,如果省略,表示所有事件都進(jìn)行監(jiān)聽(tīng)
3.2.1.2 inotifywait的--timefmt時(shí)間格式
%Y年份信息,包含世紀(jì)信息
%y年份信息,不包括世紀(jì)信息
%m顯示月份,范圍 01-12
%d每月的第幾天,范圍是 01-31
%H小時(shí)信息,使用 24小時(shí)制,范圍 00-23
%M分鐘,范圍 00-59
范例
--timefmt "%Y-%m-%d %H:%M"
3.2.1.3 inotifywait的--format格式定義
%T輸出時(shí)間格式中定義的時(shí)間格式信息,通過(guò) --timefmt option 語(yǔ)法格式指定時(shí)間信息
%w事件出現(xiàn)時(shí),監(jiān)控文件或目錄的名稱信息
%f事件出現(xiàn)時(shí),將顯示監(jiān)控目錄下觸發(fā)事件的文件或目錄信息,否則為空
%e顯示發(fā)生的事件信息,不同的事件默認(rèn)用逗號(hào)分隔
%Xe顯示發(fā)生的事件信息,不同的事件指定用X進(jìn)行分隔
范例
--format "%T %w%f event: %;e"
--format '%T %w %f'
3.2.1.4 inotifywait -e選項(xiàng)指定的事件類型
create文件或目錄創(chuàng)建
delete文件或目錄被刪除
modify文件或目錄內(nèi)容被寫(xiě)入
attrib文件或目錄屬性改變
close_write文件或目錄關(guān)閉,在寫(xiě)入模式打開(kāi)之后關(guān)閉的
close_nowrite文件或目錄關(guān)閉,在只讀模式打開(kāi)之后關(guān)閉的
close文件或目錄關(guān)閉,不管讀或是寫(xiě)模式
open文件或目錄被打開(kāi)
moved_to文件或目錄被移動(dòng)到監(jiān)控的目錄中
moved_from文件或目錄從監(jiān)控的目錄中被移動(dòng)
move文件或目錄不管移動(dòng)到或是移出監(jiān)控目錄都觸發(fā)事件
access文件或目錄內(nèi)容被讀取
delete_self文件或目錄被刪除,目錄本身被刪除
unmount取消掛載
范例
-e create,delete,moved_to,close_write, attrib
3.2.1.5 inotify使用范例
#監(jiān)控一次性事件
inotifywait /data

#持續(xù)前臺(tái)監(jiān)控
inotifywait -mrq /data

#持續(xù)后臺(tái)監(jiān)控,并記錄日志
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"

#持續(xù)前臺(tái)監(jiān)控特定事件
inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
create,delete,moved_to,close_write,attrib

4 rsync

rsync 常用于做為 linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具,實(shí)現(xiàn)實(shí)現(xiàn)遠(yuǎn)程同步,支持本地復(fù)制,或者與其他SSH、rsync主機(jī)同步數(shù)據(jù),支持增量備份,配合任務(wù)計(jì)劃,rsync能實(shí)現(xiàn)定時(shí)或間隔同步,配合inotify或sersync,可以實(shí)現(xiàn)觸發(fā)式的實(shí)時(shí)數(shù)據(jù)同步
官方網(wǎng)站: http://rsync.samba.org/
軟件包:rsync,rsync-daemon(CentOS 8)
服務(wù)文件:/usr/lib/systemd/system/rsyncd.service
配置文件:/etc/rsyncd.conf
端口:873/tcp

4.1 rsync命令

4.1.1 命令格式

#Local:
rsync [OPTION...] SRC... [DEST]

#Access via remote shell:
Pull:
rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST:DEST

#Access via rsync daemon:
Pull:
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push:
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

4.1.2 工作方式

1. 本地文件系統(tǒng)上實(shí)現(xiàn)同步。命令行語(yǔ)法格式為上述"Local"段的格式。
2. 本地主機(jī)使用遠(yuǎn)程shell和遠(yuǎn)程主機(jī)通信。命令行語(yǔ)法格式為上述"Access via remote shell"段的格式。
3. 本地主機(jī)通過(guò)網(wǎng)絡(luò)套接字連接遠(yuǎn)程主機(jī)上的rsync daemon。命令行語(yǔ)法格式為上述"Access via rsync daemon"段的格式。

前兩者的本質(zhì)是通過(guò)本地或遠(yuǎn)程shell,而第3種方式則是讓遠(yuǎn)程主機(jī)上運(yùn)行rsyncd服務(wù),使其監(jiān)聽(tīng)在一個(gè)端口上,等待客戶端的連接。

4.1.3 常見(jiàn)選項(xiàng)

-v顯示rsync過(guò)程中詳細(xì)信息??梢允褂?quot;-vvvv"獲取更詳細(xì)信息。
-P顯示文件傳輸?shù)倪M(jìn)度信息。(實(shí)際上"-P"="--partial --progress",其中的"--progress"才是顯示進(jìn)度信息的)。
-n --dry-run僅測(cè)試傳輸,而不實(shí)際傳輸。常和"-vvvv"配合使用來(lái)查看rsync是如何工作的。
-a --archive歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。
-r --recursive遞歸到目錄中去。
-t --times保持mtime屬性。強(qiáng)烈建議任何時(shí)候都加上"-t",否則目標(biāo)文件mtime會(huì)設(shè)置為系統(tǒng)時(shí)間,導(dǎo)致下次更新檢查出mtime不同從而導(dǎo)致增量傳輸無(wú)效。
-o --owner保持owner屬性(屬主)。
-g --group保持group屬性(屬組)。
-p --perms保持perms屬性(權(quán)限,不包括特殊權(quán)限)。
-D是"--device --specials"選項(xiàng)的組合,即也拷貝設(shè)備文件和特殊文件。
-l --links如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對(duì)象
-z傳輸時(shí)進(jìn)行壓縮提高效率
-R --relative使用相對(duì)路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發(fā)送給服務(wù)端,包括它們的屬性。
--size-only默認(rèn)算法是檢查文件大小和mtime不同的文件,使用此選項(xiàng)將只檢查文件大小。
-u --update僅在源mtime比目標(biāo)已存在文件的mtime新時(shí)才拷貝。注意,該選項(xiàng)是接收端判斷的,不會(huì)影響刪除行為
-d --dirs以不遞歸的方式拷貝目錄本身。默認(rèn)遞歸時(shí),如果源為"dir1/file1",則不會(huì)拷貝dir1目錄,使用該選項(xiàng)將拷貝dir1但不拷貝file1。
--max-size限制rsync傳輸?shù)拇笪募笮 ?梢允褂脝挝缓缶Y,還可以是一個(gè)小數(shù)值(例如:"--max-size=1.5m")
--min-size限制rsync傳輸?shù)淖钚∥募笮?。這可以用于禁止傳輸小文件或那些垃圾文件。
--exclude指定排除規(guī)則來(lái)排除不需要傳輸?shù)奈募?/td>
--delete以SRC為主,對(duì)DEST進(jìn)行同步。多則刪之,少則補(bǔ)之。注意"--delete"是在接收端執(zhí)行的,所以它是在exclude/include規(guī)則生效之后才執(zhí)行的。
-b --backup對(duì)目標(biāo)上已存在的文件做一個(gè)備份,備份的文件名后默認(rèn)使用"~"做后綴。
--backup-dir指定備份文件的保存路徑。不指定時(shí)默認(rèn)和待備份文件保存在同一目錄下。
-e指定所要使用的遠(yuǎn)程shell程序,默認(rèn)為ssh。
--port連接daemon時(shí)使用的端口號(hào),默認(rèn)為873端口。
--password-filedaemon模式時(shí)的密碼文件,可以從中讀取密碼實(shí)現(xiàn)非交互式。注意,這不是遠(yuǎn)程shell認(rèn)證的密碼,而是rsync模塊認(rèn)證的密碼。
-W --whole-filersync將不再使用增量傳輸,而是全量傳輸。在網(wǎng)絡(luò)帶寬高于磁盤(pán)帶寬時(shí),該選項(xiàng)比增量傳輸更高效。
--existing要求只更新目標(biāo)端已存在的文件,目標(biāo)端還不存在的文件不傳輸。注意,使用相對(duì)路徑時(shí)如果上層目錄不存在也不會(huì)傳輸。
--ignore-existing要求只更新目標(biāo)端不存在的文件。和"--existing"結(jié)合使用有特殊功能
--remove-source-files要求刪除源端已經(jīng)成功傳輸?shù)奈募?/td>

4.2 以獨(dú)立的方式運(yùn)行rsync

###### 服務(wù)器端操作 ######

# 創(chuàng)建rsync服務(wù)器的配置文件
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.7.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

# 準(zhǔn)備目錄
mkdir /backup

# 生成驗(yàn)證文件
echo "rsyncuser:123.com" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

# 啟動(dòng)rsync服務(wù)
rsync --daemon #可加入/etc/rc.d/rc.local實(shí)現(xiàn)開(kāi)機(jī)啟動(dòng)
systemctl start rsyncd #CentOS 7 以上版本

###### 客戶端操作 ######

# 配置密碼文件
echo "123.com" > /etc/rsync.pass
chmod 600 /etc/rsync.pass #此為必要項(xiàng)

# 測(cè)試數(shù)據(jù)同步
rsync -avz --delete --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服務(wù)器IP::backup

5 編寫(xiě)inotify_rsync.sh腳本實(shí)現(xiàn)實(shí)時(shí)同步

# 在客戶端執(zhí)行該腳本
#!/bin/bash
SRC='/data/'
DEST='rsyncuser@rsync服務(wù)器IP::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} | while read DATE TIME DIR FILE ; do
    FILEPATH=${DIR}${FILE}
    rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>  /var/log/changelist.log
done

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁(yè)標(biāo)題:rsync+inotify實(shí)時(shí)同步-創(chuàng)新互聯(lián)
分享地址:http://muchs.cn/article26/dpsjcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站策劃網(wǎng)站內(nèi)鏈、做網(wǎng)站企業(yè)建站、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

綿陽(yáng)服務(wù)器托管