分布式存儲Minio集群環境搭建


MinIO 分布式集群搭建

分布式 Minio 可以讓你將多塊硬盤(甚至在不同的機器上)組成一個對象存儲服務。由於硬盤分布在不同的節點上,分布式 Minio 避免了單點故障。

Minio 分布式模式可以搭建一個高可用的對象存儲服務,你可以使用這些存儲設備,而不用考慮其真實物理位置。

(1)數據保護

分布式 Minio 采用糾刪碼(erasure code)來防范多個節點宕機和位衰減(bit rot)。

分布式 Minio 至少需要 4 個節點,使用分布式 Minio 就自動引入了糾刪碼功能。

糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio 采用 Reed-Solomon code 將對象拆分成 N/2 數據和 N/2 奇偶校驗塊。 這就意味着如果是 12 塊盤,一個對象會被分成 6 個數據塊、6 個奇偶校驗塊,你可以丟失任意 6 塊盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的盤中的數據進行恢復。

糾刪碼的工作原理和 RAID 或者復制不同,像 RAID6 可以在損失兩塊盤的情況下不丟數據,而 Minio 糾刪碼可以在丟失一半的盤的情況下,仍可以保證數據安全。 而且 Minio 糾刪碼是作用在對象級別,可以一次恢復一個對象,而RAID 是作用在卷級別,數據恢復時間很長。 Minio 對每個對象單獨編碼,存儲服務一經部署,通常情況下是不需要更換硬盤或者修復。Minio 糾刪碼的設計目標是為了性能和盡可能的使用硬件加速。

位衰減又被稱為數據腐化 Data Rot、無聲數據損壞 Silent Data Corruption ,是目前硬盤數據的一種嚴重數據丟失問題。硬盤上的數據可能會神不知鬼不覺就損壞了,也沒有什么錯誤日志。正所謂明槍易躲,暗箭難防,這種背地里犯的錯比硬盤直接故障還危險。 所以 Minio 糾刪碼采用了高速 HighwayHash 基於哈希的校驗和來防范位衰減。

(2)高可用

單機 Minio 服務存在單點故障,相反,如果是一個 N 節點的分布式 Minio ,只要有 N/2 節點在線,你的數據就是安全的。不過你需要至少有 N/2+1 個節點來創建新的對象。

例如,一個 8 節點的 Minio 集群,每個節點一塊盤,就算 4 個節點宕機,這個集群仍然是可讀的,不過你需要 5 個節點才能寫數據。

(3)限制

分布式 Minio 單租戶存在最少 4 個盤最多 16 個盤的限制(受限於糾刪碼)。這種限制確保了 Minio 的簡潔,同時仍擁有伸縮性。如果你需要搭建一個多租戶環境,你可以輕松的使用編排工具(Kubernetes)來管理多個Minio實例。

注意,只要遵守分布式 Minio 的限制,你可以組合不同的節點和每個節點幾塊盤。比如,你可以使用 2 個節點,每個節點 4 塊盤,也可以使用 4 個節點,每個節點兩塊盤,諸如此類。

(4)一致性
Minio 在分布式和單機模式下,所有讀寫操作都嚴格遵守 read-after-write 一致性模型。

搭建分布式集群

啟動一個分布式 Minio 實例,你只需要把硬盤位置做為參數傳給 minio server 命令即可,然后,你需要在所有其它節點運行同樣的命令。

注意

  • 分布式 Minio 里所有的節點需要有同樣的 access 秘鑰和 secret 秘鑰,這樣這些節點才能建立聯接。為了實現這個,你需要在執行 minio server 命令之前,先將 access 秘鑰和 secret 秘鑰 export 成環境變量。
  • 分布式 Minio 使用的磁盤里必須是干凈的,里面沒有數據。
  • 下面示例里的 IP 僅供示例參考,你需要改成你真實用到的 IP 和文件夾路徑。
  • 分布式 Minio 里的節點時間差不能超過 3 秒,你可以使用 NTP 來保證時間一致。
  • 在 Windows 下運行分布式 Minio 處於實驗階段,不建議用於生產環境。

示例1:

啟動分布式Minio實例,8個節點,每節點1塊盤,需要在8個節點上都運行下面的命令。

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://192.168.1.11/export1 http://192.168.1.12/export2 \ http://192.168.1.13/export3 http://192.168.1.14/export4 \ http://192.168.1.15/export5 http://192.168.1.16/export6 \ http://192.168.1.17/export7 http://192.168.1.18/export8 

示例2:

啟動分布式Minio實例,4節點,每節點2塊盤,需要在4個節點上都運行下面的命令。

export MINIO_ACCESS_KEY=<ACCESS_KEY>
export MINIO_SECRET_KEY=<SECRET_KEY>
minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \ http://192.168.1.12/export1 http://192.168.1.12/export2 \ http://192.168.1.13/export1 http://192.168.1.13/export2 \ http://192.168.1.14/export1 http://192.168.1.14/export2 \

實戰部分

此次計划在61-64四台centOs機器上安裝minio集群,均位於/opt/minio目錄

1)下載minio
mkdir /opt/minio
cd /opt/minio
  wget https://dl.minio.io/server/minio/release/linux-amd64/minio
  chmod +x minio  
mkdir export1 export2  
 

(2)編寫start.sh腳本

 

 將61下/opt/minio文件夾所有內容可通過scp命令復制到62-64的/opt/minio下

然后在61-64的機器上逐個執行start.sh腳本,大功告成!

為方便起見,編寫批量啟動腳本,僅在61的目錄下編寫cluster_start.sh

 

 將62-64的ip存放在ip.txt文件內采用cat 逐行讀取。

 

 注意點:

1.  accessKey大於3字符, secretKey必須大於8字符,否則啟動不了,下圖我將secretKey設置6位字符,然后啟動

 

 

查看minio進程並沒有啟動

 

 查看minio.log

 

 

 

2.  配置的多台機器 secretKey accessKey必須完全一致,否則會出現意想不到的錯誤,因為多台機器之間的信息同步就是通過這兩個key進行,否則肯定會認證失敗

 

 

查看minio.log

 

 3.當集群中的某個節點down了,會影響整體的使用,我手動將64的節點停掉

 

 嘗試在63及61上創建bucket,嘗試失敗,注意不要在kill64后立即測試,要稍等一會兒,否則可能不會復現這個問題。 個人猜測,可能是64的狀態同步需要發送心跳給至集群內的其他機器,這個需要一些時間。

 

 

 

 

再次啟動64的服務后,再進行63 61的創建bucket ,就成功了,

 

 

 

 再登錄 64查看,會同步到其他節點創建的bucket,再創建2112buckt,其他的節點也能同步到。

 

 

以上是本次安裝的踩坑經歷,但願能幫助一些人,如有疑問或有誤,煩請指出,以免誤人。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM