日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

全网实时热备inotify+rsync

發布時間:2025/3/21 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全网实时热备inotify+rsync 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

title: 全網實時熱備inotify+rsync
tags: 備份,inotify,rsync


全網實時熱備inotify+rsync

1 為什么需要inotify?


當全網部署了NFS存儲后,如果提供NFS服務的設備宕機或者故障了,那么我們的與之相連的NFS客戶端都會受到影響,嚴重可能會導致數據丟失,因此,為了防止單點故障,我們要給提供NFS服務的主機的數據目錄做一個實時同步,這樣NFS服務器宕機或者其他故障后,我們能很輕易的把備份節點設置為NFS的共享目錄,讓那些NFS客戶端重新掛載NFS共享盤,這樣可以盡量減少損失,提高服務滿意度。
inotify是可以監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,使用起來也十分高效, 而rsync可以直接推送文件到遠程daemon目錄,而且支持增量備份。因此我們可以通過使用inotify監控到文件系統有創建,刪除,修改后觸發rsync進行同步推送到備份服務器里。于是如圖所示,我們在備份服務器里搭建一個rsync daemon,并創建/backup用來專門與NFS存儲的數據目錄作為實時同步的遠端目錄,而在對應的NFS存儲中安裝inotify,用來對/data目錄進行動態監控,一旦發現/data目錄有創建,刪除,修改后立刻觸發rsync進行同步推送到備份服務器的/backup里,從而保證兩端的數據一致性,增強NFS存儲的安全性。

2 安裝inotify

  • 下載源碼包文件:inotify-tools-3.14.tar.gz
  • 解壓縮,并安裝inotify,因為inotify是一個源碼包文件,所以安裝的時候注意,先要編譯,通過--prefix=PATH指定編譯安裝的路徑,然后在進行make和make install。安裝完成后,因為源碼安裝是帶程序的版本號的,最好做一個軟鏈接把版本號去掉,這樣在后續使用中會方便很多。另外安裝后,在安裝目錄中會生成4個目錄,bin (inotify的執行命令)、 include (inotify所需的頭文件) 、lib (動態鏈接文件)、 share (幫助文檔)。安裝過程如下:

    [root@server ~]# tar zxf inotify-tools-3.14.tar.gz [root@server ~]# ls -l |grep "inotify-tools-3.14" drwxrwxrwx. 5 1000 1000 4096 Mar 14 2010 inotify-tools-3.14 -rw-r--r--. 1 root root 358772 May 19 17:52 inotify-tools-3.14.tar.gz [root@server ~]# cd inotify-tools-3.14 [root@server inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14/ [root@server inotify-tools-3.14]# make && make install [root@server inotify-tools-3.14]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify-tools [root@server inotify-tools-3.14]# cd /usr/local/inotify-tools && ls bin include lib share
  • 3 inotify的相關命令和參數介紹

  • inotify 有兩個工具,一個是inotifywait,這個的作用是在被監視的文件或目錄上等待特定文件系統事件(open,close.delete等)的發生,執行后處于阻塞狀態。另一個工具是inotifywatch,它的作用是在收集被監視文件系統使用度統計數據,指文件系統事件發生次數的統計。我們此次用來監控文件系統事件的發生是使用inotifywait工具。
  • 常用參數有:
  • -m :始終監控 -q:安靜,不輸出其他東西 -r:遞歸 -e:文件系統事件,文件系統事件常用參數有create,delete,close_write 具體可以查詢幫助:[root@server bin]# ./inotifywait -help 常用語法:[root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data

    3 . 對inotify進行測試,看看是否滿足需求

    [root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data 因為inotify開啟后是時刻監控著/data目錄,切處于阻塞狀態,因此我們要么讓它在后臺運行,要么重新開一個窗口,因為我們需要清晰的看到監控的事件,因此重新再打開一個窗口。 Last login: Sun May 20 20:06:00 2018 from 192.168.50.50 [root@server ~]# [root@server ~]# cd /data [root@server data]# ls a aaa bb cc dd file nnn [root@server data]# [root@server data]# [root@server data]# rm -rf * [root@server data]# ls [root@server data]# [root@server data]# /usr/local/inotify-tools/bin/inotifywait -mrq --format %w%f -e create,close_write,delete /data/data/a /data/aaa /data/bb /data/cc /data/dd /data/file /data/nnn 由此我們可以看到了,inotify確實監控到了這些事件的發生,因此我們可以利用read這個變化來觸發調用rsync進行推送數據。

    4 在備份服務器上部署rsync daemon

  • 創建rsync的配置文件,并將相關參數寫入配置文件,如下所示 [root@backup ~]# touch /etc/rsyncd.conf [root@backup ~]# cat /etc/rsyncd.conf #rsyncd-conf start uid = rsync gid = rsync use chroot = no max connections = 2000 timeout = 600 pid file= /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore = errors read only = false list = false hosts allow = 192.168.50.0/24 hosts deny = 0.0.0.0/32 auth users = rsync-backup secrets file = /etc/rsync.password ##################################### [backup] comment = backup path = /backup
  • 創建密碼文件,并設置相關權限,用來和rsync客戶端匹配密碼的。 [root@backup ~]# touch /etc/rsync.password [root@backup ~]# echo "rsync-backup:root" >/etc/rsync.password [root@backup ~]# cat /etc/rsync.password rsync-backup:root [root@backup ~]# chmod 600 /etc/rsync.password [root@backup ~]# ls -l /etc/rsync.password -rw-------. 1 root root 18 May 21 06:23 /etc/rsync.password 這里需要注意密碼文件必須和配置文件里的相對應
  • 創建rsync用戶,設置為不需要登錄,組也是rsync,需要注意的是這個用戶要和配置文件里的uid=用戶對應,而auth users = rsync-backup是個虛擬的用戶可以不用管,這可以在一定程度上提高安全性,因為rsync的用戶名不一定需要使用rsync,只要與配置文件里的uid=XX,對應上就好了。 [root@backup ~]# useradd -g rsync -M -s /sbin/nologin rsync [root@backup ~]# grep rsync /etc/passwd rsync:x:506:506::/home/rsync:/sbin/nologin
  • 啟動rsync daemon
    [root@backup ~]# rsync --daemon
  • 在對應的NFS服務器上也創建密碼文件,用于來和服務端匹配密碼如下: [root@server data]# echo "root" > /etc/rsync.password [root@server data]# chmod 600 /etc/rsync.password [root@server data]# ls -l /etc/rsync.password -rw-------. 1 root root 5 May 14 20:44 /etc/rsync.password
  • 在NFS服務器上推送文件看看是否能成功推送 [root@server data]# echo "hello" >file1 [root@server data]# rsync file1 rsync-backup@192.168.50.4::backup/ --password-file=/etc/rsync.password 在備份服務器查看是否推送成功 [root@backup ~]# cat /backup/file1 hello [root@backup /]# cd /backup &&ls backup file1 [root@backup backup]#

    5 我們可以在NFS服務端部署腳本,讓腳本監控到事件發生后調用rsync進行推送

    [root@server scripts]# cat inotify.sh #!/bin/bash inotify=/usr/local/inotify-tools/bin/inotifywait $inotify -mrq --format '%w%f' -e create,close_write,delete /data | while read file do cd / && rsync -az /data --delete rsync-backup@192.168.50.4::backup/ \ --password-file=/etc/rsync.password done

    6 進行對server和backup進行測試

    server端創建文件: [root@server data]# rm -rf * [root@server data]# touch a [root@server data]# rm -rf * [root@server data]# for n in `seq 1000` ;do touch file$n; done [root@server data]# ls |wc -l 1000 backup端查看是否推送過來: [root@backup backup]# cd data [root@backup data]# ls a [root@backup data]# [root@backup data]# [root@backup data]# ls [root@backup data]# [root@backup data]# ls |wc -l 1000

    7 將inotify腳本設置為開機啟動,這樣兩臺服務器就可以永久實現實時同步

    [root@backup data]# echo "sh /service/scripts/inotify.sh & " >>/etc/rc.local

  • 8 inotify對應的優化參數:

    在/proc/sys/fs/inotify目錄下的max_queued_events 、max_user_instances、max_user_watches對inotify有一定的限制。其中:

  • max_user_watches:設置inotifywaite或者inotifywatch命令可以監控的文件數量(單進程),可以設置為50000000。
    [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
  • max_user_instances:設置每個用戶可以運行inotifywaite或者inotifywatch命令的進程數,默認是128,可以設置為50000000。 [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_user_instances [root@backup inotify]# cat max_user_instances 50000000
  • max_queued_events:設置inotify實例事件(event)隊列可容納事件的數量,默認是327679,可以設置為50000000。 [root@backup inotify]# cat max_queued_events 327679 [root@backup inotify]# echo "50000000" > /proc/sys/fs/inotify/max_queued_events [root@backup inotify]# cat max_queued_events 50000000
  • 轉載于:https://blog.51cto.com/ouyangtao/2121825

    總結

    以上是生活随笔為你收集整理的全网实时热备inotify+rsync的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。