分佈式存儲Minio集羣環境搭建

MinIO 分佈式集羣搭建

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

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

(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 個節點來建立新的對象。spa

例如,一個 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,其餘的節點也能同步到。

 

 

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

原文出處:https://www.cnblogs.com/xifenglou/p/11988338.html

相關文章
相關標籤/搜索