rsync 資料同步
什麼是Rsync?
Rsync是一款開源的、快速的、多功能的、可實現全量及增量的本地貨遠端資料同步備份的優秀工具。適用於unix/linux/windows等多種作業系統平臺。
Rsync具有可使本地和遠端兩臺主機之間的資料快速複製同步映象、遠端備份的功能,這個功能類似SSH帶scp命令,但又優於scp命令的功能,scp每次都是全量拷貝,而rsync可以增量拷貝,當然,rsync還可以在本地主機的不同分割槽或目錄之間全量及增量的複製資料,這又類似cp命令,但同樣也優於cp命令,cp每次都是全量拷貝,而rsync可以增量拷貝。同樣,rsync還可以實現刪除檔案或目錄的功能,這又相當於rm命令。
在同步備份資料時,預設情況下,Rsync通過其獨特的“quick check”演算法,它僅同步大小或者最後修改時間發生的檔案或目錄,當然也可根據許可權,屬主等屬性的變化同步,但需要指定相應的引數,甚至可以實現只同步一個檔案裡有變化的內部部分,所有,可以實現快速的同步備份資料。
提示:傳統的cp,scp工具拷貝每次均為完整的拷貝,而rsync除了可以完整拷貝外,還具備增量拷貝的功能,因此,從同步資料的效能及效率上,rsync工具更勝一籌。
Rsync的工作方式:
第一種工作模式:local(類似於cp命令的功能)
測試如下:將t1目錄下所有檔案同步到 /tmp/目錄下
rsync -avz ./ /tmp/ //-avz:保持檔案屬性不變,此命令相當於cp
用t1目錄將/tmp/目錄清空,可以用--delete引數配合。(儘量不要用,危險)
rsync -avz --delete /null/ /tmp/ //-avz:保持檔案屬性不變,此命令相當於rm
第二種工作模式:remote shell (類似於scp命令功能)
push:
通過隧道遠端備份: 將本機t1目錄下所有檔案同步到192.168.43.118機器/tmp/目錄下。
rsync –avzP -e ‘ssh –p 22’ /t1/ [email protected]:/tmp //-e通過隧道方式ssh 22埠模式
pull:
將192.168.43.118機器/tmp/目錄下所有增量檔案同步到192.168.43.117/t1/目錄下。
在192.168.43.118機器/tmp/目錄下新建一個118.log檔案
將192.168.43.118機器/tmp/目錄下所有增量檔案同步到192.168.43.117/t1/目錄下。
rsync –avzP -e ‘ssh –p 22’ [email protected]:/tmp/ /t1/ //-e通過隧道方式ssh 22埠模式
rsync –avzP /本地目錄 –e ‘ssh –p 22’ [email protected]:/遠端目錄
rsync –avzP –e ‘ssh –p 22’ [email protected]:/遠端目錄 本地目錄
-P :大寫的,接埠,預設22埠時可以省略-P22
-r :遞迴,表示拷貝目錄
-p :小寫,表示在拷貝前後保持檔案或目錄屬性。
-l :limit 限制速度
------------------------------------------------------------------------------------------
第三種模式:以守護程序(socket)的方式傳輸資料(這個是rsync自身的重要的功能)
測試:服務端ip:192.168.43.200 客戶端1ip:192.168.43.119 客戶端2ip:192.168.43.118
rsync-server服務端配置:
①vi /etc/rsyncd.conf 新增如下程式碼↓↓↓↓↓↓
#Rsync server
#created by bqh 21:30 2018-12-05
#rsyncd.conf start
uid = rsync //客戶端連備份伺服器具備rsync的使用者許可權
gid = rsync //客戶端連備份伺服器具備rsync的使用者許可權
use chroot = no //程式出現bug會定向為一個空目錄,安全方面。
max connections = 2000 //客戶端連線數。一般設定大於連線數。
timeout = 600 //設定客戶端連線超時600秒,超時剔除。
pid file = /var/run/rsyncd.pid //pid程序號
lock file = /var/run/rsync.lock //鎖檔案
log file = /var/log/rsyncd.log //rsync日誌檔案
ignore errors //忽略錯誤
read only = false //只讀,true為可讀寫
list = false //可以遠端列表
hosts allow = 192.168.43.0/24 //允許什麼網段訪問
hosts deny = 0.0.0.0/32 //一般區域網不用,公網可能用,但一般用vpn
auth users = rsync_backup //認證使用者名稱,遠端連線的使用者。
secrets file = /etc/rsync.password //存放使用者和密碼的檔案,遠端使用者的密碼
#####################################
[backup] //共享模組呼叫path服務
comment = backup server by bqhboy 21:40 2018-12-05
path = /backup //共享目錄地址
②建立一個虛擬使用者:
useradd rysnc –s /sbin/nologin –M
③建立共享目錄及屬主:
mkdir /bfserver chown –R rsync /bfserver
④給虛擬使用者名稱設定密碼並存放檔案中:
echo “rsync_bfserver:123456” >/etc/rsync.password
⑤給服務端虛擬使用者密碼檔案設定許可權:
chmod 600 /etc/rsync.password
⑥啟動服務:rsync --daemon
檢視服務:ss -lntup|grep rsync
netstat -lntup|grep rsync
ps -ef|grep rsync|grep -v grep
lsof -i :873
⑦加入開機自啟動:
echo "rsync --daemon" >>/etc/rc.local
cat /etc/rc.local
客戶端1配置如下:
①建立密碼檔案
echo "123" >/etc/rsync.password
cat /etc/rsync.password
chmod 600 /etc/rsync.password
ll /etc/rsync.password
②rsync
Push:
rsync [OPTION...] SRC... [[email protected]]HOST::DEST
rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
將客戶端1/tmp/目錄下所有檔案推送到服務端/backup/目錄下:
rsync -avz /tmp/ [email protected]::backup --password-file=/etc/rsync.password
從服務端backup目錄下所有增量檔案拉拽到客戶端端/tmp/目錄下:
在服務端/backup/下新建一個增量檔案4.txt
rsync -avz rsync://[email protected]/backup /tmp/ --password
-file=/etc/rsync.password
如果想每次訪問用密碼去掉 --password-file=/etc/rsync.password
③echo $? //如果結果為0的話正確。
客戶端2配置同客戶端1(...具體略)
客戶端rsync同步排除檔案引數: --exclude
排除多個檔案:
--exclude={a,b,c}
--exclude={a..c}
--exclued-from=paichu.log
--exclude=a --exclude=b --exclude=c
例如:
將客戶端2/tmp/目錄下所有檔案(排除123.txt)推送到服務端/backup/目錄下:
在服務端檢視推送的檔案如下:
-----------------------------------------------------------------------------------------------
無差異同步: --delete 儘量不用此引數。
推送:本地有,遠端就有;本地沒有,刪除遠端獨有的。備份遠端資料
拉取:遠端有,本地就有;遠端沒有,刪除本地獨有的。備份本地資料。
Rsync優點:
增量備份同步,支援socket(daemon模式),集中備份
Rsync缺點:
1.大量小檔案時候同步的時候,比對時間較長,有的時候,rsync程序停止。
解決:a.打包大量小檔案。 b.drbd(檔案系統同步複製block)
2. 同步大檔案,10G這樣的大檔案有時候也會有問題,中斷,未完整同步前,是隱藏檔案。同步完成後改為正常檔案。