

在生產(chǎn)環(huán)境,有時會需要兩臺主機的特定目錄實現(xiàn)實時同步。比如,將NFS共享目錄的數(shù)據(jù)文件,自動實時同步到備份的服務器特定目錄中inotify + rsync 方式實現(xiàn)數(shù)據(jù)同步
sersync :金山公司周洋在 inotify 軟件基礎上進行開發(fā)的,功能更加強大1.需要利用監(jiān)控服務(inotify),監(jiān)控同步數(shù)據(jù)服務器目錄中信息的變化
2.發(fā)現(xiàn)目錄中的數(shù)據(jù)產(chǎn)生變化,就利用rsync服務推送到備份服務器上異步的文件系統(tǒng)事件監(jiān)控機制,利用事件驅(qū)動機制,而無須通過諸如cron等的輪詢機制來獲取事件,linux內(nèi)核從2.6.13起支持 inotify,通過inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動等各種事件
[root@CentOS7-02 ~]#grep -i inotify /boot/config-3.10.0-1062.el7.x86_64
CONFIG_INOTIFY_USER=yinotify-tools
sersync
lrsyncdinotify 對同步數(shù)據(jù)目錄信息的監(jiān)控
rsync 完成對數(shù)據(jù)的同步
利用腳本進行結合# 列出下面的文件,說明服務器內(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ù)說明:
max_queued_events:inotify事件隊列大長度,如值太小會出現(xiàn) Event Queue Overflow 錯誤,默認值:16384
max_user_instances:每個用戶創(chuàng)建inotify實例大值,默認值:128
max_user_watches:可以監(jiān)視的文件數(shù)量(單進程),默認值:8192
#上面的參數(shù)可以通過修改/etc/sysctl.conf文件來調(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-toolsinotifywait: 在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open ,close,delete等)發(fā)生,常用于實時同步的目錄監(jiān)控
inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計| -m,--monitor | 始終保持事件監(jiān)聽 |
| -d, --daemon | 以守護進程方式執(zhí)行,和-m相似,配合-o使用 |
| -r, --recursive | 遞歸監(jiān)控目錄數(shù)據(jù)信息變化 |
| -q, --quiet | 輸出少量事件信息 |
| --exclude | 指定排除文件或目錄,使用擴展的正則表達式匹配的模式實現(xiàn) |
| --excludei | 和exclude相似,不區(qū)分大小寫 |
| -o, --outfile | 打印事件到文件中,相當于標準正確輸出,注意:使用絕對路徑 |
| -s, --syslogOutput | 發(fā)送錯誤到syslog相當于標準錯誤輸出 |
| --timefmt | 指定時間輸出格式 |
| --format | 指定的輸出格式;即實際監(jiān)控輸出內(nèi)容 |
| -e | 指定監(jiān)聽指定的事件,如果省略,表示所有事件都進行監(jiān)聽 |
| %Y | 年份信息,包含世紀信息 |
| %y | 年份信息,不包括世紀信息 |
| %m | 顯示月份,范圍 01-12 |
| %d | 每月的第幾天,范圍是 01-31 |
| %H | 小時信息,使用 24小時制,范圍 00-23 |
| %M | 分鐘,范圍 00-59 |
--timefmt "%Y-%m-%d %H:%M"| %T | 輸出時間格式中定義的時間格式信息,通過 --timefmt option 語法格式指定時間信息 |
| %w | 事件出現(xiàn)時,監(jiān)控文件或目錄的名稱信息 |
| %f | 事件出現(xiàn)時,將顯示監(jiān)控目錄下觸發(fā)事件的文件或目錄信息,否則為空 |
| %e | 顯示發(fā)生的事件信息,不同的事件默認用逗號分隔 |
| %Xe | 顯示發(fā)生的事件信息,不同的事件指定用X進行分隔 |
--format "%T %w%f event: %;e"
--format '%T %w %f'| create | 文件或目錄創(chuàng)建 |
| delete | 文件或目錄被刪除 |
| modify | 文件或目錄內(nèi)容被寫入 |
| attrib | 文件或目錄屬性改變 |
| close_write | 文件或目錄關閉,在寫入模式打開之后關閉的 |
| close_nowrite | 文件或目錄關閉,在只讀模式打開之后關閉的 |
| close | 文件或目錄關閉,不管讀或是寫模式 |
| open | 文件或目錄被打開 |
| moved_to | 文件或目錄被移動到監(jiān)控的目錄中 |
| moved_from | 文件或目錄從監(jiān)控的目錄中被移動 |
| move | 文件或目錄不管移動到或是移出監(jiān)控目錄都觸發(fā)事件 |
| access | 文件或目錄內(nèi)容被讀取 |
| delete_self | 文件或目錄被刪除,目錄本身被刪除 |
| unmount | 取消掛載 |
-e create,delete,moved_to,close_write, attrib#監(jiān)控一次性事件
inotifywait /data
#持續(xù)前臺監(jiān)控
inotifywait -mrq /data
#持續(xù)后臺監(jiān)控,并記錄日志
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"
#持續(xù)前臺監(jiān)控特定事件
inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
create,delete,moved_to,close_write,attribrsync 常用于做為 linux系統(tǒng)下的數(shù)據(jù)鏡像備份工具,實現(xiàn)實現(xiàn)遠程同步,支持本地復制,或者與其他SSH、rsync主機同步數(shù)據(jù),支持增量備份,配合任務計劃,rsync能實現(xiàn)定時或間隔同步,配合inotify或sersync,可以實現(xiàn)觸發(fā)式的實時數(shù)據(jù)同步
官方網(wǎng)站: http://rsync.samba.org/
軟件包:rsync,rsync-daemon(CentOS 8)
服務文件:/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]/DEST1. 本地文件系統(tǒng)上實現(xiàn)同步。命令行語法格式為上述"Local"段的格式。
2. 本地主機使用遠程shell和遠程主機通信。命令行語法格式為上述"Access via remote shell"段的格式。
3. 本地主機通過網(wǎng)絡套接字連接遠程主機上的rsync daemon。命令行語法格式為上述"Access via rsync daemon"段的格式。
前兩者的本質(zhì)是通過本地或遠程shell,而第3種方式則是讓遠程主機上運行rsyncd服務,使其監(jiān)聽在一個端口上,等待客戶端的連接。| -v | 顯示rsync過程中詳細信息。可以使用"-vvvv"獲取更詳細信息。 |
| -P | 顯示文件傳輸?shù)倪M度信息。(實際上"-P"="--partial --progress",其中的"--progress"才是顯示進度信息的)。 |
| -n --dry-run | 僅測試傳輸,而不實際傳輸。常和"-vvvv"配合使用來查看rsync是如何工作的。 |
| -a --archive | 歸檔模式,表示遞歸傳輸并保持文件屬性。等同于"-rtopgDl"。 |
| -r --recursive | 遞歸到目錄中去。 |
| -t --times | 保持mtime屬性。強烈建議任何時候都加上"-t",否則目標文件mtime會設置為系統(tǒng)時間,導致下次更新檢查出mtime不同從而導致增量傳輸無效。 |
| -o --owner | 保持owner屬性(屬主)。 |
| -g --group | 保持group屬性(屬組)。 |
| -p --perms | 保持perms屬性(權限,不包括特殊權限)。 |
| -D | 是"--device --specials"選項的組合,即也拷貝設備文件和特殊文件。 |
| -l --links | 如果文件是軟鏈接文件,則拷貝軟鏈接本身而非軟鏈接所指向的對象 |
| -z | 傳輸時進行壓縮提高效率 |
| -R --relative | 使用相對路徑。意味著將命令行中指定的全路徑而非路徑最尾部的文件名發(fā)送給服務端,包括它們的屬性。 |
| --size-only | 默認算法是檢查文件大小和mtime不同的文件,使用此選項將只檢查文件大小。 |
| -u --update | 僅在源mtime比目標已存在文件的mtime新時才拷貝。注意,該選項是接收端判斷的,不會影響刪除行為 |
| -d --dirs | 以不遞歸的方式拷貝目錄本身。默認遞歸時,如果源為"dir1/file1",則不會拷貝dir1目錄,使用該選項將拷貝dir1但不拷貝file1。 |
| --max-size | 限制rsync傳輸?shù)拇笪募笮 ?梢允褂脝挝缓缶Y,還可以是一個小數(shù)值(例如:"--max-size=1.5m") |
| --min-size | 限制rsync傳輸?shù)淖钚∥募笮 _@可以用于禁止傳輸小文件或那些垃圾文件。 |
| --exclude | 指定排除規(guī)則來排除不需要傳輸?shù)奈募?/td> |
| --delete | 以SRC為主,對DEST進行同步。多則刪之,少則補之。注意"--delete"是在接收端執(zhí)行的,所以它是在exclude/include規(guī)則生效之后才執(zhí)行的。 |
| -b --backup | 對目標上已存在的文件做一個備份,備份的文件名后默認使用"~"做后綴。 |
| --backup-dir | 指定備份文件的保存路徑。不指定時默認和待備份文件保存在同一目錄下。 |
| -e | 指定所要使用的遠程shell程序,默認為ssh。 |
| --port | 連接daemon時使用的端口號,默認為873端口。 |
| --password-file | daemon模式時的密碼文件,可以從中讀取密碼實現(xiàn)非交互式。注意,這不是遠程shell認證的密碼,而是rsync模塊認證的密碼。 |
| -W --whole-file | rsync將不再使用增量傳輸,而是全量傳輸。在網(wǎng)絡帶寬高于磁盤帶寬時,該選項比增量傳輸更高效。 |
| --existing | 要求只更新目標端已存在的文件,目標端還不存在的文件不傳輸。注意,使用相對路徑時如果上層目錄不存在也不會傳輸。 |
| --ignore-existing | 要求只更新目標端不存在的文件。和"--existing"結合使用有特殊功能 |
| --remove-source-files | 要求刪除源端已經(jīng)成功傳輸?shù)奈募?/td> |
###### 服務器端操作 ######
# 創(chuàng)建rsync服務器的配置文件
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
# 準備目錄
mkdir /backup
# 生成驗證文件
echo "rsyncuser:123.com" > /etc/rsync.pass
chmod 600 /etc/rsync.pass
# 啟動rsync服務
rsync --daemon #可加入/etc/rc.d/rc.local實現(xiàn)開機啟動
systemctl start rsyncd #CentOS 7 以上版本
###### 客戶端操作 ######
# 配置密碼文件
echo "123.com" > /etc/rsync.pass
chmod 600 /etc/rsync.pass #此為必要項
# 測試數(shù)據(jù)同步
rsync -avz --delete --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服務器IP::backup# 在客戶端執(zhí)行該腳本
#!/bin/bash
SRC='/data/'
DEST='rsyncuser@rsync服務器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另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)頁標題:rsync+inotify實時同步-創(chuàng)新互聯(lián)
分享地址:http://chinadenli.net/article26/dpsjcg.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站策劃、網(wǎng)站內(nèi)鏈、做網(wǎng)站、企業(yè)建站、網(wǎng)站設計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容