rsync+inotify實現實時同步(小業務場景解決方案)

袋鼠雲艾迪發表於2018-12-27

一、rsync功能介紹

rsync同步操作
• 命令用法
– rsync [選項…] 源目錄 目標目錄

• 同步與複製的差異
– 複製:完全拷貝源到目標
– 同步:增量拷貝,只傳輸變化過的資料

• 本地同步
– rsync [選項…] 本地目錄1 本地目錄2
– rsync [選項…] 本地目錄1/ 本地目錄2
[root@svr7 ~]# mkdir /todir
[root@svr7 ~]# rsync -a /boot /todir //同步整個資料夾
[root@svr7 ~]# rsync -a /boot/ /todir/ //只同步目錄下的資料

同步控制
• rsync操作選項
– -n:測試同步過程,不做實際修改
– –delete:刪除目標資料夾內多餘的文件
– -a:歸檔模式,相當於-rlptgoD
– -v:顯示詳細操作資訊
– -z:傳輸過程中啟用壓縮/解壓

二、inotify功能介紹

• 基本用法
– inotifywait [選項] 目標資料夾

• 常用命令選項
– -m,持續監控(捕獲一個事件後不退出)
– -r,遞迴監控、包括子目錄及檔案
– -q,減少螢幕輸出資訊
– -e,指定監視的 modify、move、create、delete、attrib 等事件類別

三、rsync+ssh遠端同步

與遠端的 SSH目錄保持同步
– 下行:rsync […] user@host:遠端目錄 本地目錄
– 上行:rsync […] 本地目錄 user@host:遠端目錄

四、實時遠端同步

虛擬機器A:
一、無密碼驗證
1.生成公鑰 私鑰驗證

[root@svr7 /]# ssh-keygen     #一路回車
[root@svr7 /]# ls /root/.ssh

   /root/.ssh/known_hosts     #記錄ssh遠端客戶端標識檔案

2.傳遞公鑰 到對方機器

[root@svr7 /]# ssh-copy-id root@192.168.4.207

3.測試無需密碼

rsync -avz --delete /opt/  root@192.168.4.207:/opt/

二、目錄內容的監控
1.安裝 inotify-tools 控制工具可呼叫此機制實現監控
標準的原始碼、編譯安裝即可

[root@svr7 /]# tar -xf /root/tools.tar.gz -C /
[root@svr7 /]# ls /tools/

rpm包: 利用 yum rpm -ivh 進行安裝

步驟1:安裝gcc與make

[root@svr7 /]# yum -y install gcc make

步驟2:tar進行解包

tar -xf  /tools/inotify-tools-3.13.tar.gz  -C   /
ls /
cd /inotify-tools-3.13
ls

步驟3: ./configure 配置,指定功能模組等選項
檢測系統是否安裝gcc
–prefix=路徑 #指定安裝目錄

cd /inotify-tools-3.13
 ./configure

常見錯誤提示:gcc軟體沒有安裝
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: no acceptable C compiler found in $PATH
See `config.log` for more details.

步驟4:make 編譯,生成可執行的二進位制程式檔案

cd /inotify-tools-3.13
make

步驟5:make install 安裝,將編譯好的檔案複製到安裝目錄

cd /inotify-tools-3.13
make  install
[root@svr7 /]# which inotifywait     #檢視是否具備該程式
/usr/local/bin/inotifywait
[root@svr7 /]# inotifywait -rq /opt/

三、書寫Shell指令碼

for迴圈 適合次數固定 的事件
while迴圈 適合死迴圈

 while  [條件]
  do
          迴圈執行的語句  
  done
[root@svr7 /]# vim /root/rsync.sh
  #!/bin/bash 
   while inotifywait -rqq /opt/
    do
       rsync -az --delete /opt/  root@192.168.4.207:/opt/
    done &

[root@svr7 /]# chmod +x /root/rsync.sh


相關文章