天天看點

海量小檔案同步

集中式存儲是目前中小企業廣泛采用的方案,随着時間的流逝,這些存儲不可避免的膨脹。集中式存儲的弊端愈加顯現,同步就是其中一個。

環境:

檔案容量以TB計,裡面是千萬/億級的小檔案,分布在成千上萬的子檔案夾内。

分析:

rsync幾乎是唯一選擇,海量小檔案同步面臨的問題主要是rsync無止境的掃描,同步進度難以把控,巨大的臨時目錄等。是以解決辦法隻能是庖丁解牛,将一個大任務分解成N個小任務。

場景假設如下:

1、源伺服器目錄結構是按照年月日分布,示例如下

/www/p_w_picpaths/2014/04/30/xxx.png      

2、目标rsync伺服器為 192.168.1.2::www,且可寫。

解決辦法:

很明顯,同步最底層的目錄最快。

find /www/p_w_picpaths \
    -mindepth 3 \
    -maxdepth 3 \
    -type d \
    -exec rsync -aquR  {}/ 192.168.1.2::www/p_w_picpaths/ \; \
    -exec echo /www/p_w_picpaths/{} done \;      

注:-R 可解決遠端rsync伺服器的目錄結構問題。

另一種方法是for循環,比較好了解。

#!/usr/bin/env bash

dir="www/p_w_picpaths"

for year in  2014 2015 ;do
        for month in `seq 1 12`;do
                for day in `seq 1 31`;do
                        if [  -d /$dir/$year/$month/$day ];then
                                rsync -aqu /$dir/$year/$month/$day/  192.168.1.2::$dir/$year/$month/$day/
                        else
                                echo "directory /$dir/$year/$month/$day not exist."
                        fi
                done
        done
done      

集中式存儲的缺點是: 必須提前做容量規劃,存儲嚴格控制在設計容量内之内,如果要擴充,必須重新進行容量規劃。

要根本解決這個問題,終極的辦法似乎隻有分布式檔案系統,用全新的設計理念的來解決存儲問題,按需擴充。

繼續閱讀