1. 程式人生 > >rsync+inotify實現上行實時同步

rsync+inotify實現上行實時同步

watch data all pre tro 使用 delet 權限 rec

rsync:一款開源備份工具;實現不同主機間鏡像同步整個目錄樹;支持增量備份、權限、壓縮等

rsync角色

  • 發起端:負責發起rsync同步,操作客戶機(相當於C端)
  • 備份源:負責響應rsync的請求的服務器(相當於S端)

同步的方向

  • 上行同步(上傳):備份源提供文檔的目標位置(date在發起端),發起端使用用戶必須對目錄有寫入權限
  • 下行同步(下載):備份源負責提供文檔原始位置(date在備份源),發起端使用用戶只需對data有讀取權限即可

搭建rsync備份源

vim /etc/rsyncd.db
  hehe:123      //用戶名:密碼
vim /etc/rsyncd.conf
uid = nobody            //運行用戶
gid = nobody            //運行組
use chroot = yes        //用戶禁錮到訪問目錄
address = 192.168.1.10      //監聽IP
port 873            //監聽端口
log file = /var/log/rsyncd.log  //日誌文件位置
pid file = /var/run/rsyncd.pid  //PID運行文件位置
hosts allow = 192.168.1.0/24    //運行同步的網段
[data]              //同步名
    path = /data        //同步的目錄
    comment = Document Root //描述
    read only = no
    write = yes         //用戶可寫
    dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z    //同步時不需壓縮的格式
    auth users = hehe       //認證用戶
    secrets file = /etc/rsyncd.db           //用戶帳號文件位置
chmod 600 /etc/rsync.db
mkdir /data && chmod 777 /data
rsync --daemon      //獨立模式運行rsync服務;停止rsync(killall rsync && rm -rf /var/run/rsyncd.pid)

client同步(註意將write = yes增加)

下行:rsync [ 選項 ] 遠程目錄 本地目錄

上行:rsync [ 選項 ] 本地目錄 遠程同步名

選項
-a:提供歸檔和屬性信息
-v:顯示詳細信息
-z:壓縮
-H:保持硬鏈接
-u:可實現增量備份

mkdir /a    
rsync -avzH --delete rsync://[email protected]/data/ /a/        //將備份源中的數據下載同步到當前位置
rsync -avzH --delete [email protected]::data /a/
  • 兩條命令任選其一
rsync -avzH --delete /a/ rsync://[email protected]/data         //將發起端的數據上傳同步到備份源;用戶在備份源必須有寫入權限
rsync -avzH --delete /a/ [email protected]::data
  • 兩條命令任選其一

計劃任務實現定時下行同步

vim /etc/profile
  export RSYNC_PASSWORD=123    //將rsync密碼加入環境變量
source /etc/profile
crontab -e
  * */4 * * *   /usr/bin/rsync -avzHu --delete rsync://[email protected]/data /a        //定時下行同步
  * */4 * * *   /usr/bin/rsync -avzHu --delete /a rsync://[email protected]/data        //定時上行同步

rsync+inofity:註意用於上行實時同步(以下操作全在客戶端)


安裝inotify-tools

tar  zxvf  inotify-tools-*.tar.gz  -C  /usr/src/
cd  /usr/src/inotify-tools-*/
./configure && make && make install

inotify的使用

vim  /etc/sysctl.conf
  fs.inotify.max_queued_events = 16384   ##監控事件隊列數
  fs.inotify.max_user_instances = 1024   ##監控實例數
  fs.inotify.max_user_watches = 1048576  ##監控的文件數量
sysctl  -p
vim  rsync_inotify.sh   ##實時同步腳本

  #!/bin/bash

  RSYNC="rsync -avzHu --delete /a/ rsync://[email protected]/data"

  INT_CMD="inotifywait -mrq -e modify,create,move,delete,attrib /a"

  export RSYNC_PASSWORD=123 //可解決rsync同步時,無需輸入密碼

  $INT_CMD | while read DIRECOTRY EVENT FILE;do

  $RSYNC 1>/dev/null 2>/var/log/rsync_err.log

  done
chmod +x rsync_inotify.sh    //給予腳本執行權限
rsync_inotify.sh &   //啟動腳本

rsync+inotify實現上行實時同步