moosefs適合小文件存儲
A. 淺析 Haystack 圖片存儲系統
Facebook在2010年的時候發表過一篇在分布式存儲系統領域很有名的一篇文章《Finding a needle in Haystack》來描述他們的圖片存儲系統,Haystack 存儲了超過2600億張圖片,大約佔了20TB的數據,用戶每周都會上傳10億張圖片,高峰時期的並發量在100萬以上(這是2010年的數據,現在很有可能上了一個數量級)。
在這個數量級之下,需要考慮的問題不僅僅是高吞吐,低延時,保證數據的一致性,還要考慮如何能節省流量,容易擴展,容錯等等。下面我們就來看下Haystack是怎樣滿足這些分布式系統的要素的。
圖片存儲系統的最大特點是數據只寫一次,讀取頻繁,不會修改,很少刪除。Facebook 一開始的存儲系統是基於NFS的NAS(Network Attached Storage), 但這種基於 POSIX 的文件系統無法支撐如此大的負載。其中主要的問題在於在圖片定址的過程中會產生過多的磁碟操作。
我們知道從傳統文件系統裡面讀取一個文件需要至少三次磁碟操作,第一次從硬碟中讀取目錄的 metadata 到內存中,然後讀取inode到內存,最後才從磁碟中讀取文件內容。
再者這些metadata裡麵包含了大量比如許可權控制這些對於圖片存儲系統來說無用的信息,也浪費了大量的磁碟空間。當像圖片這樣的靜態資源服務出現瓶頸的時候,自然就會想到使用 CDN (Content Delivery Networks) 系統。在傳統的設計中,一個圖片的 HTTP 請求發送後, 如果 CDN 有這個資源的緩存,就會立馬返回,反之 ,CDN 會將根據請求的 URL 從存儲系統裡面讀取圖片,更新緩存,然後再返回。在這樣的設計中,CDN 確實可以很有效地處理熱點圖片的請求。
但像 Facebook 這樣的社交網路中,有大量的請求是針對那些非熱點或者老內容的,用戶在請求那些長尾 (long tail) 內容時將沒有優化。當然,有些同學會說,那我可以將所有的圖片都緩存到 CDN,那確實會解決這個問題,但將會極大地增加資源的開銷。
為了減少那些直接 hit 到存儲系統的請求的磁碟操作,他們想到在第一次讀取文件的時候把filename到 file handle 的映射緩存到內存,在下一次讀取文件的時候,會調用自定義的open_by_filehandle來減少磁碟操作,但這對於long tail的讀取問題依然存在,因為這些文件的映射關系沒有提前放在內存中。
於是,Facebook 決定從頭研發圖片存儲系統,從前面我們可以看出,Haystack 的核心任務就是在處理每一次的請求中盡可能地減少磁碟操作。我們先來描述下 Haystack 讀取和上傳圖片流程是怎樣的,然後再來看其中的細節是如何處理的。
當發起一次圖片讀取請求的時候會通過一個事先構建好的 URL
http://///這個 URL 實際上顯示出了訪問的順序,先從外部 CDN 讀取,如果沒有,訪問內部 Cache,如果還是沒有,就直接訪問 Store Machine.(URL最後一部分提供了圖片的唯一標識)
用戶上傳圖片的時候先會上傳到 web 伺服器, 然後伺服器從Directory中找到一個可寫的physical volume,最後伺服器會給這個圖片生成一個唯一ID, 然後寫入到這個logical volume 所對應的所有physical volume中。
上面的過程中出現了幾個陌生的名詞,別著急,我們一個個來看。我們先來介紹 Haystack 的三個主要組件:
Store,Directory,Cache.
Store 是核心組件,負責圖片的存儲。Store 的容量決定了這個存儲系統的容量,整個 Store 組件由很多個 store machine 組成,store machine 的容量又由一系列的 physical volume 決定。
例:要提供 10TB容量,我們可分攤到 100 個 physical volume,每個 physical volume 提供 100 GB 的容量。這時候有的同學會問,那麼數據冗餘是怎麼解決的呢?Haystack 借鑒了普通硬碟中的 logical volume 的概念,將不同機器上的多個 physical
volume 組成了一個虛擬的 logical volume。
當存儲一張圖片的時候,實際上是存儲到了 logical volume 對應的所有 physical volume中。它們之間的映射關系連同其它的metadata都存儲在 Directory組件中。每個physicalvolume 中都存儲了上百萬張圖片,可以把它想像成一個巨大的 append-only 文件,然後通過 offset 來訪問文件。
我們來詳細看下這個文件到底是如何存放的,如何來達到減少磁碟操作目的的。對於每個這樣超大的文件,都由一個 superblock 和一系列的 needles 組成,每個 needle 就是每張圖片的信息。看下下面這張圖,它的結構就一目瞭然了。
每個needle包含的細節信息有圖片ID,圖片大小,圖片數據等等,還會有數據校驗的屬性。每個 store machine 都有若干個physical volume大文件, 為了提高檢索needles 的速度,在內存里為每個physical volume都維護了一張圖片I 到needle之間的映射表。
當store machine接收到讀取請求時,首先從內存映射表中找到相應的metadata, 然後通過offset從硬碟中讀取到整個needle, 通過數據校驗後返回。如果接收到的是上傳請求,會把組織好的needle追加到所有對應的physical volume文件中,並且更新內存里的映射表。如果是刪除操作的話,我們注意到下圖中有個Flags標志位其實就是用來標記是否是刪除的狀態,這樣一來就很簡單,直接在這個位置標記好,系統會在後面執行compaction 操作回收這些空間。
講到這里,一個正常流程的存儲過程已經很清楚了。這時候我們就需要考慮分布式系統一個必不可少的特性:容錯性。當一個 store machine 宕機的時候,理論上我們可以讀取所有的 physical volume 來重新構建內存映射表,但這就需要從磁碟重新讀取 TB 級別的數據,顯然是非常耗時和不高效的。為了解決這個問題,每個 store machine 為每個 physical volume 都維護了一個索引文件。這個索引文件類似於游戲中的存檔點 (checkpoint),它的結構和 physical volume 文件類似,保存了查找每個 needle 所需的屬性。為了性能,索引文件是非同步更新的(寫的時候非同步更新,刪的時候壓根不會更新),這就會帶來一個問題:索引文件有可能不是最新的。之前我們提到過,physical volume 文件是一個 append-only 的文件,索引文件也是。所以我們只需要在重啟 store machine 的時候,從後向前掃描 physical volume 文件找到那幾個沒有被索引的文件,加到索引里去就行了。對於被刪除的文件,在真正讀取完整 needle 數據的時候,通過檢查刪除標志位來更新內存映射表。
我們之前提到可以使用 CDN 來緩解系統壓力,但它無法很好地解決非熱點圖片的問題,並且如果 CDN 節點出現故障的話,沒有 Cache 這一層會對底層的存儲系統 Store 產生巨大的壓力。Cache 組件主要緩存了最近上傳的圖片,它的概念很簡單,實際上是一個分布式 hash table,通過圖片的 ID 為 key 可以找到對應的數據。Cache 接收從 CDN 或者瀏覽器直接發來的 HTTP 請求,但只有在以下兩個條件都滿足的情況下才會緩存圖片:
1) 請求來自用戶瀏覽器而不是來自 CDN
2) 請求的 store machine 是可寫的
這聽上去有些費解,條件 1 的原因是如果一個請求在 CDN 緩存中 miss 其實也會在 Cache 中 miss (如果一張圖片成為熱門的話,那也能在 CDN 找到),條件 2 的原因則是避免讓可寫的 store machine 進行大量讀操作,因為圖片通常在剛剛上傳後會被大量讀取,文件系統通常在只讀或者只寫而不是既讀又寫的時候性能比較好。
如果沒有 Cache 的話,可寫的 store machine 將會同時處理寫操作以及大量的讀操作,會導致性能的急劇下降。
現在我們只剩下 Directory 組件沒有講了。除了之前我們提到的存儲了 physical volume 到 logical volume 的映射關系以及圖片 ID 到 logical physical 的映射關系,它還提供負載均衡服務以及為每個操作選擇具體的 volume (因為寫操作的對象是 logical volume,讀操作的對象是 physical volume), 它還決定了一個請求是被 CDN 處理還是被 Cache 處理。Directory 還可以標記邏輯卷的狀態,在運維需要或者空間滿了的時候可以標記為只讀狀態。當往 Store 加新機器的時候,這些機器就會標記成可寫的,只有可寫的機器才能接受圖片上傳請求。這里有一個細節需要注意,圖片 ID 到 logical physical 的映射表肯定無法存放在單機內存,文章中也沒有交代具體實現。我們猜想可以使用 MySQL 分片集群和加上 Memcached 集群來實現。總的來講,Directory 實際上根據 metadata,然後結合各種策略,實現了整個系統的調度器。
本文描述了 Haystack 圖片存儲系統的主要脈絡,當然還有許多細節沒有提到,比如整個系統的容錯機制,如何實現批量寫操作等等。經過這幾年的發展,我們相信 Haystack 肯定也進行了更多的優化,現在一些開源的分布式存儲系統也被應用到實際的生產系統中,比如淘寶的 TFS,MooseFS 等等。我們會在後續的文章中比較這些系統之間的異同,總結出解決其中典型問題的通用方法。
B. 分布式存儲有哪些
問題一:當前主流分布式文件系統有哪些?各有什麼優缺點 目前幾個主流的分布式文件系統除GPFS外,還有PVFS、Lustre、PanFS、GoogleFS等。
1.PVFS(Parallel Virtual File System)項目是Clemson大學為了運行linux集群而創建的一個開源項目,目前PVFS還存在以下不足:
1)單一管理節點:只有一個管理節點來管理元數據,當集群系統達到一定的規模之後,管理節點將可能出現過度繁忙的情況,這時管理節點將成為系統瓶頸;
2)對數據的存儲缺乏容錯機制:當某一I/O節點無法工作時,數據將出現不可用的情況;
3)靜態配置:對PVFS的配置只能在啟動前進行,一旦系統運行則不可再更改原先的配置。
2.Lustre文件系統是一個基於對象存儲的分布式文件系統,此項目於1999年在Carnegie Mellon University啟動,Lustre也是一個開源項目。它只有兩個元數據管理節點,同PVFS類似,當系統達到一定的規模之後,管理節點會成為Lustre系統中的瓶頸。
3.PanFS(Panasas File System)是Panasas公司用於管理自己的集群存儲系統的分布式文件系統。
4.GoogleFS(Google File System)是Google公司為了滿足公司內部的數據處理需要而設計的一套分布式文件系統。
5.相對其它的文件系統,GPFS的主要優點有以下三點:
1)使用分布式鎖管理和大數據塊策略支持更大規模的集群系統,文件系統的令牌管理器為塊、inode、屬性和目錄項建立細粒度的鎖,第一個獲得鎖的客戶將負責維護相應共享對象的一致性管理,這減少了元數據伺服器的負擔;
2)擁有多個元數據伺服器,元數據也是分布式,使得元數據的管理不再是系統瓶頸;
3)令牌管理以位元組作為鎖的最小單位,也就是說除非兩個請求訪問的是同一文件的同一位元組數據,對於數據的訪問請求永遠不會沖突.
問題二:分布式存儲是什麼?選擇什麼樣的分布式存儲更好? 分布式存儲系統,是將數據分散存儲在多 *** 立的設備上。傳統的網路存儲系統採用集中的存儲伺服器存放所有數據,存儲伺服器成為系統性能的瓶頸,也是可靠性和安全性的焦點,不能滿足大規模存儲應用的需要。分布式網路存儲系統採用可擴展的系統結構,利用多台存儲伺服器分擔存儲負荷,利用位置伺服器定位存儲信息,它不但提高了系統的可靠性、可用性和存取效率,還易於擴展。
聯想超融合ThinkCloud AIO超融合雲一體機是聯想針對企業級用戶推出的核心產品。ThinkCloud AIO超融合雲一體機實現了對雲管理平台、計算、網路和存儲系統的無縫集成,構建了雲計算基礎設施即服務的一站式解決方案,為用戶提供了一個高度簡化的一站式基礎設施雲平台。這不僅使得業務部署上線從周縮短到天,而且與企業應用軟體、中間件及資料庫軟體完全解耦,能夠有效提升企業IT基礎設施運維管理的效率和關鍵應用的性能
問題三:什麼是分布式存儲系統? 就是將數據分散存儲在多 *** 立的設備上
問題四:什麼是分布式數據存儲 定義:
分布式資料庫是指利用高速計算機網路將物理上分散的多個數據存儲單元連接起來組成一個邏輯上統一的資料庫。分布式資料庫的基本思想是將原來集中式資料庫中的數據分散存儲到多個通過網路連接的數據存儲節點上,以獲取更大的存儲容量和更高的並發訪問量。近年來,隨著數據量的高速增長,分布式資料庫技術也得到了快速的發展,傳統的關系型資料庫開始從集中式模型向分布式架構發展,基於關系型的分布式資料庫在保留了傳統資料庫的數據模型和基本特徵下,從集中式存儲走向分布式存儲,從集中式計算走向分布式計算。
特點:
1.高可擴展性:分布式資料庫必須具有高可擴展性,能夠動態地增添存儲節點以實現存儲容量的線性擴展。
2 高並發性:分布式資料庫必須及時響應大規模用戶的讀/寫請求,能對海量數據進行隨機讀/寫。
3. 高可用性:分布式資料庫必須提供容錯機制,能夠實現對數據的冗餘備份,保證數據和服務的高度可靠性。
問題五:分布式文件系統有哪些主要的類別? 分布式存儲在大數據、雲計算、虛擬化場景都有勇武之地,在大部分場景還至關重要。munity.emc/message/655951 下面簡要介紹*nix平台下分布式文件系統的發展歷史:
1、單機文件系統
用於操作系統和應用程序的本地存儲。
2、網路文件系統(簡稱:NAS)
基於現有乙太網架構,實現不同伺服器之間傳統文件系統數據共享。
3、集群文件系統
在共享存儲基礎上,通過集群鎖,實現不同伺服器能夠共用一個傳統文件系統。
4、分布式文件系統
在傳統文件系統上,通過額外模塊實現數據跨伺服器分布,並且自身集成raid保護功能,可以保證多台伺服器同時訪問、修改同一個文件系統。性能優越,擴展性很好,成本低廉。
問題六:分布式文件系統和分布式資料庫有什麼不同 分布式文件系統(dfs)和分布式資料庫都支持存入,取出和刪除。但是分布式文件系統比較暴力,可以當做key/value的存取。分布式資料庫涉及精煉的數據,傳統的分布式關系型資料庫會定義數據元組的schema,存入取出刪除的粒度較小。
分布式文件系統現在比較出名的有GFS(未開源),HDFS(Hadoop distributed file system)。分布式資料庫現在出名的有Hbase,oceanbase。其中Hbase是基於HDFS,而oceanbase是自己內部實現的分布式文件系統,在此也可以說分布式資料庫以分布式文件系統做基礎存儲。
問題七:分布式存儲有哪些 華為的fusionstorage屬於分布式 您好,很高興能幫助您,首先,FusionDrive其實是一塊1TB或3TB機械硬碟跟一塊128GB三星830固態硬碟的組合。我們都知道,很多超極本同樣採用了混合型硬碟,但是固態硬碟部分的容量大都只有8GB到32GB之間,這個區間無法作為系統盤來使用,只能作
問題八:linux下常用的分布式文件系統有哪些 這他媽不是騰訊今年的筆試題么
NFS(tldp/HOWTO/NFS-HOWTO/index)
網路文件系統是FreeBSD支持的文件系統中的一種,也被稱為NFS。
NFS允許一個系統在網路上與它人共享目錄和文件。通過使用NFS, 用戶和程序可以象訪問本地文件一樣訪問遠端系統上的文件。它的好處是:
1、本地工作站使用更少的磁碟空間,因為通常的數據可以存放在一台機器上而且可以通過網路訪問到。
2、用戶不必在每個網路上機器裡面都有一個home目錄。home目錄可以被放在NFS伺服器上並且在網路上處處可用。
3、諸如軟碟機、CDROM、和ZIP之類的存儲設備可以在網路上面被別的機器使用。可以減少整個網路上的可移動介質設備的數量。
開發語言c/c++,可跨平台運行。
OpenAFS(openafs)
OpenAFS是一套開放源代碼的分布式文件系統,允許系統之間通過區域網和廣域網來分享檔案和資源。OpenAFS是圍繞一組叫做cell的文件伺服器組織的,每個伺服器的標識通常是隱藏在文件系統中,從AFS客戶機登陸的用戶將分辨不出他們在那個伺服器上運行,因為從用戶的角度上看,他們想在有識別的Unix文件系統語義的單個系統上運行。
文件系統內容通常都是跨cell復制,一便一個硬碟的失效不會損害OpenAFS客戶機上的運行。OpenAFS需要高達1GB的大容量客戶機緩存,以允許訪問經常使用的文件。它是一個十分安全的基於kerbero的系統,它使用訪問控制列表(ACL)以便可以進行細粒度的訪問,這不是基於通常的Linux和Unix安全模型。開發協議IBM Public,運行在linux下。
MooseFs(derf.homelinux)
Moose File System是一個具備容錯功能的網路分布式文件統,它將數據分布在網路中的不同伺服器上,MooseFs通過FUSE使之看起來就 是一個Unix的文件系統。但有一點問題,它還是不能解決單點故障的問題。開發語言perl,可跨平台操作。
pNFS(pnfs)
網路文件系統(Network FileSystem,NFS)是大多數區域網(LAN)的重要的組成部分。但NFS不適用於高性能計算中苛刻的輸入書櫥密集型程序,至少以前是這樣。NFS標準的罪行修改納入了Parallel NFS(pNFS),它是文件共享的並行實現,將傳輸速率提高了幾個數量級。
開發語言c/c++,運行在linu下。
googleFs
據說是一個比較不錯的一個可擴展分布式文件系統,用於大型的,分布式的,對大量數據進行訪問的應用。它運行於廉價的普通硬體上,但可以提供容錯功能,它可以給大量的用戶提供性能較高的服務。google自己開發的。
問題九:分布式存儲都有哪些,並闡述其基本實現原理 神州雲科 DCN NCS DFS2000(簡稱DFS2000)系列是面向大數據的存儲系統,採用分布式架構,真正的分布式、全對稱群集體系結構,將模塊化存儲節點與數據和存儲管理軟體相結合,跨節點的客戶端連接負載均衡,自動平衡容量和性能,優化集群資源,3-144節點無縫擴展,容量、性能歲節點增加而線性增長,在 60 秒鍾內添加一個節點以擴展性能和容量。
問題十:linux 分布式系統都有哪些? 常見的分布式文件系統有,GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS、FastDFS等。各自適用於不同的領域。它們都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。
GFS(Google File System)
--------------------------------------
Google公司為了滿足本公司需求而開發的基於Linux的專有分布式文件系統。。盡管Google公布了該系統的一些技術細節,但Google並沒有將該系統的軟體部分作為開源軟體發布。
下面分布式文件系統都是類 GFS的產品。
HDFS
--------------------------------------
Hadoop 實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。 Hadoop是Apache Lucene創始人Doug Cutting開發的使用廣泛的文本搜索庫。它起源於Apache Nutch,後者是一個開源的網路搜索引擎,本身也是Luene項目的一部分。Aapche Hadoop架構是MapRece演算法的一種開源應用,是Google開創其帝國的重要基石。
Ceph
---------------------------------------
是加州大學聖克魯茲分校的Sage weil攻讀博士時開發的分布式文件系統。並使用Ceph完成了他的論文。
說 ceph 性能最高,C++編寫的代碼,支持Fuse,並且沒有單點故障依賴, 於是下載安裝, 由於 ceph 使用 btrfs 文件系統, 而btrfs 文件系統需要 Linux 2.6.34 以上的內核才支持。
可是ceph太不成熟了,它基於的btrfs本身就不成熟,它的官方網站上也明確指出不要把ceph用在生產環境中。
Lustre
---------------------------------------
Lustre是一個大規模的、安全可靠的,具備高可用性的集群文件系統,它是由SUN公司開發和維護的。
該項目主要的目的就是開發下一代的集群文件系統,可以支持超過10000個節點,數以PB的數據量存儲系統。
目前Lustre已經運用在一些領域,例如HP SFS產品等。
C. 互聯網如何海量存儲數據
目前存儲海量數據的技術主要包括NoSQL、分布式文件系統、和傳統關系型資料庫。隨著互聯網行業不斷的發展,產生的數據量越來越多,並且這些數據的特點是半結構化和非結構化,數據很可能是不精確的,易變的。這樣傳統關系型資料庫就無法發揮它的優勢。因此,目前互聯網行業偏向於使用NoSQL和分布式文件系統來存儲海量數據。
下面介紹下常用的NoSQL和分布式文件系統。
NoSQL
互聯網行業常用的NoSQL有:HBase、MongoDB、Couchbase、LevelDB。
HBase是Apache Hadoop的子項目,理論依據為Google論文 Bigtable: A Distributed Storage System for Structured Data開發的。HBase適合存儲半結構化或非結構化的數據。HBase的數據模型是稀疏的、分布式的、持久穩固的多維map。HBase也有行和列的概念,這是與RDBMS相同的地方,但卻又不同。HBase底層採用HDFS作為文件系統,具有高可靠性、高性能。
MongoDB是一種支持高性能數據存儲的開源文檔型資料庫。支持嵌入式數據模型以減少對資料庫系統的I/O、利用索引實現快速查詢,並且嵌入式文檔和集合也支持索引,它復制能力被稱作復制集(replica set),提供了自動的故障遷移和數據冗餘。MongoDB的分片策略將數據分布在伺服器集群上。
Couchbase這種NoSQL有三個重要的組件:Couchbase伺服器、Couchbase Gateway、Couchbase Lite。Couchbase伺服器,支持橫向擴展,面向文檔的資料庫,支持鍵值操作,類似於SQL查詢和內置的全文搜索;Couchbase Gateway提供了用於RESTful和流式訪問數據的應用層API。Couchbase Lite是一款面向移動設備和「邊緣」系統的嵌入式資料庫。Couchbase支持千萬級海量數據存儲
分布式文件系統
如果針對單個大文件,譬如超過100MB的文件,使用NoSQL存儲就不適當了。使用分布式文件系統的優勢在於,分布式文件系統隔離底層數據存儲和分布的細節,展示給用戶的是一個統一的邏輯視圖。常用的分布式文件系統有Google File System、HDFS、MooseFS、Ceph、GlusterFS、Lustre等。
相比過去打電話、發簡訊、用彩鈴的「老三樣」,移動互聯網的發展使得人們可以隨時隨地通過刷微博、看視頻、微信聊天、瀏覽網頁、地圖導航、網上購物、外賣訂餐等,這些業務的海量數據都構建在大規模網路雲資源池之上。當14億中國人把衣食住行搬上移動互聯網的同時,也給網路雲資源池帶來巨大業務挑戰。
首先,用戶需求動態變化,傳統業務流量主要是端到端模式,較為穩定;而互聯網流量易受熱點內容牽引,數據流量流向復雜和規模多變:比如雙十一購物狂潮,電商平台訂單創建峰值達到58.3萬筆,要求通信網路提供高並發支持;又如優酷春節期間有超過23億人次上網刷劇、抖音拜年短視頻增長超10倍,需要通信網路能夠靈活擴充帶寬。面對用戶動態多變的需求,通信網路需要具備快速洞察和響應用戶需求的能力,提供高效、彈性、智能的數據服務。
「隨著通信網路管道十倍百倍加粗、節點數從千萬級逐漸躍升至百億千億級,如何『接得住、存得下』海量數據,成為網路雲資源池建設面臨的巨大考驗」,李輝表示。一直以來,作為新數據存儲首倡者和引領者,浪潮存儲攜手通信行業用戶,不斷 探索 提速通信網路雲基礎設施的各種姿勢。
早在2018年,浪潮存儲就參與了通信行業基礎設施建設,四年內累計交付約5000套存儲產品,涵蓋全快閃記憶體儲、高端存儲、分布式存儲等明星產品。其中在網路雲建設中,浪潮存儲已連續兩年兩次中標全球最大的NFV網路雲項目,其中在網路雲二期建設中,浪潮存儲提供數千節點,為上層網元、應用提供高效數據服務。在最新的NFV三期項目中,浪潮存儲也已中標。
能夠與通信用戶在網路雲建設中多次握手,背後是浪潮存儲的持續技術投入與創新。浪潮存儲6年內投入超30億研發經費,開發了業界首個「多合一」極簡架構的浪潮並行融合存儲系統。此存儲系統能夠統籌管理數千個節點,實現性能、容量線性擴展;同時基於浪潮iTurbo智能加速引擎的智能IO均衡、智能資源調度、智能元數據管理等功能,與自研NVMe SSD快閃記憶體檔進行系統級別聯調優化,讓百萬級IO均衡落盤且路徑更短,將存儲系統性能發揮到極致。
「為了確保全球最大規模的網路雲正常上線運行,我們聯合用戶對存儲集群展開了長達數月的魔鬼測試」,浪潮存儲工程師表示。網路雲的IO以虛擬機數據和上層應用數據為主,浪潮按照每個存儲集群支持15000台虛機進行配置,分別對單卷隨機讀寫、順序寫、混合讀寫以及全系統隨機讀寫的IO、帶寬、時延等指標進行了360無死角測試,達到了通信用戶提出的單卷、系統性能不低於4萬和12萬IOPS、時延小於3ms的要求,產品成熟度得到了驗證。
以通信行業為例,2020年全國移動互聯網接入流量1656億GB,相當於中國14億人每人消耗118GB數據;其中春節期間,移動互聯網更是創下7天消耗36億GB數據流量的記錄,還「捎帶」打了548億分鍾電話、發送212億條簡訊……海量實時數據洪流,在網路雲資源池(NFV)支撐下收放自如,其中分布式存儲平台發揮了作用。如此樣板工程,其巨大示範及拉動作用不言而喻。
D. 互聯網如何海量存儲數據
目前存儲海量數據的技術主要包括NoSQL、分布式文件系統、和傳統關系型資料庫。隨著互聯網行業不斷的發展,產生的數據量越來越多,並且這些數據的特點是半結構化和非結構化,數據很可能是不精確的,易變的。這樣傳統關系型資料庫就無法發揮它的優勢。因此,目前互聯網大正蔽攔行業偏向於使用NoSQL和分布式文件系統來存儲海量數據。
下面介紹下常用的NoSQL和分布式文件系統。
NoSQL
互聯網行業常用的NoSQL有:HBase、MongoDB、Couchbase、LevelDB。
HBase是ApacheHadoop的子項目,理論依據為Google論文Bigtable:開發的。HBase適合存儲半結構化或非結構化的數據。HBase的數據模型是稀疏的、分布式的、持久穩固的多維map。HBase也有行和列的概念,這是與RDBMS相同的地方,但卻又不同。HBase底層採用HDFS作為文件系統,具有高可靠性、高性能。
MongoDB是一種支持高性能數據存儲的開源文檔型資料庫。支持嵌入式數據模型以減少對資料庫系統的I/O、利用索引實現快速查詢,並且嵌入式文檔和集合也支持索引,它復制能力被稱作復制集(replicaset),提供了自動的故障遷移和數據冗餘。MongoDB的分片策略將數據分布在伺服器集群上。
Couchbase這種NoSQL有三個重滾並悔要的組件:Couchbase伺服器、CouchbaseGateway、CouchbaseLite。Couchbase伺服器,支持橫向擴展,面向文檔的資料庫,支持鍵值操作,類似於SQL查詢和內置的全文搜索;CouchbaseGateway提供了用於RESTful和流式訪問數據的應用層API。CouchbaseLite是一款面向移動設備和「邊緣」系統的嵌入式資料庫。Couchbase支持千萬級海量數據存儲
分布式文件系統
如果針對單個大文件,譬如超過100MB的文件,使用NoSQL存儲就不適當了。使用分布式文件系統的優勢在於,分布式文件系統隔離底層數據存儲和分布的細節,展示給用戶的是一個統一的邏輯視圖。常用的分布式文件系統有GoogleFileSystem、HDFS、MooseFS、Ceph、GlusterFS、Lustre等。
E. NFS 深入配置
1.1 NFS配置參數許可權
參數名稱
參數用途
rw
read-write,表示可讀寫許可權
ro
read-only,表示只讀許可權
sync
請求或寫入數據時,數據同步寫入到硬碟才完成
async
非同步寫到遠程緩沖區
all_squash
不管客戶端什麼用戶,到服務端都會被壓縮成匿名用戶
anonuid
匿名用戶的UID
anongid
匿名用戶的GID
在配置文件內設置共享目錄時所給予的許可權:
[root@nfs01 ~]$ cat /etc/exports
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(ro)
配置好NFS服務後,/var/lib/nfs/etab文件中可以看到的配置參數以及默認自帶的參數:
[root@nfs01 ~]$ cat /var/lib/nfs/etab
/data
172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,
no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,
anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash
1.1.1 更改NFS默認用戶
1.1.1.1 nfs01服務端NFS、以及所有客戶端:
[root@nfs01 ~] id www
uid=1111(www) gid=1111(www) 組=1111(www)
1.1.1.2 服務端NFS特殊配置
配置文件增加如下內容:
[root@nfs01 ~]$ tail -2 /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1111,anongid=1111)
/data1 10.0.0.0/24(ro)
共享目錄更改用戶和用戶組:
[root@nfs01 ~] ls -ld /data
drwxr-xr-x 2 www www 70 4月 18 10:05 /data
1.1.1.3 服務端NFS重啟
[root@nfs01 ~]$ systemctl reload nfs
1.1.1.4 每個客戶端掛載
[root@web01 ~] df -h
文件系統 容量 已用 可用 已用% 掛載點
172.16.1.31:/data 19G 1.8G 18G 10% /data
新創建文件驗證用戶名:
[root@web01 /data]# touch new_web01.txt
[root@web01 /data]# ls -l
總用量 0
-rw-r--r-- 1 www www 0 4月 18 11:01 new_web01.txt
-rw-r--r-- 1 www www 0 4月 17 11:59 oldboy.txt
-rw-r--r-- 1 www www 0 4月 17 12:30 oldgirl.txt
1.2 NFS服務重點知識梳理
當多個NFS客戶端訪問伺服器端讀寫文件時,需要具有以下幾個許可權:
NFS伺服器/etc/exports設置需要開放許可寫入的許可權,即伺服器端的共享許可權
NFS伺服器實際要共享的NFS目錄許可權具有可寫入w的許可權,即伺服器端本地目錄的安全許可權
每台機器都對應存在和NFS默認配置UID的相同UID的用戶
下表列出了常用的重點NFS服務文件或命令。
NFS常用路徑
說明
/etc/exports
NFS服務主配置文件,配置NFS具體共享服務的地點,默認內容為空
/var/lib/nfs/etab
NFS配置文件的完整參數設定的文件
/proc/mounts
客戶端的掛載參數
1.3 NFS客戶端掛載深入
1.3.1 mount -o 參數選項及系統默認設置
參數
參數意義
系統默認值
suid/nosuid
當掛載的文件系統上有任何SUID的程序時,只要使用nosuid就能夠取消設置SUID的功能
suid
rw/ro
可以指定文件系統是只讀(ro)或可讀寫(rw)
rw
dev/nodev
是否可以保留裝置文件的特殊功能
dev
exec/noexec
是否具有執行文件的許可權
exec
user/nouser
是否允許用戶擁有文件的掛載與卸載功能
nouser
auto/noauto
auto指的是「mount -a」時會不會被掛載的項目,如果不需要這個分區隨時被掛載,可以設置為noauto
auto
1.3.2 mount -o 參數詳細說明
參數選項
說明
async
涉及文件系統I/O的操作都是非同步處理,即不會同步寫到磁碟,能提高性能,但會降低數據安全。
sync
有I/O操作時,都會同步處理I/O,會降低性能,但數據比較安全。
atime
在每一次數據訪問時,會更新訪問文件的時間戳,是默認選項,在高並發的情況下,可以通過添加noatime來取消默認項。
ro
以只讀的方式掛載一個文件系統
rw
以可讀寫的方式掛載一個文件系統
auto
能夠被自動掛載通過-a選項
noauto
不會自動掛載文件系統
defaults
這是fstab里的默認值,包括rw、suid、dev、exec、auto、nouser、async
exec
允許文件系統執行二進制文件,取消這個參數,可以提升系統安全性。
noexec
在掛載的文件系統中不允許執行任何二進製程序,進僅對二進製程序有效。
noatime
訪問文件時不更新文件的時間戳,高並發情況下,一般使用該參數
nodiratime
不更新文件系統上的directory inode時間戳,高並發環境,推薦顯式應用該選項,可以提高系統I/O性能。
nosuid
不允許set-user-identifier or set-group-identifier位生效。
suid
允許set-user-identifier or set-group-identifier位生效。
nouser
禁止一個普通用戶掛載該文件系統,這是默認掛載時的默認選項。
remount
嘗試重新掛載一個已經掛載了的文件系統,這通常被用來改變一個文件系統的掛載標志,從而使得一個只讀文件系統變的可寫,這個動作不會改變設備或者掛載點。當系統故障時進人single或rescue模式修復系統時,會發現根文件系統經常會變成只讀文件系統,不允許修改,此時該命令就派上用場了。具體命令為:mount -o remount,rw /,表示將根文件系統重新掛載使得可寫。single或rescue模式修復系統時這個命令十分重要。
dirsync
目錄更新時同步寫人磁碟。
1.3.3 企業生產場景NFS共享存儲優化
硬體:使用ssd/sas磁碟,可以買多塊,製作成raid10。
NFS伺服器端配置:
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
NFS客戶端掛載優化配置命令:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,
wsize=131072 172.16.1.31:/data /mnt <===兼顧安全性能
對NFS服務的所有伺服器內核進行優化,執行命令如下:
cat >>/etc/sysctl.conf <<EOF
net.core.wmen_default = 8388608
net.core.rmen_default = 8388608
net.core.wmen_max = 16777216
net.core.rmen_max = 16777216
EOF
執行sysctl -p 生效
大型網站NFS網路文件系統的替代軟體為分布式文件系統,如:Moosefs(mfs)、GlusterFS、FastDFS。
1.4 NFS系統應用的優缺點
1.4.1 優點
簡單,容易上手,容易掌握。
NFS文件系統內數據是在文件系統之上的,即數據是能看得見的。
部署快速維護簡單方便,且可控,滿足需求就是最好的。
可靠,從軟體層面上看,數據可靠性高,經久耐用。
服務非常穩定。
1.4.2 缺點(局限)
存在單點故障,如果NFS服務端宕機了,所有客戶端都不能訪問共享目錄。
在大數據高並發的場合,NFS效率、性能有限。
客戶端認證是基於IP和主機名的,許可權要根據ID識別,安全性一般。
NFS數據是明文的,NFS本身不對數據完整性進行驗證。
多台客戶機掛載一個NFS伺服器時,連接管理維護麻煩。
1.4.3 解決性能問題的方法
使用CDN加速以及自己搭建文件緩存服務(squid、nginx、varnish)。
把多個目錄分配到不同的NFS伺服器上。
棄用NFS(即讀寫分離)。
使用分布式文件系統。