在生產(chǎn)環(huán)境,有時(shí)會(huì)需要兩臺(tái)主機(jī)的特定目錄實(shí)現(xiàn)實(shí)時(shí)同步。比如,將NFS共享目錄的數(shù)據(jù)文件,自動(dòng)實(shí)時(shí)同步到備份的服務(wù)器特定目錄中
inotify + rsync 方式實(shí)現(xiàn)數(shù)據(jù)同步
sersync :金山公司周洋在 inotify 軟件基礎(chǔ)上進(jìn)行開(kāi)發(fā)的,功能更加強(qiáng)大
1.需要利用監(jiān)控服務(wù)(inotify),監(jiān)控同步數(shù)據(jù)服務(wù)器目錄中信息的變化
2.發(fā)現(xiàn)目錄中的數(shù)據(jù)產(chǎn)生變化,就利用rsync服務(wù)推送到備份服務(wù)器上
異步的文件系統(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
inotify-tools
sersync
lrsyncd
inotify 對(duì)同步數(shù)據(jù)目錄信息的監(jiān)控
rsync 完成對(duì)數(shù)據(jù)的同步
利用腳本進(jìn)行結(jié)合
# 列出下面的文件,說(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
# 參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
# 安裝(基于epel源)
[root@CentOS7-02 ~]#yum -y install 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ì)
-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) |
%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"
%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'
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
#監(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
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
#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
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è)端口上,等待客戶端的連接。
-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-file | daemon模式時(shí)的密碼文件,可以從中讀取密碼實(shí)現(xiàn)非交互式。注意,這不是遠(yuǎn)程shell認(rèn)證的密碼,而是rsync模塊認(rèn)證的密碼。 |
-W --whole-file | rsync將不再使用增量傳輸,而是全量傳輸。在網(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> |
###### 服務(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
# 在客戶端執(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://jinyejixie.com/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)
猜你還喜歡下面的內(nèi)容