rsync
遠程同步
rsync(remote sync)
備份
完全備份
增量備份(差異備份)
rsync
優點:
支持增量備份
選擇性保持:符號鏈接,硬鏈接,文件屬性,權限及時間等。
傳輸前執行壓縮,適合于異地備份,鏡像服務器等應用。
使用ssh作為傳輸端口,sftp,ssh,xshell 。
與scp區別:
當文件數據很大時候: scp 的效率太低,(scp是先統計信息,需要多少空間后,在復制)
rsync 邊復制,邊比較,邊統計
基礎知識
端口:873
模式: 如果直接使用命令rsync,就是點到點。
官網: http://rsync.samba.org
在遠程同步任務中,負責發起rsync同步操作的客戶機稱為發起端,而負責響應來自客戶機的rsync同步操作的服務器稱為備份源。
數據同步:
推:push 一臺機器負責把數據傳給其他主機,服務器開銷大。適合后端服務器比較少。
拉:poll 所有主機定時去找一臺主機拉書籍。可能導致數據同步緩慢。
設計數據同步模式:
當主機數據同步太多是,使用分層,以樹狀的形式。而且推拉結合。
安裝rsync
yum install rsync
ls /etc/xinetd.d/rsync
yum install xinnetd
vim /etc/xinetd.d/rsync
disenable no
netstat -nltup
tcp 873
vim /etc/services
總結:xinetd管理rsync服務;工作原理
rsync命令的基本用法:
格式:rsync [選項] 源文件 目標文件
和scp顯示
-a =-rlptgoD
-r 遞歸
-l 連接
-p 權限
-t 保持時間
-g 保持組
-o
-D
-z 壓縮
-P 進度
-u 更新
--port=
--delete刪除源文件中沒有的數據
--password-file=FILE 從file中得到密碼
--bwlimit=KBPS 限制
--filter '' 需要過濾的文件
--excu
實例
創建用戶
創建目錄
修改權限
setfacl -R -m user:youdi:rwx /var/www
setfacl -R -m d:user:youdi:rwx /var/www
開始備份
rsync -azP --delete youdi@172.16.1.84:/ /tmp
實現無密碼備份和登錄:
ssh-key -t rsa -f -p''
ssh-copy-id youdi@172.16.1.84
編寫腳本
vim /etc/back.sh
rsync -az --delete youdi@172.16.1.84:/var/www/html /tmp/html
計劃任務:
vim /etc/crontab
分 時 日 月 周 用戶 腳本
crontab -e
備份完打包
tar cvzf aa.tar.gz /etc/**
配置rsync服務器及需要備份的目錄,不使用系統用戶進行備份。
需要自己創建配置文件:
/etc/rsync.conf
整體部分:
全局參數:對rsync服務器生效。如果模塊
局部參數:
vim /etc/rsync.conf
全局參數
uid=nobody
gid=nobody
address = 172.16.1.84
port = 83
hosts allow = 允許同步的的客戶端
IP,network ,*
hosts deny =
use chroot = yes 鎖定家目錄
maxconnections = 最大連接數
pid file =
lock file =
log file =
motd file = /etc/rsync.mothod
模塊參數:
[wwwroot]
path=/var/www/html
comment=rsync wwwrppt of 描述
read only = yes 以只讀的方式
list=yes 允許查看模塊信息
auth users=backuper 指定備份的用戶,和系統用戶無關
secrets file=/etc/rsync.passwd 指點存放用戶和密碼文件 格式: 用戶名:密碼
vim /etc/rsync.passwd
backup:youdi
修改密碼文件的權限:
chmod 600 /etc/rsync.passwd
啟動服務:
vim /etc/xinetd/rsync
service xinetd restart
語法:
rsync 選項 用戶名@備份源服務器IP::共享模塊名 目標目錄
rsync -azP bckup@172.16.1.84::wwwroot /web-back/
實現無交互腳本,備份數據
修改變量:
export RSYNC_PASSWORD=pwd123
總結:
注意iptables的限制
iptables -t netfilt -A INPUT -p tcp --dport 873 -j ACCEPT
進階 inotify 監控文件的變化
rsync + inotify
linux內核從2.6.13版本開始開始提供inotify通知接口,用來監控文件系統的各種變化情況,如文件存取,刪除,移動等。利用這一機制,可以非常方便的實現文件異動告警,增量備份,并針對目錄或文件的變化及時作出響應。
應用
防首頁篡改
使用rsync工具與inotify機制相結合,可以實現出發時備份(實時同步),只是原始位置的文檔發生變化,則立即啟動自動增量備份操作,否則處于靜態等待,這樣一來,就可以避免了按固定周期備份進存在的延遲性,周期過密等問題。
擴展:
uname -r
/proc/sys/fs/inotify
max_queued_events #表示監控事件隊列
max_user_instances #表示最多監控實例數
max_user_watches #表示每個實例最多監控文件數
修改:
/etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 9000000
使得配置文件生效:
sysctl -p
安裝inotify-tools
安裝inotify-tools,提供inotyfywait,inotifywatch輔助工具程序,從而來監控,匯總文件系統改動情況。
./configure --prefixe
make -j 4 使用4個CPU一起編譯
make install
測試:
使用inotifywait命令監控網站的/www/html
inotifywait
-e 用來指定要監控哪些事件
這些事件包含:create創建,move移動。delete刪除,motify修
改文件內容,attrib屬性更改。
-m 表示持續監控
-r 表示遞歸整個目錄
-q 表示簡化輸出信息。
inotifywait -mrq -e create,move,delete,motify /var/www
inotify -rmq 文件目錄
使用inotify輸出監控結果中,每行記錄中依次包括目錄,事件,文件。據此可以識別變動情況。編寫觸發式同步腳本。
第一:
備份方向,遠程備份,不需要用戶和密碼。同步不使用root用戶。
第二:編寫觸發式腳本:
#!/bin/bash
echo aaa bbb ccc |while read a b c
do
echo $a
echo $b
echo $c
done
思路:只要檢測到變動或事件時,執行rsync上的同步操作即可。
#!/bin/bash
inotifywait -mrq /var/www/html |while read a b c
do
rsync -azp --delete /var/www/html youdi@172.16.1.5:/tmp
優化:
#!/bin/bash
SRC=/boot/
DST=youdi@172.16.1.5:/tmp
inotifywait -mrq $SRC |while read a b c
do
/usr/bin/rsync -ahqzt --delete $SRC $DST
done
使其開機自動啟動:
/etc/rc.local
圖示
另外,金山Sersync是一款基于 inotify + rsync 的大量文件的多服務器自動同步程序。推薦使用。