实时备份工具之inotify+rsync
生活随笔
收集整理的這篇文章主要介紹了
实时备份工具之inotify+rsync
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.inotify簡介
inotify 是一個從 2.6.13 內核開始,對 Linux 文件系統進行高效率、細粒度、異步地監控機制, 用于通知用戶空間程序的文件系統變化??衫盟鼘τ脩艨臻g進行安全、性能、以及其他方面的監控。Inotify 反應靈敏,用法非常簡單,并且比 cron 任務的繁忙輪詢高效得多。如果內核版本不低于 2.6.13,系統就支持 inotify。 如果存在
/usr/include/sys/inotify.h 文件, 表明內核支持 inotify。
? ? ? ?2.inotify的作用
inotify 可以監控文件,也可以監控目錄。當監控目錄時,它可以同時監控目錄及目錄中的各子目錄及文件的。此外, inotify 使用文件描述符作為接口,因而可以使用通常的文件 I/O 操作 select、 poll 和 epoll 來監視文件系統的變化。
3.inotify實現數據實時同步原理
無論是手動執行 rsync 還是把 rsync 客戶端發出的數據同步請求命令做成周期性任務計劃, 每隔一段時間不管有沒有數據變化都發出一次數據同步請求命令, 同步一次數據。 服務端和客戶端都有時間差。所以, 使用內核提供的 inotify 機制,當數據發生改變時(刪除、修改等)就觸發 rsync 客戶端發出數據 同步請求。 從而實現數據的實時傳輸。
rsync + inotify 機制實現的兩臺服務器數據同步如下圖如示:
4.inotify的安裝與使用
[root@localhost ~]# yum install -y inotify-tools [root@localhost ~]# inotifywait -mrq --timefmt '%d%m%Y %H:%M' --format '%T %w%f' -e create /backup #創建對目錄/backup的監控 17102017 00:02 /backup/1.txt 17102017 00:02 /backup/2.txt 17102017 00:02 /backup/3.txt 17102017 00:02 /backup/4.txt 17102017 00:02 /backup/5.txt5.inotify之inotifywait命令詳解
參數詳解: -r:遞歸查詢目錄 -q:打印監控時間信息 -m:始終保持時間監聽狀態 --excludei: 排除文件或目錄時,不區分大小寫。 --timefmt: 指定時間輸出的格式 --format: 打印使用指定的輸出類似格式字符串 a、 %w:顯示被監控文件的文件名; b、 %f:如果發生某事件的對象是目錄,則顯示被監控目錄的名字;默認顯示為空串; c、 %T:使用--timefmt 選項中自定義的時間格式; d、 %e 表示發生的事件 e、 %Xe 事件以“X”分隔 -e:指定需要監控的事件 access: 文件或目錄被讀取 modify: 文件或目錄內容被修改 attrib: 文件或目錄屬性被改變 close: 文件或目錄封閉,無論讀/寫模式 open:文件或目錄被打開 move_to:文件或目錄被移動到另外一個目錄 move:文件或目錄被移動另一個目錄或從另一個目錄移動到當前目錄 create:文件或目錄被創建在當前目錄 delete:文件或目錄被刪除 unmount:文件系統被卸載 常用組合:close_write,modify,delete,create,attrib6.編寫監控腳本
[root@nfs scripts]# vim inotify.sh #!/bin/bash /usr/bin/inotifywait -mrq '%w%f' -e close_write,modify,delete,create /backup \ | while read line do cd /backup && rsync -azP ./ rsync_bakup@192.168.0.175::backup/ --password-file=/etc/rsync.password >/dev/null 2>&1 done exit 0 [root@nfs scripts]# sh inotify.sh & #<==運行腳本監控/backup [root@nfs scripts]# touch /backup/{1..10}.log #<==NFS上創建文件進行測試 [root@backup backup]# ll #<==備份服務上查看是否備份成功 total 4 -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 10.log drwxr-xr-x 2 rsync rsync 4096 Oct 12 21:43 192.168.0.165 -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 1.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 2.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 3.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 4.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 5.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 6.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 7.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 8.log -rw-r--r-- 1 rsync rsync 0 Oct 17 00:28 9.log [root@nfs scripts]# echo "/bin/bash /server/scripts/inotify.sh &" >> /etc/rc.local #<==設置開機啟動7.修改inotify默認參數(inotify默認內核參數值太小)
查看系統默認參數值 sysctl -a | grep max_queued_events 結果是:fs.inotify.max_queued_events = 16384 sysctl -a | grep max_user_watches 結果是:fs.inotify.max_user_watches = 8192 sysctl -a | grep max_user_instances 結果是:fs.inotify.max_user_instances = 128 修改參數: sysctl -w fs.inotify.max_queued_events="99999999" sysctl -w fs.inotify.max_user_watches="99999999" sysctl -w fs.inotify.max_user_instances="65535" vim /etc/sysctl.conf #添加以下代碼 fs.inotify.max_queued_events=99999999 fs.inotify.max_user_watches=99999999 fs.inotify.max_user_instances=65535 :wq! #保存退出參數說明: max_queued_events: inotify隊列最大長度,如果值太小,會出現"** Event Queue Overflow **"錯誤,導致監控文件不準確 max_user_watches: 設置inotifywait或inotifywatch命令可以監視的文件數量(單進程) max_user_instances: 每個用戶創建inotify實例最大值 【inotify在實際生產環境中,對于50-200KB的文件,inotify的最發并發量為200-300,如果客戶端寫入速度大于這個量,將會造成短暫的延遲】8.總結
1 rysnc+inotify實時備份流程: 2 a.實現從NFS客戶端到rsync服務端的rsync的部署 3 b.實現從NFS客戶端對NFS目錄文件系統時間的實時監控 4 c.當監控到NFS目錄文件系統事件變化后,觸發rsync推送變化的文件 1 高并發數據實時同步方案: 2 (1)inotify(sersync)+rsync,是文件級別 3 (2)drbd文件系統級別,基于block塊文件 4 (3)第三方軟件的同步功能: 5 mysql同步,oracle,mongodb 6 (4)程序雙寫,直接寫入兩臺服務器 7 (5)業務邏輯解決(讀寫分離,備讀不到,讀主)總結
以上是生活随笔為你收集整理的实时备份工具之inotify+rsync的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用validate验证数据库
- 下一篇: 华尔街顶级大师胡立阳名言