如何將雲上的Linux文件自動備份到本地服務器

需求場景: 將雲上一臺Linux服務器文件備份到本地服務器,一週一備便可。linux

面對這樣一個需求,咱們可能面臨下列幾個問題,算法

備份方式:是雲服務器推文件到本地服務器寫入,仍是本地服務器從雲服務器拉文件?這個問題涉及就是誰做爲服務端,服務端需映射公網服務端口,客戶端則不須要。這裏咱們將雲服務器做爲服務端,同時設置白名單隻容許本地服務器出口IP才容許訪問。shell

技術實現:如何從一臺服務器自動備份到另外一臺服務器呢?哪個技術方案相對更安全可靠?安全

這裏涉及的是文件備份,且實時性要求不高,最簡單的方式就是人工備份,由相關管理人員經過主動的方式手工備份文件到本地服務器。但這是懶人的時代,機器能作的,幹嗎用手來呢,咱們來一塊兒看看自動備份方案。服務器

方案一:FTP

提及文件傳輸備份,首先想到就是FTP,FTP是用於網絡上進行文件傳輸的一套標準協議,但使它聲名狼藉的問題是它以明文方式傳輸密碼和文件內容,只要在網絡中對FTP鏈接進行監控就能被竊取。網絡

FTP協議存在一些難以改善的缺點,它將走向終點。很顯然,這並非一個好的技術方案。運維

方案二:SFTP

SFTP協議是在FTP的基礎上對數據進行加密,使得傳輸的數據相對來講更安全。可是這種安全是以犧牲效率爲代價的,也就是說SFTP的傳輸效率比FTP要低。不過現實使用中,文件量並無那麼大,這種差異並不明顯。工具

實施方案:ui

雲服務器做爲服務端開啓SFTP,提供鏈接地址、用戶名、密碼,白名單限制訪問來源IP。加密

客戶端可根據操做系統類型,採用不一樣的技術措施按期下載備份。

A、下載到Window服務器:

定時任務+WinSCP

winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://username:password@192.168.204.130:22" "option transfer binary" "get /tmp D:\data\" "exit" /log=log_file.txt

B、下載到Linux服務器:

crontab+lftp

lftp -u username,password sftp://192.168.204.130 << EOF cd /tmp mget *.* bye EOF

方案三:rsync

rsync是linux系統下的數據鏡像備份工具,rsync的增量傳輸功能,十分強大。

假設待傳輸文件爲A,若是目標路徑下沒有文件A,則rsync會直接傳輸文件A,若是目標路徑下已存在文件A,則發送端視狀況決定是否要傳輸文件A。rsync默認使用"quick check"算法,它會比較源文件和目標文件(若是存在)的文件大小和修改時間mtime,若是兩端文件的大小或mtime不一樣,則發送端會傳輸該文件,不然將忽略該文件。

實施方案:

一、雲服務器搭建rsync服務端,設置帳戶密碼,白名單限制訪問來源IP。

二、本地服務器安裝rsync客戶端,編寫shell腳本,結合crontab實現定時增量備份。

rsync -avz --password-file=/root/passwd root@192.168.204.130::common /tmp >/dev/null 2>&1

以上,藉助於一些經常使用的運維工具,來構建的解決方案,能夠知足這個需求場景下的文件自動備份需求。

相關文章
相關標籤/搜索