inotify+rsync數據的實時同步

生產需求:企業一般有多臺web服務器,爲了保證數據的統一,方便統一管理以及節省空間,將web文件放在samba服務器或者nfs上,爲了數據的安全

可以找一臺服務器實時同步數據,可以通過inotify+rsync+腳本實現

image.png

一、監控軟件inotify介紹

        inotify可以監控同步數據服務器目錄中信息的變化,採用異步的文件系統事件監控機制,利用事件驅動

機制,而無須通過諸如cron等的輪詢機制來獲取事件,linux內核從2.6.13起支持 inotify,通過inotify可以監

控文件系統中添加、刪除,修改、移動等各種事件。

image.png

ll /proc/sys/fs/inotify #列出下面的文件,說明服務器內核支持inotify

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_queued_events   inotify事件隊列最大長度默認值:16384

-rw-r--r-- 1 root root 0 Dec 7 10:10 max_user_instances  每個用戶創建inotify實例最大值默認值:128

-rw-r--r-- 1 root root 0 Dec 6 05:54 max_user_watches   可以監視的文件數量(單進程),默認值:8192


inotify是內核級的功能,需要通過用戶空間程序,安裝包:

    yum install inotify-tools       基於epel源

inotify-tools包主要文件:

1、inotifywait命令

     在被監控的文件或目錄上等待特定文件系統事件(open closedelete等)發生,常用於實時同步的

目錄監控,直接使用不加選項會一次性監控,當對該目錄進行操作會結束當次監控

image.png

inotifywait命令常見選項

    -m, --monitor 始終保持事件監聽

     -d, --daemon 以守護進程方式執行,和-m相似,配合-o使用

    -r, --recursive 遞歸監控目錄數據信息變化

    -q, --quiet 輸出少量事件信息

    --exclude <pattern> 指定排除文件或目錄,使用擴展的正則表達式匹配的模

    式實現

    --excludei <pattern> 和exclude相似,不區分大小寫

     -o, --outfile <file>打印事件到文件中,相當於標準正確輸出

     -s, --syslogOutput 發送錯誤到syslog相當於標準錯誤輸出

     --timefmt <fmt> 指定時間輸出格式

            --timefmt <fmt>時間格式,參考 man 3 strftime

            %Y 年份信息,包含世紀信息

            %y 年份信息,不包括世紀信息

            %m 顯示月份,範圍 01-12

            %d 每月的第幾天,範圍是 01-31

            %H 小時信息,使用 24小時制,範圍 00-23

            %M 分鐘,範圍 00-59

            示例:

            --timefmt "%Y-%m-%d %H:%M"

     --format <fmt> 指定的輸出格式;即實際監控輸出內容

    -e 指定監聽指定的事件,如果省略,表示所有事件都進行監聽

             示例: -e create,delete,moved_to,close_write, attrib

常用組合

持續後臺監控,並記錄日誌

inotifywait -mrq  /data/www -o /root/inotify.log  --timefmt "%Y-%m-%d %H:%M" --format "%T %w%f event: %e"

image.png

持續後臺監控特定事件

inotifywait -mrq /data -o /root/inotify.log  --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e create,delete,moved_to,close_write,attrib

2、inotifywatch:

收集被監控的文件系統使用的統計數據,指文件系統事件發生的次數統計

二、具體實現

192.168.12.27 inotify服務器

192.168.12.57  rsync服務器

監控inotify服務器數據變化自動同步到 rsync服務器上

192.168.12.57 :

1、安裝軟件包

yum install rsync  

2、服務器端修改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.12.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

3、生成服務器驗證文件

echo "rsyncuser:123456" > /etc/rsync.pass

chmod 600 /etc/rsync.pass

4、創建文件用於存放備份文件

mkdir /backup

chmod 600 /backup/

5、啓動rsyncd服務

rsync --daemon     可加入/etc/rc.d/rc.local實現開機啓動

systemctl start rsyncd

192.168.12.27:

1、安裝軟件包,創建需要監控備份的文件夾

yum install inotify-tools

image.png

2、生成密碼文件,如果沒有會變成交互式命令,創建後rsync會使用該密碼自動同步

echo "123456" > /etc/rsync.pass

chmod 600 /etc/rsync.pass

3、測試能否同步到rsync服務器

rsync -avz --password-file=/etc/rsync.pass /data/www/ [email protected]::backup

image.png

4、創建實時監控腳本

vi inotify_rsync.sh

#!/bin/bash
#
#********************************************************************
#Author:        swh
#QQ: 786***083
#Date: 2019-08-01
#FileName:inotify_rsync.sh
#blog: https://blog.51cto.com/14322729
#Description:The test script
#Copyright (C): 2019 All rights reserved
#********************************************************************
SRC='/data/www/'
DEST='[email protected]::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

image.png


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章