
1
最近在做伺服器遷移的時候,遇見了一個很頭疼的問題。那就是我原本的伺服器資料實在是太多了高達250G,而且不能在短時間立馬切換。是以需要一個過渡期,但是在此期間又會新增檔案或者使用者修改檔案,那麼如何實時傳輸檔案的時候僅僅傳輸已經變更的檔案了。
使用場景
現有伺服器A和伺服器B,如果伺服器A的指定目錄(例如
/iiske/daxi/
)中的内容發生變更(增删改和屬性變更),實時将這些變更同步到伺服器B的目标目錄中(例如
/www/daxi/
)。
資料鏡像備份工具Rsync
Rsync是一個非常快速和靈活的檔案複制工具。它支援本機或者是和遠端伺服器間的檔案複制。Rsync使用了delta-transfer算法,它隻需要傳送源端和目标端的檔案差異部分,大大減少了網絡帶寬的消耗和複制耗費的時間。Rsync多用于資料備份和鏡像。
Rsync使用了快速檢查算法,通過比較檔案大小或最後修改時間的變化來判斷檔案是否需要同步。
Rsync連接配接遠端主機有兩種方式:使用ssh或rsync daemon。這裡使用Rsync方式來實作遠端檔案備份。
在Linux中也可以使用 scp 指令進行伺服器之間檔案數傳。
Linux scp 指令用于 Linux 之間複制檔案和目錄。 scp 是 secure copy 的縮寫, scp 是 linux 系統下基于 ssh 登陸進行安全的遠端檔案拷貝指令。 scp 是加密的,rcp 是不加密的,scp 是 rcp 的加強版。 例如: A :/home/xiaoke/a.txt B :/home/xiaoming/ 将伺服器A檔案a.txt拷貝到伺服器B下面
scp /home/xiaoke/a.txt [email protected]:/home/xiaoming/
如果是檔案夾則添加 -r scp -r /home/xiaoke [email protected]:/home/xiaoming/ 注:-r 遞歸複制整個目錄。

2
Rsync的安裝與操作
安裝Rsync
分别在伺服器A和伺服器B執行:
sudo yum install rsync
安裝完畢後,會發現rsync的配置檔案位于 etc/rsyncd.conf 。該檔案使用daemon方式同步時需要使用,這裡用不着也就不描述了。
配置伺服器A和B之間的免密登入:
伺服器A執行:
ssh-keygen#注意,在這裡會生成一個公鑰,這個公鑰拷貝到那個伺服器#則進入該伺服器不需要再輸入密碼,記住一定不要輸入公鑰名和密碼#隻需要敲回車就OK了,否則你會頭疼,小編就因為這個問題折騰了很久。這個沒有#任何說明完全靠後面的提示摸索出來的。生成公鑰過程一定不要輸入任何東西,直接回車直接回車直接回車!!!#生成密鑰複制公鑰到遠端主機ssh-copy-id [email protected]
報錯:/usr/bin/ssh-copy-id: ERROR: No identities found
一開始在網上搜尋原因的時候,大部分的都是說ssh-copy-id -i id_rsa.pub [email protected]位址 中的公鑰不存在或者應該加上-i 等,但是都沒有解決我的問題,後來在發現是dsa與rsa的問題, 是以我建議大家先看一下執行的是 ssh-keygen -t dsa 還是 ssh-keygen -t rsa ,以免在執行 ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]位址 報錯:/usr/bin/ssh-copy-id: ERROR: No identities found
注意,上面這個問題慎重執行,容易生成多個公鑰。不建議操作。
如果你按照這個方法沒有解決問題,那麼你可以看看筆者上面ssh-keygen所述部分。
rsync -avPz --progress /iiske/ 134.222.44.121:/xke把目前A伺服器iiske目錄下的檔案拷貝到 B伺服器134.222.44.121的xke目錄下如果進入需要輸入密碼,則表示你的公鑰不在B伺服器上面,重複上面的操作就可以。
寫入腳本中(不是必須)
vim auto.sh#腳本代碼#!/bin/bashecho "***程式開始執行***" rsync -avPz --progress /iiske/ 134.222.44.121:/xkeecho "***程式結束***"/bin/bash auto.sh #運作 sudo nohup一直執行,複制xshell退出時程式結束
#!/bin/bashecho "****ok***"inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T%w%f%e' -e modify,delete,create,attrib /iiske | while read filedo echo "開始執行" rsync -avPz --progress /iiske/ 122.212.34.221:/xke rsync -avPz --delete /iiske/ 122.212.34.221:/xke echo "ok"done
運作中有任何問題可以私信作者。