windows分布式存儲
『壹』 什麼數據存儲軟體的兼容性比較高
1. Ceph
Ceph是一個強大的存儲系統,它在同一個系統中同時提供了對象,塊(通過RBD)和文件存儲。無論您是希望在虛擬機中使用塊設備,還是將非結構化數據存儲在對象存儲中,Ceph都可以在一個平台上提供所有功能,並且還能獲得出色的靈活性。 Ceph中的所有內容都以對象的形式存儲,不管原始的數據類型是什麼,RADOS(reliable autonomic distributed object store)都會把它們當做對象來進行存儲。
RADOS層確保數據始終保持一致狀態並且可靠。Ceph會通過數據復制,故障檢測和恢復,以及跨群集節點進行數據遷移和重新平衡來實現數據一致性。 Ceph提供了一個符合POSIX的網路文件系統(CephFS),旨在實現高性能,大數據存儲以及與傳統應用程序的最大兼容。Ceph可以通過各種編程語言或者radosgw(RGW)實現無縫的訪問對象存儲,(RGW)這是一種REST介面,它與為S3和Swift編寫的應用程序兼容。另一方面,Ceph的RADOS塊設備(RBD)可以訪問在整個存儲集群中條帶化和復制的塊設備映像。
Ceph的特性
獨立、開放和統一的平台:將塊,對象和文件存儲組合到一個平台中,包括最新添加的CephFS
兼容性:您可以使用Ceph 存儲對外提供最兼容Amazon Web Services(AWS)S3的對象存儲。
精簡配置模式:分配存儲空間時,只是虛擬分配容量,在跟進使用情況佔用實際磁碟空間。這種模式提供了更多的靈活性和磁碟空間利用率。
副本:在Ceph Storage中,所有存儲的數據都會自動從一個節點復制到多個其他節點。默認任何時間群集中的都有三份數據。
自我修復:Ceph Monitors會不斷監控你的數據集。一旦出現一個副本丟失,Ceph會自動生成一個新副本,以確保始終有三份副本。
高可用:在Ceph Storage中,所有存儲的數據會自動從一個節點復制到多個其他的節點。這意味著,任意節點中的數據集被破壞或被意外刪除,在其他節點上都有超過兩個以上副本可用,保證您的數據具有很高的可用性。
Ceph很強大:您的集群可以用於任何場景。無論您希望存儲非結構化數據或為數據提供塊存儲或提供文件系統,或者希望您的應用程序直接通過librados使用您的存儲,而這些都已經集成在一個Ceph平台上了。
可伸縮性:C
『貳』 分布式存儲極簡藝術Minio解析
MinIO 對象存儲系統是為海量數據存儲、人工智慧、大數據分析而設計,基於
Apache License v2.0 開源協議的對象存儲系統,它完全兼容 Amazon S3 介面,單個對象的最大可達 5TB,適合存儲海量圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等。作為一個開源服務,MinIO 在設計上汲取了Glusterfs的相關經驗不教訓,系統復雜度上作了大量簡化,目前大小隻有40+M,部署只需要一個命令即可完成!另外,minio舍棄了傳統分布式存儲擴容所需要的遷移流程,採用聯盟模式添加集群的方式,極大簡化了擴容流程;除此之外,minio還具有糾刪編碼、比特位保護、單寫多讀(worm)、下面來依次簡要解析一下Mioio的特點及具體實現:
元數據和數據一起存放在磁碟上。元數據以明文形式存放在元數據文件里(xl.json)。假定對象名字為key_name, 它所在桶的名字是bucket_name, disk路徑就是/disk,那麼存儲路徑就是:/disk/bucket_name/key_name,windows下C盤存放桶名為test,對象名為minio.exe示例如圖:
其中part.1是實際存儲數據(單機模式為原生數據,分布式為糾刪碼分塊),xl.json是如下所示的json字元串:
在同一集群內,MinIO 自己會自勱生成若干糾刪組,用於分布存放桶數據。一個糾刪組中的一定數量的磁碟發生的故障(故障磁碟的數量小於等於校驗盤的數量),通過糾刪碼校驗演算法可以恢復出正確的數據。MinIO 集成了 Reed-Solomon 糾刪碼庫,MinIO 存儲對象數據時,首先把它分成若乾等長的片段(對於大對象,默認按 5MB 切片),然後每一個片段會糾刪演算法分成若干分片,包括數據分片不校驗分片,每個分片放置在一個糾刪組的某個節點上。對象的每一個數據分片、校驗分片都被「防比特位衰減」演算法所保護。
MinIO 會根據對象名(類似於文件系統的全路徑名),使用 crc32 哈希演算法計算出一個整數。然後使用這個整數除以糾刪組的個數,得到一個余數。這個余數,可以作為糾刪組的序號,這樣就確定了這個對象所在的糾刪組。MinIO 採用 CRC32 哈希演算法,不 glusterfs 的Davies Meyer哈希演算法(性能、沖突概率不md4, md5相近)不一樣的是,CRC32演算法的哈希值分布較不均勻,但運算速度極快,高出 md4 數倍。相對於容量均衡,MinIO 更看重數據的寫入速度。
糾刪組如何配置?
官方文檔說明如下:
也就是說糾刪組的總大小隻能從這7中情況中根據你提供的盤的個數(或者說路徑個數)來自動選取最大值的,我們 不能靈活地配置m+k糾刪存儲格式。但這樣說又不是很准確 ,因為雖然不能配置任意的m+k,但是在系統已經選取好擦除編碼集的的個數後(也就是m+k),可以使用storage class存儲類來自定義m和k的數量,默認是1:1的。
存儲類:
MinIO支持配置兩種存儲類別,精簡冗餘類別和標准類別,默認是標准類別(1:1),可以在啟動MinIO伺服器之前使用設置的環境變數來定義這些類。使用環境變數定義每個存儲類別的數據和奇偶校驗磁碟後,您可以 在上傳對象時通過請求元數據欄位設置對象的存儲類別x-amz-storage-class 。然後,MinIO伺服器通過將對象保存在特定數量的數據和奇偶校驗磁碟中來兌現存儲類。具體配置和使用可以參考官方文檔 https://github.com/minio/minio/tree/master/docs/erasure/storage-class
傳統的擴展方式的劣勢
通過增加節點來擴展單集群,一般需要進行數據均衡,否則群集內各存儲節點會因負載不均而出現新的瓶頸。除了數據均衡操作的時機這個問題以外,在均衡過程中一般需要仍存儲使用率高的節點吐使用率低的節點遷移數據。當集群擴容後,大量已經寫入的文件落點會出現改變,文件需要遷移到真實的落點。當存儲系統容量比較大時,則會發生大量的文件/對象進行遷移,遷移過程可能由於佔用大量資源而導致上層應用性能下降。而且當文件/對象遷移過程中,機器故障可能會導致一些意想不到的情冴,尤其是有大量業務的時候。當然針對此類問題,Gluterfs之類的文件系統有一些比較復雜的處理辦法。
不支持擴展優勢