1. 程式人生 > >rsync+inotify實時備份

rsync+inotify實時備份

如何 模塊名 關閉 進程id 免密 端口 cmd 讀寫權限 免密碼

一、rsync及inotify概述

1.rsync概述

rsync是linux系統下的數據鏡像備份工具。使用快速增量備份工具Remote Sync可以遠程同步,支持本地復制,或者與其他SSH、rsync主機同步。

2.inotify概述

inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。學習如何將 inotify 集成到您的應用程序中,並發現一組可用來進一步自動化系統治理的命令行工具。
案例環境如下:

角色 IP地址 安裝軟件包
rsync同步源 192.168.174.141 rsync、
rsync發起端 192.168.174.165 rsync、inotify-tools

二、配置rsync源服務器

1.建立/etc/rsyncd.conf配置文件

vim /etc/rsyncd.conf
 uid = nobody
    gid = nobody
    use chroot = yes                                  //是否禁錮在源目錄,yes為是
    address = 192.168.174.141                //監聽地址
    port 873                                                   //監聽端口
    log file = /var/log/rsyncd.log                    //日誌文件路徑
    pid file = /var/run/rsyncd.pid                    //進程ID文件路徑
    hosts allow = 192.168.174.0/24            //允許訪問的客戶機的地址段

    [wwwroot]                                              //共享模塊名稱    
    path = /var/www/html                           //源目錄的實際地址
    comment = www.kgc.cn                 
    read only = no                                 //是否為只讀    
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2      //同步時 不再壓縮的文件類型
    auth users = backuper                           //授權賬戶
    secrets file = /etc/rsyncd_users.db       //存放賬戶信息的數據文件

2.為備份賬戶創建數據文件

vim /etc/rsyncd_users.db
 backuper:abc123    //backuper為用戶名 abc123為密碼
chmod 600 /etc/rsyncd_users.db  //更改備份賬戶的讀取權限,提高安全性
mkdir -p /var/www/html      
chmod 777 /var/www/html    //更改源目錄的讀寫權限
chown -R nobody:nobody /var/www/html  //更改源目錄的所屬主及所屬組 

3.開啟服務,運行參數為 --deamon ;若需關閉服務,可采取kill進程的方式,如kill $(cat /var/run/rsync.pid)

rsync --daemon
netstat -natp | grep rsync
tcp        0      0 192.168.174.141:873     0.0.0.0:*               LISTEN      4875/rsync

三、配置rsync發起端

將對方源目錄的文件同步到發起端的/opt目錄下,方法有三種:

(1)rsync -avz 備份用戶名@同步源IP地址::共享模塊名 /發起端目錄 password:備份用戶密碼

rsync -avz [email protected]::wwwroot /opt/  
password:abc123

(2) rsync -avz rsync://備份用戶名@共享模塊名 /發起端目錄 password:備份密碼

rsync -avz rsync://[email protected]/wwwroot /opt/
password:abc123

(3)免密碼交互

vim /etc/server.pass  //創建server.pass文件備份用戶保存密碼
abc123
chmod 600 /etc/server.pass  //更改密碼文件讀取權限,提高安全性
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt

測試是否同步
在同步源服務器上的共享目錄下創建aaa.html
技術分享圖片
技術分享圖片

四、發起端配置inotify實時同步

1.調整inotify內核參數

vim /etc/sysctl.conf //在後面加入如下參數
    fs.inotify.max_queued_events = 16384    監控事件隊列(16384)
    fs.inotify.max_user_instances = 1024    最多監控實例數(1024)
    fs.inotify.max_user_watches = 1048576   每個實例最多監控文件數(1048576)

2.安裝編譯inotify-tools

yum install gcc gcc-c++ make -y
cd /opt/inofiry-tools-3.14
./configure
make && make install

3.監控事件

重新開啟一個終端

inotifywait -mrq -e modify,create,move,delete /var/www/html

在/var/www/html目錄下創建一個a.txt文件,切換終端查看命令輸出的情況
技術分享圖片

技術分享圖片

4.創建觸發式同步腳本

用來檢測本機/var/www/html目錄的變動情況,一旦有更新觸發rsync同步操作,則上傳至服務器192.168.174.141的/var/www/html

vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
    fi
done

5.測試

在發起端/var/www/html目錄下創建test.txt文件
技術分享圖片
切換到同步源服務器下/var/www/html下查看
技術分享圖片
將發起端的test.txt文件刪除
技術分享圖片
切換到同步源服務器,此時源服務器下的test.txt文件也被刪除,說明同步成功。
技術分享圖片

rsync+inotify實時備份