程序員的智囊庫系列之3--分布式文件系統(Distributed file systems)
這是 程序員的智囊庫系列 的第三篇文章。 上一篇文章 本來打算介紹幾個搭建網站的框架,但由于這部分的內容較多,還需要再整理一段時間,所以先放出這部分的第三篇文章。這一部分我們講介紹分布式存儲相關的一些知識,以及當下(2013-10-29)主流的分布式文件系統。由于有些NoSQL數據庫也可以用來做分布式文件系統的替代物,所以這部分我們還將介紹幾個NoSQL數據庫。主要講介紹以下幾種分布式文件系統和NoSQL數據庫:
-
nfs
-
ceph
-
TFS
-
GlusterFS
-
MooseFS
-
PVFS2
-
GPFS
-
HDFS
-
FastDFS
-
MogileFS
-
Lustre
-
GoogleFS
-
memcached
-
Tokyo Tyrant
-
Redis
- MongoDB
背景
之前公司一直用nfs做文件服務器,nfs的好處就是配置簡單,使用方便。但缺點是當數據量很多,尤其是小文件多的時候,其性能令人堪憂,往往會成為整個系統的性能瓶頸。所以準備在將來考慮用性能更好的方法替代nfs,于是花大工夫整理調查,橫向對比了各分布式文件系統。調查報告的詳細結果整理在 這里 ,本文是從中抽出幾個概要部分稍作講解,具體內容請參見調查報告 原文 。 我把分析報告原文放到了七牛上,但我感覺它最近不太穩定,如果下載不了,請與我聯系,或直接在下面評論里留郵箱。
注:本來調查報告分兩部分,理論分析報告和性能測試報告。本文的目的是介紹給大家更多的知識,擴展知識面,增加知識的廣度。
而不是說直接告訴你,這個比那個好,你用這個,別用那個。
尤其是性能測試這種東西,別人的測試結果的參考價值并不是很大,必須沉下心來,自己去一點點的測才能找到最適合自己的工具、參數。
因此,本文只給出了理論分析報告,并沒有給出性能測試報告。
幾點基礎知識
存儲方案
-
DAS
-
SAN
- NAS
數據存儲的方法
-
塊存儲(block)
-
文件存儲(file)
- 對象存儲(object)
元數據(meta data)
元數據的概念:data about data
數據是指普通文件中的實際數據,而元數據指用來描述一個文件的特征的系統數據,
諸如訪問權限、文件擁有者以及文件數據塊的分布信息(inode...)等等。
在集群文件系統中,分布信息包括文件在磁盤上的位置以及磁盤在集群中的位置。
用戶需要操作一個文件必須首先得到它的元數據,才能定位到文件的位置并且得到文件的內容或相關屬性。
元數據對文件系統的影響:文件系統對元數據的操作占據了傳統文件系統總負荷的近一半。
高效的元數據管理方式對提高整個系統的性能至關重要。
A comparison of file system workloads. 2000 USENIX Annual Technical Conference
單點依賴
當一臺服務器出現故障后,整個服務器群癱瘓。
解決方案:
1 TFS 利用linux 高可用性(HA)機制,配置HA元數據服務集群。但這樣只能配置主設備和從設備,事實上同一時刻還是只有一個服務器在服務。這樣做只能提高系統的穩定性,并不能解決采用集成式元數據服務模式的瓶頸問題(由于系統需要同步,反而會降低性能)。
2 Ceph GPFS 分布式元數據服務模型 將負載分散到多臺服務器解決了性能瓶頸問題,利用對等的服務器或冗余元數據服務分區解決了單點故障問題。分布式看似非常完善,然而它大大增加了設計實現上的復雜性,同時可能會引入了新的問題,即性能開銷和數據一致性問題。
3 GlusterFS 無元數據服務模型
無元數據服務器設計的好處是沒有單點故障和性能瓶頸問題,可提高系統擴展性、性能、可靠性和穩定性。對于海量小文件應用,這種設計能夠有效解決元數據的難點問題。它的負面影響是,數據一致問題更加復雜,文件目錄遍歷操作效率低下,缺乏全局監控管理功能。同時也導致客戶端承擔了更多的職能,比如文件定位、名字空間緩存、邏輯卷視圖維護等等,這些都增加了客戶端的負載,占用相當的CPU和內存。
HA高可用性
高可用性H.A.(High Availability)指的是通過盡量縮短因日常維護操作(計劃)和突發的系統崩潰(非計劃)所導致的停機時間,以提高系統和應用的可用性。它與被認為是不間斷操作的容錯技術有所不同。HA系統是目前企業防止核心計算機系統因故障停機的最有效手段。
實現方法:
-
heartbeat:比較常用
-
rhcs:redhat集群套件--redhat cluster suite 圖形界面,實現方便,可有100多個節點
-
corosync/openais + paceker
2個節點:
采用主備模式:一臺激活,另一臺備份,對外呈現一個虛擬ip地址。兩個節點之間采用心跳線,備份節點使用心跳線來探測活動節點是否處于活動狀態。
心跳線:雙絞線 或光纖跳線或 serial線
采用主主模式:兩個節點,在提供web服務時,左側為激活狀態,右側為備份狀態;在實現mail服務時, 一個為激活狀態,一個為備份狀態。
FUSE
Filesystem in userspace
在用戶態實現的文件系統
為什么使用FUSE:
首先要了解用戶態和內核態
為了保證系統安全,在用戶態執行的代碼被硬件限制,不能進行某些操作,如修改其他程序的存儲空間、修改配置文件、殺死其他進程、重啟等。
而在內核態(核心態)執行的代碼,可以不加限制地對系統存儲、外部設備進行操作。
但是從用戶態切換到核心態需要很大的開銷。
所以FUSE有如下優點:
能夠大幅提高效率,簡化了為操作系統提供新的文件系統的工作量,特別適用于各種虛擬文件系統和網絡文件系統。
開源軟件的版本(copyleft)問題
GPL GPL2 GPL3 LGPL AGPL
題外話
無目錄結構、扁平化存儲是海量存儲的未來發展方向
一般來講計算機內部對文件的操作和查找不是按目錄進行定位的
目錄結構完全是為了方便用戶瀏覽。
因而,一些不會與用戶直接打交道的數據,完全可以不用目錄結構存儲。設計新產品的時候可以采用扁平化設計。
參考資料
關于存儲,分布式存儲,分布式文件系統的更多信息,可以參見以下幾本資料:
-
劉愛貴整理的《
分布式文件系統
》。分布式文件系統的大體認識。
-
張冬寫的《
大話存儲
》和《大話存儲2》。這個系列的書講得非常通俗易懂,而且很詳細,例子也很生動,我認為可以作為國內的權威了。
- 《海量存儲》
分布式文件系統的評價標準
部署
-
部署復雜程度
-
服務器配置要求
-
文件系統接口
-
是否支持FUSE
-
是否需要配套的客戶端
-
是否支持目錄結構
- 可拓展性
性能
-
小文件支持
-
大文件支持
-
文件大小對性能的影響
- 平均傳輸速率
數據安全
-
單點依賴
-
冗余保護
- 故障恢復
實際應用
-
適用產品級別
-
是否成熟
-
實際應用
- 版本號
維護
-
是否開源
-
license
-
社區活躍程度
-
文檔語言
-
開發語言
- 文檔完善程度
其他
-
數據遷移成本
-
存儲機制
-
元數據存儲方式
- 其他特點
如何才能選擇最好的分布式文件系統呢?沒有最好的分布式文件系統,只有最適合你的實際情況的。不是說最近ceph很火,ceph就一定適合你,一定要在認真分析你的實際情況后,通過理論參數做出初步篩選,然后通過性能測試來做最后的篩選,切不可魯莽選擇。
詳細的理論比對請參見理論分析報告的
原文
!
時間:2014-11-16
作者:
FingerLiu
如果您對我介紹的知識感興趣,歡迎收藏和推薦!謝謝您的支持!
-------------------------------
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
