NAS資料遷移初探

2021-09-23 01:29:05 字數 1972 閱讀 4413

阿里雲檔案儲存(network attached storage,簡稱nas)是面向阿里雲ecs例項、hpc和docker的檔案儲存服務,提供標準的檔案訪問協議,使用者無需對現有應用做任何修改,即可使用具備無限容量及效能擴充套件、單一命名空間、多共享、高可靠和高可用等特性的分布式檔案系統。相比於傳統的儲存裝置,nas所具有的高容量、高可靠、多共享等特性是現在諸多企業迫切需要的,能夠解決他們對現有系統在效能、擴充套件性方面的需求。傳統解決方案如何上雲,第一步就是原始資料的搬遷問題,如何做到不停服無縫搬遷,在很多場景下是非常棘手的問題,下面做簡單介紹。

具體的場景是使用者的資料在某種儲存裝置上,我們要將資料搬遷至nas檔案系統。這裡還分為靜態遷移和動態遷移,靜態遷移是指原始資料在遷移期間不會改變,而動態遷移是原始資料一直在更新。相對來說,靜態遷移要比動態遷移容易很多。

靜態遷移的主要步驟如下:

將原始資料拷貝到nas。

分別計算原始資料和nas上資料每個檔案的md5值,全部匹配就結束,如果哪些檔案不匹配,重新拷貝之後再進行第2步。

動態遷移的主要步驟如下:

設定乙個時間點t1,一般為當前之間。把最後修改時間在t1之前的資料全部拷貝到nas。

像靜態遷移一樣,計算md5值,確保t1之前的檔案全部遷移完畢。第二步完工的時間點為t2。根據搬遷的複雜性,t1和t2間隔可能幾小時,長的可能數天。

獲取最後修改時間在t1和t2之間的所有檔案,將這部分檔案拷貝到nas,並做md5校驗。這步完工的時間點為t3。

理想的狀態,如果上述動態遷移t2和t3之間的時間非常短的話(比如10分鐘),可以考慮在凌晨業務量比較小的時候把業務遷移上雲。但在一些特殊場景下,比如原始資料檔案特別多(幾千萬,上億的小檔案),這個時候遍歷掃瞄所有檔案的meta資訊,獲取t1之後修改過的檔案就很慢了,比較差的情形t2和t3的差距會有兩三天。

如何解決這個問題呢?linux核心從2.6.13版本開始提供乙個叫inotify的功能,可以監控檔案系統目錄級別的改動。在centos下面直接安裝inotify-tool這個工具就好了,yum install inotify-tools。要想監控/aaa/bbb目錄下面所有的檔案改動只需要執行inotifywait -rm /aaa/bbb/ 就可以了,所有的改動都會列印出來。 不過這個又引入了另外乙個問題,inotify的核心支援是非常消耗資源的,在64bit系統下面,監控乙個目錄需要消耗1kb的記憶體資源,也就是監聽1000萬的目錄就需要10gb的記憶體。因此在目錄特別多的情況下,要合理的控制inotify的監控目錄數,必要情況下需要綜合運用inotify+目錄檔案掃瞄的方法來縮短t2和t3的時間間隔。

下面針對nas的特性講講具體應該怎麼拷貝資料。nas目前支援nfsv3、nfsv4.0和smb協議(最後乙個目前正在公測中),這些協議都是標準的檔案訪問協議,即只要用上述協議掛載上了nas之後,就和讀寫本地盤沒有差別了。nas和本地盤最大的區別在於支援高併發、多共享,所以如果條件允許,資料上傳需要做到多執行緒、多機併發拷貝。

下面通過幾個例子,簡單介紹在目前的條件限制下如何快速遷移資料到nas:

case 1: 原始資料在ecs的雲盤上

這種情況是所有資料搬遷中最簡單的,由於資料已經在雲上,只不過是把他們從雲盤搬到nas。第一步掛載nas檔案系統,第二步多執行緒併發拷貝。ssd雲盤的讀取速度能夠到300mb/s,nas根據所購買的儲存包和實際使用容量,頻寬從100mb/s到560mb/s不等。具體參考這裡

case 2: 原始資料在阿里雲oss上

這種情況需要借助oss提供的sdk,移步這裡。主要思路也是併發拷貝,乙個執行緒把oss乙個bucket下面的object的key列出來,然後同時起多個執行緒讀取oss的object寫入nas。

case 3: 資料在客戶idc,nas在阿里雲vpc

這種情況下idc的伺服器跟阿里雲vpc內的ecs是網路不通的,而且目前nas還不支援http協議的訪問。因此解決方案一種方式是拉專線,直接連通idc伺服器和阿里雲ecs伺服器,先把資料上傳ecs,再上傳到nas。第二種方案,不用專線直接走公網,中間轉接用oss,使用者先把資料通過http推到阿里雲oss上,再把oss上的資料拷貝到nas。參考case2.

遷移學習初探

深度神經網路,相比於之前的傳統機器學習方法,可以看成是乙個全新的物種,這背後的原因,最明顯的還是深度學習對機器算力的巨大需求,在深度學習入門最少需要知道什麼?中介紹了深度學習所需的顯示卡資源,而當前大記憶體的機器不貴,而高效能,大視訊記憶體的顯示卡就沒那麼便宜了。這使得使用深度學習去處理實際生活中遇...

Redis資料遷移 鍵遷移

有時候我們想將乙個redis的資料遷移到另乙個redis中,redis提供了三種方式來滿足資料遷移的需求,分別是move dump restore migrate redis支援多資料庫,多資料庫之間彼此在資料上是隔離的。move key db就是把指定的鍵從源資料庫遷移到目標資料庫中。由於多資料庫...

mysql資料遷移框架 mysql資料遷移

本文總結各種場景下的資料複製 遷移 轉換。1 匯入 匯出 資料匯出 mysqldump uroot p dbname dbname.sql 包含表結構和表資料 資料匯入 mysql uroot p dbname dbname.sql 注意 匯出的sql檔案包含舊表資訊,請修改其中的create ta...