rsync遠程同步

一、rsync同步簡介

(1)Remote Sync ----- 遠程同步,支持本地複製,或者與其他SSH 、rsync主機同步,功能類似於scp,但是要比scp豐富。
官方網站:http : //rsync.samba.org
(2)特點:
1、可以鏡像保存整個目錄樹和文件系統。
2、可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等,無須特殊權限即可安裝。
3、快速:第一次同步時 rsync 會複製全部內容,但在下一次只傳輸修改過的文件。rsync 在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
4、安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接。
支持匿名傳輸,以方便進行網站鏡像。
rsync遠程同步

二、rsync 命令的用法

命令:

rsync [選項]  原始位置  目標位置

常用選項:

-a  : 歸檔模式,遞歸併保留對象屬性,等同於 -rlptgoD
-v  : 顯示同步過程的詳細信息
-z  : 在傳輸文件時進行壓縮
-H  : 保留硬鏈接文件
-A  : 保留 ACL屬性信息
--delete  :刪除目標位置有,而原始位置沒有的文件
--checksum :根據對象的校驗和來決定是否跳過文件

配置源的兩種表示方法:

格式1 :用戶名@主機地址::共享模塊名

格式2: :rsync://用戶名@主機地址/共享模塊名

rsync 腳本的交互處理:

rsync源的免交互處理:
使用 --password-file=密碼文件

三、操作實例:

rsync 是系統自帶的,無需額外安裝,如果是最小化安裝的話,用 yum安裝一下即可。
(1)修改配置文件 :/etc/rsyncd.conf

vim /etc/rsyncd.conf
1、開啓以下功能:
uid = nobody
gid = nobody
use chroot = yes   
//注:用chroot,在傳輸文件之前,服務器守護程序在將chroot 到文件系統中的目錄中,這樣做的好處是可能保護系統被安裝漏洞侵襲的可能。
pid file = /var/run/rsyncd.pid    //存放進程ID的文件位置
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   //同步時不再壓縮的文件類型

2、添加以下選項:
address = 192.168.220.131         //添加本機IP地址
log file = /var/log/rsyncd.log    //日誌文件位置
port 893                          //端口號
hosts allow = 192.168.220.0/24    //設置白名單,允許哪些地址可以訪問

3、添加共享模塊名:
[wwwroot]                 //共享文件名,這個自定義
path = /var/www/html      //源目錄的實際路徑
comment = www.kgc.com     //描述
read only = yes           //是否爲只讀
auth users = backuper     //授權賬戶名
secrets file = /etc/rsyncd_users.db   //存放賬戶信息的數據文件

(2)編輯存放賬戶信息的數據文件:

vim /etc/rsyncd_users.db
backuper:abc123   //授權賬戶:密碼

chmod 600 /etc/rsyncd_users.db   //權限設置爲600,必須設置爲600,否則客戶端認證會失敗

(3)啓動服務:

rsync --daemon   //啓動服務(使用--daemon選項,以服務器模式啓動)
netstat -natp | grep rsync

rsync遠程同步
(4)源服務器安裝一個Apache服務:

yum install httpd -y    
cd /var/www/html/
echo "this is test web" > index.html   //新建一個網頁
chmod 777 html/      //權限設置爲777

(5)客戶端使用 rsync 同步:
1、交互

格式1:rsync -avz [email protected]::wwwroot /var/www/html/

格式2:rsync -avz rsync://[email protected]/wwwroot /var/www/html/

rsync遠程同步
2、免交互:在客戶端寫一個文件,將密碼放進去即可。

vim /etc/server.pass
abc123  //密碼
chmod 600 /etc/server.pass   //授權
rsync -avz --delete --password-file=/etc/server.pass [email protected]::wwwroot /var/www/html/

rsync遠程同步

四、配合 inotify 工具使用:

(1)rsync 實時同步:
1、定期同步的不足:

執行備份的時間固定,延遲明細,實時性差;
當同步源長期不變化時,密集的定期任務是不必要的

2、實時同步的優點:

一旦同步源出現變化,立即啓用備份;
只要同步源不變化,則不執行備份

(2)關於 inotify:
Inotify 是一個 Linux特性,它監控文件系統操作,比如讀取、寫入和創建。Inotify 反應靈敏,用法非常簡單,並且比 cron 任務的繁忙輪詢高效得多。
1、從版本 2.6.13 開始提供;
2、可以監控文件系統的變化情況,並作出通知響應;
3、輔助軟件:inotify-tools
rsync遠程同步
(3)rsync + inotify 實時同步:
1、調整 inotify 內核參數:

max_queue_event : 監控隊伍大小
max_user_instances : 最多監控實例數
max_user_watches : 每個實例最多監控文件數

2、rsync + inotify 輔助工具:
(1)inotifywait:用於持續監控,實時輸出結果;
(2)inotifywatch:用於短期監控,任務完成後再出結果

五、操作實例:

注意,這是在客戶端所做的操作
第一步:修改內核參數

vim /etc/sysctl.conf
添加以下代碼:
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
sysctl -p    //生效

第二步:編譯安裝 inotify

yum install gcc gcc-c++ make -y       //安裝編譯工具
tar zxvf inotify-tools-3.14.tar.gz -C /opt/    //解壓
cd inotify-tools-3.14/
./configure            //編譯
make && make install    //安裝

第三步:監控

inotifywait -mrq -e modify,create,move,delete /var/www/html/
// -m :持續進行監控
   -r :遞歸監控所有子對象
   -q :簡化輸出信息
   -e :制定要監控哪些事件類型

寫一個腳本,來通過 inotifywait 觸發 rsync 同步操作:

vim /opt/inotify.sh

#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD="rsync -avz --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未在執行,則立即啓動
      $RSYNC_CMD
   fi
done
chmod +x inotify.sh    //添加權限

第四步:在源端,關閉只讀模式,並重啓服務

vim /etc/rsyncd.conf 
read only = no
[root@yuan www]# netstat -natp | grep rsync
tcp        0      0 192.168.220.131:873     0.0.0.0:*               LISTEN      100869/rsync 

kill -9 100869  //關閉進程號
如果報錯,則需要刪除pid進程:
cd /var/run/
rm -rf rsyncd.pid 
rsync --daemon

第五步:啓動腳本

./inotify.sh

在開一個終端連接客戶端,在 /var/www/html 目錄下,創建一個文件:
rsync遠程同步
(1)此時,在源服務器的 /var/www/html 目錄下,我們會發現實時同步到了這個文件
rsync遠程同步
(2)如果在客戶端刪除這個文件,同時源服務器也會同步刪除這個文件的
rsync遠程同步
rsync遠程同步

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