我現在有海量的數據文件(1000萬個文件)需要存儲,需要讓其他計算機可以很容易地訪問,數據無價,我還希望這個文件系統帶冗余功能。
我首先注意到的是Ubuntu Enterprise Cloud的提供者:Eucalyptus。它提供了和AWS(Amazon Web Service)幾乎完全兼容的雲計算接口。看起來似乎是個雲存儲的靠譜解決方案。
Eucalyptus模仿Amazon的S3服務,提供了一個叫做Walrus的存儲服務組件。
可是,經過一番探索,我發現Eucalyptus想說愛你不容易。
一方面是因為Eucalyptus配置起來很麻煩,缺乏文檔,網上幾乎找不到任何相關幫助,
另一方面,雖然理論上Eucalyptus和AWS的EC2/S3兼容,但實際上並非如此,很多在AWS上可以用的工具,在Eucalyptus上就無法使用
最關鍵是,直到最后我把Walrus配置完成之后,才發現Walrus根本不像我想的那樣,是一個帶冗余的雲存儲系統。而只是一個實現了S3接口的單機軟件而已。
實際上Walrus和Eucalyptus的另一個組件sc(storage controller)沒有任何關聯,Walrus只是提供了和S3一致的接口,而它的實現方式,既不帶冗余,也不能分開部署在多台服務器上。
於是我開始尋找一個真正的分布式文件系統,來解決我的存儲難題。一找才發現,市面上各種分布式文件系統品種繁多,層出不窮。列舉幾個主要的:
mogileFS:Key-Value型元文件系統,不支持FUSE,應用程序訪問它時需要API,主要用在web領域處理海量小圖片,效率相比mooseFS高很多。
fastDFS:國人在mogileFS的基礎上進行改進的key-value型文件系統,同樣不支持FUSE,提供比mogileFS更好的性能。
mooseFS:支持FUSE,相對比較輕量級,對master服務器有單點依賴,用perl編寫,性能相對較差,國內用的人比較多
glusterFS:支持FUSE,比mooseFS龐大
ceph:支持FUSE,客戶端已經進入了linux-2.6.34內核,也就是說可以像ext3/rasierFS一樣,選擇ceph為文件系統。徹底的分布式,沒有單點依賴,用C編寫,性能較好。基於不成熟的btrfs,其本身也非常不成熟。
lustre:Oracle公司的企業級產品,非常龐大,對內核和ext3深度依賴
NFS:老牌網絡文件系統,具體不了解,反正NFS最近幾年沒發展,肯定不能用。
本來我打算用mogileFS,因為它用的人最多,而且我的主要需求都是在web方面。
但是研究了它的api之后發現,Key-Value型文件系統沒有目錄結構,導致不能用list某個子目錄的所有文件,不能直接像本地文件系統一樣操作,干什么事情都需要一個api,讓人十分不爽。
mogileFs這種做法,可能是受同一個開發團隊的另一個大名鼎鼎的產品memcached的偵聽端口+api模式影響,也有可能是mogileFS剛開始設計的時候,FUSE還沒有開始流行。
總之我決心要找一個支持FUSE的分布式文件系統,最后就在mooseFS, glusterFS, ceph中選擇。從技術上來看,ceph肯定是最棒的,用c編寫,進入linux-2.6.34內核,基於btrfs文件系統,保證了它的高性能,而多台 master的結構徹底解決了單點依賴問題,從而實現了高可用。可是ceph太不成熟了,它基於的btrfs本身就不成熟,它的官方網站上也明確指出不要把ceph用在生產環境中。
而且國內用的人較少,linux發行版中,ubuntu10.04的內核版本是2.6.32,仍然不能直接使用ceph。
而glusterFS比較適合大型應用,口碑相對較差,因此也不考慮。
最后我選擇了缺點和優點同樣明顯的mooseFS。雖然它有單點依賴,它的master非常占內存。但是根據我的需求,mooseFS已經足夠滿足我的存儲需求。國內mooseFS的人比較多,並且有很多人用在了生產環境,更加堅定了我的選擇。