minio存儲
⑴ 分布式minio搭建指南
分布式Minio可以讓你將多塊硬碟(甚至在不同的機器上)組成一個對象存儲服務。由於硬碟分布在不同的節點上,分布式Minio避免了單點故障。
在大數據領域,通常的設計理念都是無中心和分布式的。Minio分布式模式可以幫助你搭建一個高可用的對象存儲服務,你可以使用這些存儲設備,而不用考慮其真實物理位置。
分布式Minio採用 糾刪碼來防範多個節點宕機和位衰減bit rot。
分布式Minio至少需要4個硬碟,使用分布式Minio自動引入了糾刪碼功能。
單機Minio服務存在單點故障,相反,如果是一個有N塊硬碟的分布式Minio,只要有N/2硬碟在線,你的數據就是安全的。不過你需要至少有N/2+1個硬碟來創建新的對象。
例如,一個16節點的Minio集群,每個節點16塊硬碟,就算8台伺服器宕機,這個集群仍然是可讀的,不過你需要9台伺服器才能寫數據。
注意,只要遵守分布式Minio的限制,你可以組合不同的節點和每個節點幾塊硬碟。比如,你可以使用2個節點,每個節點4塊硬碟,也可以使用4個節點,每個節點兩塊硬碟,諸如此類。
Minio在分布式和單機模式下,所有讀寫操作都嚴格遵守 read-after-write 一致性模型。
如果你了解Minio單機模式的搭建的話,分布式搭建的流程基本一樣,Minio服務基於命令行傳入的參數自動切換成單機模式還是分布式模式。
安裝Minio - Minio快速入門.
啟動一個分布式Minio實例,你只需要把硬碟位置做為參數傳給minio server命令即可,然後,你需要在所有其它節點運行同樣的命令。
注意
目錄創建
run:啟動腳本及二進制文件目錄;
data:數據存儲目錄;
/etc/minio:配置文件目錄;
集群啟動文件
配置為系統服務
將minio二進制文件上傳到/data/minio/run目錄
給所有涉及到的文件或目錄添加許可權!
集群啟動
⑵ 分布式存儲極簡藝術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之類的文件系統有一些比較復雜的處理辦法。
不支持擴展優勢
⑶ 【Minio】基於AWS S3協議搭建個人雲存儲服務
在2007年,GlusterFS演變為大型分布式存儲方案後,任何配備合適硬體的公司,單位都可以利用個做分布式的流媒體,數據分析。在2011年,Red Hat收購了GlusterFS.
Minio是GlusterFS創始人之一Anand Babu Periasamy發布新的開源項目。Minio兼容Amason的S3分布式對象存儲項目,採用Golang實現,客戶端支持java,python,Javacript, Golang語言。
Minio 提供對象存儲服務,兼容了 AWS S3 存儲協議,用於非結構化的數據存。非結構化對象,比如圖像,音、視頻,日誌文件,備份鏡像…等等管理不方便,不定長,大小變化大、類型多,雲端的訪問復雜,minio就是來解決這種場景的。非結構化的文件從數KB到5TB都能很好的支持。開源並且用 Go 語言開發,有web操作界面,我們可以用它來搭建兼容S3協議的存儲雲服務。
Minio可以做為雲存儲的解決方案用來保存海量的圖片,視頻,文檔。由於採用Golang實現,服務端可以工作在Windows,linux, OS X和FreeBSD上。配置簡單,基本是復制可執行程序,單行命令可以運行起來。
官網: https://minio.io
那麼,如何自己搭建一個私有的S3存儲雲服務呢?
官方的話是推薦用Docker來搞,我們先用普通的二進制文件來直接解決了!
######################################################################################
# mkdir /data/aws_s3
# wget https://dl.minio.io/server/minio/release/linux-amd64/minio
# mv minio /usr/local/bin/
# chmod 755 /usr/local/bin/minio
# minio server /data/aws_s3
#############################################################
Created minio configuration file successfully at /root/.minio
Endpoint: http://10.5.10.89:9000 http://127.0.0.1:9000 http://172.17.0.1:9000
AccessKey: U3XLU4IMXY3IDKHU268F
SecretKey: /
Region: us-east-1
SQS ARNs:
Browser Access:
http://10.5.10.89:9000 http://127.0.0.1:9000 http://172.17.0.1:9000
Command-line Access: https://docs.minio.io/docs/minio-client-quickstart-guide
################################################################
$ mc config host add myminio http://10.5.10.89:9000 U3XLU4IMXY3IDKHU268F /
Object API (Amazon S3 compatible):
Go: https://docs.minio.io/docs/golang-client-quickstart-guide
Java: https://docs.minio.io/docs/java-client-quickstart-guide
Python: https://docs.minio.io/docs/python-client-quickstart-guide
JavaScript: https://docs.minio.io/docs/javascript-client-quickstart-guide
Drive Capacity: 8.3 GiB Free, 9.1 GiB Total
##############################################################
我們就成功啟動了minio的s3服務,默認埠9000,可以通過網頁訪問:
http://10.5.10.89:9000
http://127.0.0.1:9000
http://172.17.0.1:9000
注意 :第一次打開時候需要填寫AccessKey和SecretKey才能進入,我們上面啟動服務的時候,已經看到屏幕有輸出:
AccessKey: U3XLU4IMXY3IDKHU268F
SecretKey:
把這兩個Key填入,就能順利進入,進入後展開頁面如下:
這就是我們的S3雲存儲的管理頁面了,看著是不是和七牛什麼的提供雲存儲的產品頁面挺像的,大家都是基於S3協議開發的!
上傳個文件試試:
點擊右下角的紅色小加號按鈕,彈出的菜單選擇」create bucket」則會創建一個桶,輸入名字」test」
點擊剛才那個紅色小加號按鈕,這次選擇」Upload file」上傳文件,給這個桶上傳了一個叫login.txt的文本文檔
此時頁面如下:
至此我們可以看到文件已經上傳,要訪問這個文件,可以點擊文件右側的三個點的按鈕,選擇分享就可以得到一個外鏈,在瀏覽器中訪問這個外鏈就可以直接訪問文件。
那麼文件到底被存到哪裡去了呢,我們啟動命令中其實指定了工作路徑/data/aws_s3/,所以到伺服器這個目錄下看看:
# ls /data/aws_s3/
test
# ls /data/aws_s3/test/
login.txt
桶名稱test是一個目錄,其下就有上傳的login.txt文件。
如果想指定ip和埠,可以這樣寫:
# minio server /data/aws_s3 --address=0.0.0.0:9000
如果想讓服務在後台運行:
# nohup minio server /data/aws_s3 --address=0.0.0.0:443 &
[1] 19882
// nohup: 忽略輸入並把輸出追加到啟動命令的當前目錄下的 "nohup.out"文件
minio可以用來搭建分布式存儲系統 GlusterFS,這樣就成了真正的雲存儲了,有時間再研究下把它從現在的單機測試,變成一朵存儲雲!
minio官網: https://minio.io
minio官方文檔: https://docs.minio.io/docs/minio-docker-quickstart-guide
minio github主頁: https://github.com/minio/minio
⑷ 通過K8S部署對象存儲MinIO
MinIO 是全球領先的對象存儲先鋒,以 Apache License v2.0 發布的對象存儲伺服器,是為雲應用和虛擬機而設計的分布式對象存儲伺服器。在標准硬體上,讀/寫速度上高達183GB/s和171GB/s。它與 Amazon S3 雲存儲服務兼容。 它最適用於存儲非結構化數據,如照片、視頻、日誌文件、備份和容器/虛擬機映像。 對象的大小可以從幾KB 到最大5TB。
MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。
MinIO支持多種靈活的部署方式,支持Docker Compose、Docker Swam、Kubernetes等,詳見官網: https://docs.min.io/docs/minio-deployment-quickstart-guide.html 或者 https://min.io/download#/linux
這里著重介紹K8S下部署
1、standalone模式
由於service採用NodePort類型,通過主機IP:32593訪問web
2、distributed模式
分布式部署,實例數至少4個,所以需要另外創建4個pv