一、rsync概述
1.1rsync的概念
- rsync,remote synchronize顧名思義就知道它是一款實作遠程同步功能的軟體,它在同步檔案的同時,可以保持原來檔案的權限、時間、軟硬鏈接等附加資訊,
- rsync是用 “rsync 演算法”提供了一個客戶機和遠程檔案服務器的檔案同步的快速方法,而且可以通過ssh方式來傳輸檔案,這樣其保密性也非常好,另外它還是免費的軟體,
- rsync 遠程同步: 一款快速增量備份工具 Remote Sync,遠程同步 支持本地復制,或者與其他SSH、rsync主機同步, 作用:做資料備份 備份方式:完全備份、增量備份
1.2rsync的應用
rsync是一個開源的快速備份工具,可以在不同主機之間鏡像同步整個目錄樹,支持增量備份,并保持鏈接和權限,且采用優化的同步演算法,傳輸前執行壓縮,因此非常適用于異地備份、鏡像服務器等應用,
1.3rsync源服務器
在遠程同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責回應來自客戶機的rsync同步操作的服務器稱為同步源,
在同步程序中,同步源負責提供檔案的原始位置,發起端應對該位置具有讀取權限,
1.4scp和rsync區別
當檔案資料很大時候 :SCP 無法備份大量資料 ;特點 : 先統一資訊,像windows復制 RSYNC 邊復制,邊比較,邊統計,
1.5rsync客戶端 好處
優點: 第一次同步時 rsync 會復制全部內容,但在下一次只傳輸修改過的檔案,支持增量備份,
選擇性的保持 : 符號鏈接,硬鏈接,檔案屬性,權限 及時間 等,
傳輸前執行壓縮,適用于異地備份 ,鏡像服務器等應用 ,
安全,使用ssh做為傳輸埠,【 sftp ,ssh】
官網:http://rsync.samba.org
二、配置rsync源服務器
2.1 配置rsync源服務器的操作步驟
2.1.1 查看rsync是否安裝(系統默認已裝)
rpm -q rsync #一般系統已默認安裝rsyn
2.1.2 建立/etc/rsyncd.conf 組態檔
vim /etc/rsyncd.conf #添加以下配置項 uid = nobody #也可以為root gid = nobody #也可以為root use chroot = yes #禁錮在源目錄 address = 192.168.10.100 #監聽地址,監聽本機地址 port 873 #監聽埠 tcp/udp 873,可通過cat /etc/services | grep rsync查看 log file = /var/log/rsyncd.log #日志檔案位置 pid file = /var/run/rsyncd.pid #存放行程 ID 的檔案位置 hosts allow = 192.168.10.0/24 #允許同步的客戶機網段 [wwwroot] #共享模塊名稱 path = /var/www/html #源目錄的實際路徑(同步的目錄) comment = Document Root of www.clj.com read only = yes #是否為只讀 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步時不再壓縮的檔案型別 auth users = backuper #授權賬戶,多個賬號以空格分隔 secrets file = /etc/rsyncd_users.db #存放賬戶資訊的資料檔案 ------------------------------------------------------------------------------- uid = nobody gid = nobody use chroot = yes address = 192.168.10.100 port 873 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid hosts allow = 192.168.10.0/24 [wwwroot] path = /var/www/html comment = Document Root of www.clj.com read only = yes dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z auth users = backuper secrets file = /etc/rsyncd_users.db ---------------------------------------------------------------------------------- #如采用匿名的方式,只要將其中的“auth users”和“secrets file”配置項去掉即可,
2.1.3 為備份賬戶創建資料檔案
vim /etc/rsyncd_users.db backerup:123456 #無須建立同名系統用戶 chmod 600 /etc/rsyncd_users.db
2.1.4 保證所有用戶對源目錄/var/www/html 都有讀取權限
安裝http服務: yum -y install httpd systemctl start httpd systemctl enable httpd ? chmod +r /var/www/html/ ls -ld /var/www/html/ #以長格式顯示檔案目錄權限 drwxr-xr-x. 2 root root 6 2月 28 09:01 /var/www/html
2.1.5 啟動 rsync 服務程式
rsync --daemon #啟動 rsync 服務,以獨立監聽服務的方式(守護行程)運行 netstat -anpt | grep rsync
2.1.6 關閉 rsync 服務的方法
kill $(cat /var/run/rsyncd.pid) rm -rf /var/run/rsyncd.pid
2.2 實體操作:配置rsync源服務器的操作步驟
2.2.1查看rsync是否安裝(系統默認已裝)
![]()
2.2.2建立/etc/rsyncd.conf 組態檔

2.2.3為備份賬戶創建資料檔案

2.2.4保證所有用戶對源目錄/var/www/html 都有讀取權限

![]()
![]()
2.2.5啟動 rsync 服務程式
![]()
2.2.6關閉 rsync 服務的方法

三、使用rsync備份工具
3.1rsync 命令的基本用法
基本格式: rsync [選項] 原始位置 目標位置
常用選項:
- -r: 遞回模式,包含目錄及子目錄中的所有檔案,
- -l: 對于符號鏈接檔案仍然復制為符號鏈接檔案,.
- -v: 顯示同步程序的詳細(verbose) 資訊,
- -z: 在傳輸檔案時進行壓縮( compress) ,
- -a: 歸檔模式,保留檔案的權限、屬性等資訊,等同于組合選項"-rlptgoD",
- -p: 保留檔案的權限標記,
- -t: 保留檔案的時間標記,
- -g: 保留檔案的屬組標記(僅超級用戶使用),
- -o: 保留檔案的屬主標記(僅超級用戶使用),
- -H: 保留硬連接檔案,
- -A: 保留ACL屬性資訊,
- -D: 保留設備檔案及其他特殊檔案,
- --delete: 洗掉目標位置有而原始位置沒有的檔案,
- --checksum:根據校驗和(而不是檔案大小、修改時間)來決定是否跳過檔案,
3.2配置源的表示方法
在執行遠程同步任務時,rsync 命令需要指定同步源服務器中的資源位置,
rsync 同步源的資源表示方式為“用戶名@主機地址::共享模塊名”或者“rsync://用戶名@主機地址/共享模塊名”,前者為兩個冒號分隔形式,后者為 URL 地址形式,
例如,執行以下操作即可訪問 rsync 同步源,將指定的資源下載到本地/root 目錄下進行備份,
rsync -avz backuper@192.168.10.100::wwwroot /root rsync -avz rsync://[email protected]/wwwroot /root
3.3實體操作:發起端進行rsync 備份
環境準備:
rsync源服務器:192.168.10.100 rsync(默認)、httpd rsync客戶機(發起端):192.168.10.101 rsync(默認) 配置面互動
3.3.1將指定的資源下載到本地/opt 目錄下進行備份
格式一: rsync -avz backuper@192.168.10.100::wwwroot /opt/ #密碼123456 格式二: rsync -avz rsync://[email protected]/wwwroot /opt/

格式一:

格式二:

3.3.2免互動格式配置
cd /opt rm -rf index.html echo "123456" > /etc/server.pass chmod 600 /etc/server.pass # 免互動同步 /usr/bin/rsync -avz --delete --password-file=/etc/server.pass backuper@192.168.10.100::wwwroot /opt/ ls /opt/ #查看是否同步成功 cat /opt/index.html #查看檔案內容是否同步成功

加入到計劃性任務中:

四、inotify+rsync 實時同步
4.1inotify+rsync 實時同步概述
- 使用inotify通知介面,可以用來監控檔案系統的各種變化情況,如檔案存取、洗掉、移動、修改等,利用這一機制,可以非常方便地實作檔案異動告警、增量備份,并針對目錄或檔案的變化及時作出回應
- 將 inotify 機制與 rsync 工具相結合,可以實作觸發式備份(實時同步),即只要原始位置的檔案發生變化,則立即啟動增量備份操作;否則處于靜默等待狀態
- 因為 inotify 通知機制由 Linux 內核提供,因此主要做本機監控,在觸發式備份中應用時更適合上行同步
4.2定期同步的不足
執行備份的時間固定,延遲明顯、實時性差
當同步原長期不變化時,密集的定期任務是不必要的
4.3實時同步的優點
一旦同步原出現變化,立即啟動備份
只要同步原無變化,則不執行備份
4.4Linux內核的inotify機制
從版本2.6.13開始提供
可以監控檔案系統的變動情況,并作出通知回應
輔助軟體:inotify-tools
4.5rsync+inotify實時同步
4.5.1調整inotify內核引數
max_queue_events:監控事件佇列大小
max_user_instances:最多監控實體數
max_user_watches:每個實體最多監控檔案數
4.5.2安裝inotify-tools輔助工具
inotifywait:用于持續監控,實時輸出結果
inotifywatch:用于短期監控,任務完成后再出結果
4.5.3通過inodifywait觸發rsync同步操作
使用while、read持續獲取監控結果
根據結果可以作進一步判斷,決定執行何種操作
4.6配置inotify+rsync 實時同步的步驟
環境準備作業:(此實驗是接著上面實驗繼續做的) 服務器型別 IP地址 需要安裝的組件 rsync源服務器 192.168.10.100 rsync(默認)、httpd rsync客戶機(發起端) 192.168.10.101 rsync(默認)、inotify-tools
4.6.1修改rsync源服務器(192.168.10.100)組態檔
vim /etc/rsyncd.conf ...... read only = no #關閉只讀,上行同步需要可以寫 kill `cat /var/run/rsyncd.pid` #殺掉rsyncd行程 netstat -natp | grep rsync #查看行程是否被殺掉 rsync --daemon #重新開啟 netstat -natp | grep rsync #查看服務是否開啟 chmod 777 /var/www/html #賦予權限
4.6.2調整 inotify 內核引數(在客戶端配置:192.168.10.101)
在Linux內核中,默認的inotify機制提供了三個調控引數:
max_queue_events(監控事件佇列,默認值為16384)
max_user_instances(最多監控實體數,默認值為128)
max_user_watches(每個實體最多監控檔案數,默認值為8192)
當要監控的目錄、檔案數量較多或者變化較頻繁時,建議加大這三個引數的值,
cat /proc/sys/fs/inotify/max_queued_events #監控事件佇列 cat /proc/sys/fs/inotify/max_user_instances #最多監控實體數 cat /proc/sys/fs/inotify/max_user_watches #每個實體最多監控檔案數 vim /etc/sysctl.conf #加大每個引數 fs.inotify.max_queued_events = 16384 fs.inotify.max_user_instances = 1024 fs.inotify.max_user_watches = 1048576 sysctl -p
4.6.3安裝 inotify-tools(在客戶端配置:192.168.10.101)
用 inotify 機制還需要安裝 inotify-tools,以便提供 inotifywait、inotifywatch 輔助工具程式,
notifywait:可監控modify(修改)、create(創建)、move(移動)、delete(洗掉)、attrib(屬性更改)等各種事件,一有變動立即輸出結果,
inotifywatch:可用來收集檔案系統變動情況,并在運行結束后輸出匯總的變化情況,
#依賴環境 mount /dev/cdrom /mnt #掛載磁盤 yum install gcc gcc-c++ make -y #將壓縮包inotify-tools-3.14.tar.gz上傳至/opt目錄下,然后進行解壓 tar zxvf inotify-tools-3.14.tar.gz -C /opt/ cd /opt/inotify-tools-3.14 ./configure make && make install
執行“inotifywait”命令,然后在另一個終端向/var/www/html 目錄下添加檔案、移動檔案,跟蹤螢屏輸出結果,
執行下面命令后會進入監聽模式,無法操作,所以需要另開一個終端頁面進行作
inotifywait -mrq -e modify,create,move,delete /opt
#選項“-e”:用來指定要監控哪些事件
#選項“-m”:表示持續監控
#選項“-r”:表示遞回整個目錄
#選項“-q”:簡化輸出資訊
4.6.4在客戶端(192.168.10.101)撰寫觸發式同步腳本
vim /opt/inotify.sh #!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" #持續監控 RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass /var/www/html/ [email protected]::wwwroot/" #進行同步 $INOTIFY_CMD #輸出監控內容 $INOTIFY_CMD | while read DIRECTORY EVENT FILE #遍歷 ##while判斷是否接收到監控記錄 do if [ $(pgrep rsync | wc -l) -le 0 ] ; then #判斷是否正在執行同步 $RSYNC_CMD fi done chmod +x /opt/inotify.sh chmod +x /etc/rc.d/rc.local echo '/opt/inotify.sh' >> /etc/rc.d/rc.local #加入開機自動執行 mkdir -p /var/www/html/ #創建腳本中進行同步的目錄 #注意!192.168.2.66 是遠程同步服務器ip(即源端IP)!!
腳本內容:
#!/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 ##while判斷是否接收到監控記錄 do if [ $(pgrep rsync | wc -l) -le 0 ] ; then $RSYNC_CMD fi done
上述腳本用來檢測本機/var/www/html 目錄的變動情況,一旦有更新觸發rsync同步操作,上傳備份至服務器192.168.10.100的wwwroot 共享目錄下,
觸發式上行同步的驗證程序如下:
(1)在本機運行/opt/inotify_ rsync.sh 腳本程式,
(2)切換到本機的/var/www/html目錄,執行增加、洗掉、修改檔案等操作,
(3)查看遠端服務器中的wwwroot目錄下的變化情況,
4.6.5驗證實驗,客戶端開啟監控
cd /opt/ ./inotify.sh &
在客戶端(192.168.10.101)/var/www/html/ 目錄下創建檔案test1和test2
cd /var/www/html/
mkdir test1 test2
在源服務器行程查看是否完成實時同步
ls /opt
4.7實體操作:配置inotify+rsync 實時同步
4.7.1修改rsync源服務器(192.168.10.100)組態檔


4.7.2調整 inotify 內核引數(在客戶端配置:192.168.10.101)

4.7.3安裝 inotify-tools(在客戶端配置:192.168.10.101)



![]()
執行“inotifywait”命令:

4.7.4在客戶端(192.168.10.101)撰寫觸發式同步腳本



4.7.5驗證實驗,客戶端開啟監控
五、使用rsync來實作快速洗掉大量檔案
假如要在Linux下洗掉大量檔案,比如100萬、1000萬,像/usr/local/nginx/proxy_ temp的nginx快取等,那么rm -rf *可能就不好使了,因為要等待很長一段時間,在這種情況下我們可以使用rsync來巧妙處理,rsync實際用 的是替換原理,
先建立一個空的檔案夾:
mkdir /home/blank
用rsync洗掉目標目錄:
rsync --delete-before -a -H -v --progress --stats /home/blank /usr/local/nginx/proxy_temp
這樣目標目錄很快就被清空了
選項說明:
–delete-before :接收者在傳輸進行洗掉操作
-a :歸檔模式,表示以遞回方式傳輸檔案,并保持所有檔案屬性
-H :保持硬連接的檔案
-v :詳細輸出模式
–progress :在傳輸時顯示傳輸程序
–stats :給出某些檔案的傳輸狀態
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/539641.html
標籤:其他
下一篇:GFS分布式檔案系統
