本文研究重點歸納:
前言minio 概念:
安裝部署指南(單機+docker)
分布式集群測試
異地(多中心)同步與備份
EC碼的存儲方式|數據損壞與恢復
SDK與API(官方提供)
FUSE+S3
1、前言minio 概念:
用 MinIO 搭建一個優(yōu)雅、簡單、功能完備的靜態(tài)資源服務,操作操作簡單,功能完備的分布式文件系統(tǒng)。MinIO 已經提供了分布式部署的解決方案,實現高可靠、高可用的資源存儲,同樣的操作簡單,功能完備。
本文將對 MinIO 的分布式部署進行描述,主要分以下幾個方面:
分布式存儲的可靠性
MinIO 的分布式的存儲機制
分布式部署實踐
2 分布式存儲可靠性常用方法(冗余+校驗(EC))
分布式存儲,很關鍵的點在于數據的可靠性,即保證數據的完整,不丟失,不損壞。只有在可靠性實現的前提下,才有了追求一致性、高可用、高性能的基礎。而對于在存儲領域,一般對于保證數據可靠性的方法主要有兩類,一類是冗余法,一類是校驗法。
2.1 冗余
冗余法最簡單直接,即對存儲的數據進行副本備份,當數據出現丟失,損壞,即可使用備份內容進行恢復,而副本 備份的多少,決定了數據可靠性的高低。這其中會有成本的考量,副本數據越多,數據越可靠,但需要的設備就越多,成本就越高??煽啃允窃试S丟失其中一份數據。當前已有很多分布式系統(tǒng)是采用此種方式實現,如 Hadoop 的文件系統(tǒng)(3個副本),Redis 的集群,MySQL 的主備模式等。
2.2 校驗
校驗法即通過校驗碼的數學計算的方式,對出現丟失、損壞的數據進行校驗、還原。注意,這里有兩個作用,一個校驗,通過對數據進行校驗和( checksum )進行計算,可以檢查數據是否完整,有無損壞或更改,在數據傳輸和保存時經常用到,如 TCP 協議;二是恢復還原,通過對數據結合校驗碼,通過數學計算,還原丟失或損壞的數據,可以在保證數據可靠的前提下,降低冗余,如單機硬盤存儲中的 RAID 技術,糾刪碼(Erasure Code)技術等。MinIO 采用的就是糾刪碼技術。
3 MinIO存儲機制 理解一些概念
3.1 概念理解
在部署分布式 MinIO 前,需要對下面的概念進行了解:
硬盤(Drive):即存儲數據的磁盤,在 MinIO 啟動時,以參數的方式傳入。
組( Set ):即一組 Drive 的集合,分布式部署根據集群規(guī)模自動劃分一個或多個 Set ,每個 Set 中的 Drive 分布在不同位置。一個對象存儲在一個 Set 上。
桶(Bucket):文件對象存儲的邏輯位置,對于客戶端而言,就相當于一個存放文件的頂層文件夾。
3.2 糾刪碼EC(Erasure Code)
MinIO 使用糾刪碼機制來保證高可靠性,使用 highwayhash 來處理數據損壞( Bit Rot Protection )。關于糾刪碼,簡單來說就是可以通過數學計算,把丟失的數據進行還原,它可以將n份原始數據,增加m份數據,并能通過n+m份中的任意n份數據,還原為原始數據。即如果有任意小于等于m份的數據失效,仍然能通過剩下的數據還原出來。舉個最簡單例子就是有兩個數據(d1, d2),用一個校驗和y(d1 + d2 = y)即可保證即使丟失其中一個,依然可以還原數據。如丟失 d1 ,則使用 y - d2 = d1 還原,同理,d2 丟失或者y丟失,均可通過計算得出。
EC 的具體應用實現中, RS(Reed-Solomen)是 EC 的一種更簡單快捷的實現,可以通過矩陣運算,還原數據。MinIO 將對象拆分成N/2數據和N/2 校驗塊 。具體的數學矩陣運算及證明,可以參考文章《Erasure-Code-擦除碼-1-原理篇》及《EC糾刪碼原理》。
3.3 存儲形式
文件對象上傳到 MinIO ,會在對應的數據存儲磁盤中,以 Bucket 名稱為目錄,文件名稱為下一級目錄,文件名稱下是 part.1 和 xl.json,前者是編碼數據塊及檢驗塊,后者是元數據文件。如有4個磁盤,當文件上傳后,會有2個編碼數據塊,2個檢驗塊,分別存儲在4個磁盤中。
2、 安裝部署指南(單機+docker)
單機部署
1.創(chuàng)建minio目錄
mkdir /usr/local/minio
mkdir /usr/local/minio/bin
mkdir /usr/local/minio/conf
mkdir /usr/local/minio/data
運行用戶:root
3.下載minio的二進制文件,安裝存放
curl -O https://dl.minio.io/server/minio/release/linux-amd64/minio
nohup /usr/local/minio/minio server /usr/local/minio/data --console-address ":9001" > /usr/local/minio/minio.log 2>&1 &
創(chuàng)建minio配文件
vim /usr/local/minio/conf/minio.conf
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
MINIO_VOLUMES="/usr/local/minio/data"
MINIO_OPTS="--console-address :9001"
/etc/systemd/system/minio.service
[Unit]
Description=Minio Wants=network.target After=network.target AssertFileIsExecutable=/usr/local/minio/bin/minio
[Service]
#這個地方不能使用forking,否則啟動不了 Type=simple EnvironmentFile=/usr/local/minio/conf/minio.conf
# User and group User=root Group=root
ExecStart=/usr/local/minio/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always LimitNOFILE=65536
# Disable timeout logic and wait until process is stopped TimeoutStopSec=infinity SendSIGKILL=no
[Install] WantedBy=multi-user.target
啟動服務
# systemctl daemon-reload
# systemctl enable minio.service
# systemctl start minio.service
# systemctl status minio.service
7.設置防火墻,開發(fā)minio訪問端口
# firewall-cmd --zone=public --add-port=9001/tcp --permanent
# firewall-cmd --reload
2 docker 部署
參考鏈接:Minio的Docker部署docker-compose啟動流程 - 茶尚溫·聽風吟 - 博客園
3、分布式集群測試
(三臺單機)參考鏈接:基于docker部署minio分布式集群_W1124824402的博客-CSDN博客_docker部署minio集群
(使用nginx 做負載均衡的配置):MinIO 的分布式部署 - Mason技術記錄 - 博客園
4、異地(多中心)同步與備份
聯盟模式:聯盟模式即通過引入etcd和coreDNS,將多個MinIO分布式集群在邏輯上組成一個聯盟,對外以一個整體提供服務,并提供統(tǒng)一的命名空間。
參考:用MinIO對象存儲構建企業(yè)數據集中備份系統(tǒng)
5、 EC碼的存儲方式|數據損壞與恢復
minio分布式集群搭建完全教程(糾刪碼,數據恢復)
6、 SDK與API(官方提供)
7、 FUSE+S3
k3s + smb+ minio測試記錄 : k3s + smb+ minio測試記錄 - WuYjJun的個人空間 - OSCHINA - 中文開源技術交流社區(qū)
文章版權所屬一粒云科技@轉載請聲明出處。
標簽: minio, 分布式文件系統(tǒng), 網盤分布式文件系統(tǒng), 基礎架構研究
————————————————
版權聲明:本文為CSDN博主「manbuzhiwu」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/manbuzhiwu/article/details/122108809