背景
隨著數(shù)字化在我們?nèi)粘I钪性絹碓礁叩谋戎?,各行各業(yè)不可避免的產(chǎn)生越來越多的數(shù)據(jù)。對于日益增多的數(shù)據(jù),我們都有著備份的需求。如果有一套方案能夠提供無限的存儲空間,可以存儲所有主機(jī)上的數(shù)據(jù)的備份,那么我們就再也無需擔(dān)心數(shù)據(jù)的增長了。阿里云對象存儲是一種海量、安全、低成本、高可靠的云存儲服務(wù),能夠完美契合我們的需求。而且通過將數(shù)據(jù)備份放在云端,本地就不再需要預(yù)留任何存儲空間給備份,可以大大提高本地存儲空間的利用效率。
如果我們想將數(shù)據(jù)從當(dāng)前主機(jī)定期備份到阿里云對象存儲,有沒有什么好的方法呢?我們可以利用rsync命令,rsync是linux下面的一個非常強(qiáng)大和高效的工具,可以在指定的源目錄和目標(biāo)目錄之間進(jìn)行數(shù)據(jù)的同步,并且能夠?qū)崿F(xiàn)增量備份。不過它的源端和目標(biāo)端都是目錄,而阿里云對象存儲的訪問協(xié)議是RESTFUL的接口,沒有辦法直接通過文件的協(xié)議進(jìn)行訪問。這時候就需要用到云存儲網(wǎng)關(guān)了,云存儲網(wǎng)關(guān)能夠?qū)ESTFUL的對象訪問協(xié)議轉(zhuǎn)換為傳統(tǒng)的NFS/SMB文件訪問協(xié)議,大大降低應(yīng)用對于對象存儲的適配。而且通過云存儲網(wǎng)關(guān)提供的文件接口進(jìn)行備份,源端文件的uid/gid之類的文件屬性在備份到OSS之后也不會丟失。接下來我們通過具體的實踐來展示整個數(shù)據(jù)備份的過程。
配置實踐
我們本地有一個/working的目錄,我們需要將這個目錄里面的數(shù)據(jù)備份到OSS存儲桶里面的/rsync/目錄里面。
[root@hz1 working]# ls
dir1 dir2 dir3
[root@hz1 working]# pwd
/working
我們首先創(chuàng)建了一個云存儲網(wǎng)關(guān)并創(chuàng)建了一個NFS共享。如果不熟悉云存儲網(wǎng)關(guān),可以參考如何在Linux上掛載OSS Bucket,里面詳細(xì)描述了創(chuàng)建網(wǎng)關(guān)NFS共享以及掛載的過程。下面就是我們創(chuàng)建的NFS共享,這里NFS共享的數(shù)據(jù)最終會存儲在OSS Bucket里面的rsync子目錄里面。
在我們的主機(jī)上,云存儲網(wǎng)關(guān)的NFS共享的掛載點位于/oss,剛開始里面什么數(shù)據(jù)都沒有。
[root@hz1 /]# mount 172.16.0.241:/test-rsync /oss
[root@hz1 /]# ls /oss
[root@hz1 /]#
現(xiàn)在源端目錄和目的端目錄都已經(jīng)有了,接下來就該使用rsync進(jìn)行數(shù)據(jù)備份了。rsync功能很強(qiáng)大,但是使用起來卻非常簡單。通過下面的命令我們就可以進(jìn)行備份了。-r選項表示對源目錄進(jìn)行遞歸操作。-a選項表明備份的時候保留文件uid/gid/owner/mtime等基本的文件屬性,其中mtime屬性會被用來后續(xù)判斷增量。以/working或者/working/方式指定源目錄決定了目標(biāo)目錄里面是否包含working這個文件夾。下面的示例是不會在目的端生成working目錄的。
[root@hz1 ——]# rsync /working/ /oss -rav
sending incremental file list
working/dir3/
working/dir3/new_abc
sent 1,557 bytes received 46 bytes 1,068.67 bytes/sec
total size is 400 speedup is 0.25
執(zhí)行完上面的命令之后,我們看到/oss目錄下面已經(jīng)包含了源目錄里面的那些文件了。
[root@hz1 ——]# ls /oss
dir1 dir2 dir3 new_file
那么這些文件有沒有同步到OSS里面呢,我們打開阿里云OSS控制臺瀏覽相應(yīng)的目錄,可以看見這些文件無一例外的都已經(jīng)被上傳到了對應(yīng)的存儲桶里面。
總結(jié)
我們前面展示了如何利用rsync將文件備份到阿里云對象存儲里面。不過在實際的使用中,還有一些需要關(guān)注的地方,結(jié)合下面幾點相信能滿足絕大多數(shù)用戶的需求了,有需要的小伙伴感覺來嘗試一下吧。
前面只是展示了單次的備份過程,如果想要定期備份怎么辦呢?答案很簡單,通過Linux Crontab定時任務(wù)就可以實現(xiàn)啦,網(wǎng)上相關(guān)的教程很多,這里就不做展開了。
rsync是單線程工作的,所以如果碰到數(shù)據(jù)的備份速度不能滿足需求的時候,可以通過起多個rsync進(jìn)程的方式來提升同步的速度,可以讓不同的rsync進(jìn)程處理不同的目錄。
rsync通過掃描所有源端文件和目標(biāo)端文件來比對從而發(fā)現(xiàn)增量。如果源端文件非常多,比如達(dá)到億級別或者更多,掃描本身會產(chǎn)生非常大的負(fù)擔(dān)。所以如果結(jié)合用戶自身的業(yè)務(wù)能夠直接導(dǎo)出增量文件或者目錄,然后指定rsync只負(fù)責(zé)處理這部分增量文件,那么勢必能大大減少備份的時間。