配置rsync+inotify 實時同步

rsync簡介:
rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,保持連接和權限,且採用優化的同步算法,在傳輸前執行壓縮,因此非常適用於異地備份,鏡像服務器等。rsync的官方站點是http://rsync.samba.org/. 作爲一種最常用的文件備份工具,rsync是Linux和Unix系統默認安裝的基本組件之一。

[root@promote ~]# rpm -q rsync
rsync-3.0.9-18.el7.x86_64

inotify簡介:
Inotify 是一個 Linux 內核特性,它監控文件系統,並且及時向專門的應用程序發出相關的事件警告,比如刪除、讀、寫和卸載操作等。

rsync工具與inotify機制相結合,可以實現觸發式備份(實時同步)。只要原始位置的文檔發生變化,,就立即啓動增量備份操作。

環境:

主機 IP 軟件
rsync服務器 192.168.100.135 rsync
rsync客戶機 192.168.100.140 rsync、inotify

關閉所有主機的防火牆和安全性策略,僅實驗參考。

systemctl stop firewallde.service
setenforce 0

1.配置rsync服務端

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

以網站站點作爲源目錄/var/www/html和備份賬號backuper爲例進行配置。

vim /etc/rsyncd.conf

 uid = nobody     
 gid = nobody
 use chroot = yes       #禁錮在源目錄
 address = 192.168.100.135  #監聽地址
 port 873               #監聽端口
 log file = /var/log/rsyncd.log #日誌文件位置
 pid file = /var/run/rsyncd.pid #存放進程ID的文件位置
 hosts allow = 192.168.100.0/24 #允許訪問的客戶機地址

[wwwroot]             #共享模塊名稱
 path = /var/www/html #源目錄的實際路徑
 comment = www.kgc.cn 
 read only = yes     #是否爲只讀
 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

chmod 600 /etc/rsyncd_users.db

(3)創建共享路徑

mkdir -p /var/www/html
touch /var/www/html/index.html

(3)啓動rsync服務程序,運行參數爲--daemon

執行rsync --daemon命令就可以啓動rsync服務。若要關閉rsync服務,可以採取kill進程的方式,如kill $(cat /var/run/rsyncd.pid),再刪掉pid文件即可。

rsync --daemon

配置rsync+inotify 實時同步

2.配置rsync客戶端

(1)啓動rsync服務

rsync --daemon

(2)訪問源服務器中的wwwroot共享模塊,並下載到本地/myweb目錄下

mkdir /myweb

格式一:
rsync -avz [email protected]::wwwroot /myweb   //密碼abc123

格式二:
rsync -avz rsync://[email protected]/wwwroot /myweb

配置rsync+inotify 實時同步
rsync命令的基本用法

-a 歸檔模式,表示以遞歸方式傳輸文件,並保持所有文件屬性,等於-rlptgoD。
-z 對備份的文件在傳輸時進行壓縮處理。
-H 保留硬鏈結。
-D 保持設備文件信息。
-A 保留ACL屬性信息
--delete 刪除那些目標位置有而原始位置沒有的文件。
--checksum 打開校驗開關,強制對文件傳輸進行校驗。

(3)確認同步結果

[root@promote ~]# ls /myweb
index.html  

(4)按計劃做免交互執行同步

爲了在同步過程中不用輸入密碼,需要創建一個密碼文件如/etc/server.pass,在執行同步時使用選項--password-file=/etc/server.pass指定即可。

vim /etc/server.pass
   abc123
[root@promote ~]# cat /etc/server.pass 
abc123

[root@promote ~]# chmod 600 /etc/server.pass //設置權限
[root@promote ~]# crontab -e  
   30 22 * * * rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /myweb
//每天22點30分執行同步
[root@promote ~]# service crond start  //啓動計劃任務
Redirecting to /bin/systemctl start crond.service
[root@promote ~]# chkconfig crond on
注意:正在將請求轉發到“systemctl enable crond.service”。

(5)調整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

sysctl -p

(6)安裝inotify-tools

inotify-tools提供inotifywait和inotifywatch輔助工具程序,用來監控和彙總改動情況。

yum install gcc gcc-c++ -y   //安裝gcc編譯環境
tar zxvf inotify-tools-3.14.tar.gz -C /opt/

cd /opt/inotify-tools-3.14

./configure

make && make install

(7)以監控網站目錄/var/www/html爲例

yum install httpd -y

(8)執行inotifywait命令,然後在另一個終端向/var/www/html目錄下添加、移動文件,跟蹤屏幕輸出結果。

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

inotifywait命令選項:

  • -e用來指定要監控那些事件
  • -m表示持續監控
  • -r表示遞歸整個目錄
  • -q簡化輸出信息

另一個終端在目錄路徑下對文件進行創建和刪除操作。
配置rsync+inotify 實時同步
返回到原來的終端查看屏幕輸出結果。
配置rsync+inotify 實時同步

(9)編寫觸發式同步腳本

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) -ge 0 ] ; then
        $RSYNC_CMD
    fi
done

chmod +x /opt/inotify.sh

3.驗證

(1)編輯配置文件修改“read only”,然後將服務器中/var/www/html目錄設置成可寫權限,屬主和屬組改成與uid一樣。

vim /etc/rsyncd.conf
  [wwwroot]  
  ....
  read only=No
  ....
chmod 777 /var/www/html
chown -R nobody:nobody /var/www/html

(2)在本機運行/opt/inotify.sh腳本程序

[root@promote ~]# cd /opt/
[root@promote opt]# ./inotify.sh 

(3)切換到本機的/var/www/html,執行添加、修改、刪除等操作。

配置rsync+inotify 實時同步

(3)查看服務器中的/var/www/html目錄下的變化.

配置rsync+inotify 實時同步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章