生產需求:企業一般有多臺web服務器,爲了保證數據的統一,方便統一管理以及節省空間,將web文件放在samba服務器或者nfs上,爲了數據的安全
可以找一臺服務器實時同步數據,可以通過inotify+rsync+腳本實現
一、監控軟件inotify介紹
inotify可以監控同步數據服務器目錄中信息的變化,採用異步的文件系統事件監控機制,利用事件驅動
機制,而無須通過諸如cron等的輪詢機制來獲取事件,linux內核從2.6.13起支持 inotify,通過inotify可以監
控文件系統中添加、刪除,修改、移動等各種事件。
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等)發生,常用於實時同步的
目錄監控,直接使用不加選項會一次性監控,當對該目錄進行操作會結束當次監控
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"
持續後臺監控特定事件
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
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
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