1. 程式人生 > >rsync 資料同步

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這樣的大檔案有時候也會有問題,中斷,未完整同步前,是隱藏檔案。同步完成後改為正常檔案。