Minio的容量算法及实际存储空间计算公式
集群磁盤可用容量計算
1. 數據的上傳,下載流程
1.1上傳流程:
1.先根據對象名去做一個Hash,計算出對應的Set,然后來創建臨時目錄。創建臨時目錄的目的是為了確保數據強一致性,所以中間數據都會被寫入到這個臨時目錄里(直到所有數據寫完后,再統一把目錄寫入到最終的路徑上)
2.接下來讀數據編碼,每次最多讀10M的數據處理,然后做編碼,再被寫入到磁盤上,循環的過程就是把數據保存下來。
3.數據保存完后,再寫meta信息。
4.然后挪到最終的位置上,刪除臨時目錄。
?
1.2讀取流程:
1.先根據對象名做Hash,找到對象對應的Set
2.然后去讀取meta信息,通過meta信息來獲得編碼的方式,然后去解碼。它是以10M數據做EC編碼,讀的時候也是逐個part解析,每個part給他做解碼,然后寫入到一個io write里面。
備注:做EC碼時,只要一半的編碼塊就能還原整個對象,所以讀meta時讀了N份,但是讀數據時只要讀N/2就可以了。
Ps:最簡單的理解就是 一個對象存儲在一個Set上面,這個Set包含16個Drive,其中一半是數據塊,一半是校驗塊,這種方式最多能忍受一半的編碼丟失或損壞。所有編碼塊的大小是原對象的2倍,跟傳統多副本存儲方案相比,他只冗余存了一份,但可靠性更高。
?
2.MinIo 糾刪碼奇偶校驗 ( EC:N)
1.MinIO 使用 Reed-Solomon 算法根據部署中的擦除集大小將對象拆分為數據塊和奇偶校驗塊。對于給定大小的擦除集M,MinIO 將對象拆分為N奇偶校驗塊和M數據塊。
2.MinIO 使用該EC:N符號來表示N部署中的奇偶校驗塊 ( )的數量。MinIO 默認為EC:4每個對象 4 個奇偶校驗塊。MinIO對部署中的EC:N所有擦除集和服務器池使用相同的值 。
3.MinIO 可以容忍N每個擦除集丟失多達驅動器并繼續執行讀寫操作(“仲裁”)。如果N恰好等于擦除集中驅動器的 1/2,則 MinIO 寫入仲裁要求 N+1驅動器避免數據不一致(“裂腦”)
引入官方文檔:https://docs.min.io/minio/baremetal/concepts/erasure-coding.html#minio-ec-parity
?
3.計算方式
xxxxxxxxxx
MinIO使用Reed-Solomon來將對象分片到若干數據塊(Data block)和校驗塊(Partity block)中。對于12磁盤組成的存儲,一個對象可以分片到最多6個校驗塊+6個數據塊中,最少2個校驗塊+10個數據塊中。
數據盤變量配置:
MINIO_STORAGE_CLASS_STANDARD:設置默認標準存儲類型的奇偶校驗計數,例如"EC:4"
冗余盤變量配置:
MINIO_STORAGE_CLASS_RRS:設置默認低冗余存儲類型的奇偶校驗計數,例如"EC:2"
MinIO 可創建每組4到16個磁盤組成的糾刪碼集合。所以你提供的磁盤總數必須是其中一個數字的倍數。
MinIO會根據給定的磁盤總數或者節點總數選擇最大的糾刪碼集合大小,確保統一分布,即每個節點參與每個集合的磁盤數量相等。
每個對象被寫入一個EC集合中,因此該對象分布在不超過16個磁盤上。
由官方計算器和實際操作得出結論
官方可用容量計算器:https://min.io/product/erasure-code-calculator
實際測試環境操作
?
4. 最后得出存儲效率公式
存儲效率=M/(K+M)
M=校驗塊
K=實際數據存儲塊
一組糾刪碼存儲合集不會大于16,最小是4,這也跟官方文檔中使用最少糾刪碼模式4個磁盤對應成立.
列如:
校驗塊為4 數據塊為12 就能算出有效存儲為75%, 允許故障盤數是 4塊盤
參考鏈接:
https://cooting.cn/archives/146.html
https://docs.min.io/minio/baremetal/
http://www.minio.org.cn/
https://www.jianshu.com/p/3e81b87d5b0b
minio原理和使用:https://www.jianshu.com/p/c2b43ff67df0
總結
以上是生活随笔為你收集整理的Minio的容量算法及实际存储空间计算公式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux nginx搭建文件服务器
- 下一篇: 解决关闭hdfs yarn spark