使用minIO搭建分佈式文件服務,最簡單的docker命令,非docker compose和docker swarm

文檔

官方文檔:https://docs.min.io/cn/

 

Minio 和 FastDFS

目前可用於文件存儲的網絡服務選擇有很多,比如阿里雲OSS、七牛雲、騰訊雲等等,但是收費都有點小貴。使用minion的原因:

  • fastDFS安裝部署維護複雜。

  • fastdfs文檔不夠全面

  • fastdfs是阿里餘慶做的一個個人項目,在一些互聯網創業公司中有應用,沒有官網,不活躍,6個contributors。目前已經很少做更新。 MinIO目前是由2014年在硅谷創立的公司MinIO.Inc運營的開源項目,社區論壇的活躍度目前也非常的不錯。

  • fastdfs沒有UI界面

  • 性能。MinIO號稱是世界上速度最快的對象存儲服務器。在標準硬件上,對象存儲的讀/寫速度最高可以達到183 GB/s和171 GB/s。關於fastDFS我曾經單線程測試寫了20萬個文件,總共200G,大約用時10個小時。總體上是很難達到MinIO“號稱的”以G爲單位的每秒讀寫速度。

  • MinIO提供了與k8s、etcd、docker等容器化技術深度集成方案,可以說就是爲了雲環境而生的。這點是FastDFS不具備的。

  • fastDFS目前提供了 C 和 Java SDK ,以及 PHP 擴展 SDK。下圖是MinIO提供的SDK支持,MinIO幾乎提供了所有主流開發語言的SDK以及文檔。

  • Amazon的S3 API是對象存儲領域的事實標準。MinIO是S3兼容性的事實上的標準,是第一個採用API和第一個添加對S3 Select支持的標準之一。

糾刪碼

Minio使用糾刪碼erasure codechecksum來保護數據免受硬件故障和無聲數據損壞。 即便您丟失一半數量(N/2)的硬盤,您仍然可以恢復數據。

糾刪碼是一種恢復丟失和損壞數據的數學算法, Minio採用裏德-所羅門碼將對象分片爲數據和奇偶校驗塊。 這就意味着如果是12塊盤,一個對象可被分片的範圍是:6個數據塊和6個奇偶校驗塊 到 10個數據塊和2個奇偶校驗塊之間。默認情況下, MinIO 將對象拆分成N/2數據和N/2 奇偶校驗盤. 雖然你可以通過 存儲類型 自定義配置, 但是我們還是推薦N/2個數據和奇偶校驗塊, 因爲它可以確保對硬盤故障提供最佳保護。比如上面12個盤的例子,通過默認配置運行MinIO服務的話,你可以丟失任意6塊盤(不管其是存放的數據塊還是奇偶校驗塊),你仍可以從剩下的盤中的數據進行恢復。

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

示例:

 # 使用Minio,在12個盤中啓動Minio服務
 minio server /data{1...12}
 
 # 使用Minio Docker鏡像,在8塊盤中啓動Minio服務。
 docker run -p 9000:9000 --name minio \
   -v /mnt/data1:/data1 \
   -v /mnt/data2:/data2 \
   -v /mnt/data3:/data3 \
   -v /mnt/data4:/data4 \
   -v /mnt/data5:/data5 \
   -v /mnt/data6:/data6 \
   -v /mnt/data7:/data7 \
   -v /mnt/data8:/data8 \
   minio/minio server /data{1...8}

適用環境:單機多硬盤、多主機多硬盤的情況下也可以使用。單機單硬盤就沒啥太大用處了。

位衰減

位衰減又被稱爲數據腐化Data Rot、無聲數據損壞Silent Data Corruption,是目前硬盤數據的一種嚴重數據丟失問題。硬盤上的數據可能會神不知鬼不覺就損壞了,也沒有什麼錯誤日誌。正所謂明槍易躲,暗箭難防,這種背地裏犯的錯比硬盤直接咔咔宕了還危險。

 

開始部署------------------正文開始

公司打算部署分佈式文件系統,調研了許久,決定使用MinIO來搭建,簡單快捷,省事。單機的時候沒問題,分佈式的時候走了很多的坑,特此記錄下來。官網上是使用docker compose 之類的弄的,我對那個不太熟悉,而且,我這個集羣也不算大,沒必要,就直接最簡單的docker命令來弄了。

我打算使用雙機四節點的方案,注意,一定至少要4個節點,否則項目起不來,使用docker搭建。並且注意,兩臺機器的時間應該是不相差太大的,否則也會有問題。開始搭建。

集羣部署,一共兩臺機器,一臺  192.168.1.162,一臺  192.168.1.136

 集羣,雙機四節點 
 
 -- 162
 docker run -d  \
 --net=host --name minio-node1 \
 --privileged=true \
 --restart=on-failure:5 \
 -e "MINIO_ACCESS_KEY=你的賬號"  \
 -e "MINIO_SECRET_KEY=相當於你的密碼" \
 -v /data/node-1:/data \
 -v /data/node-2:/data1   \
 -v /minio/config:/root/.minio \
 -v /etc/localtime:/etc/localtime \
 minio/minio server \
 http://192.168.1.162:9000/data/ \
 http://192.168.1.162:9000/data1/ \
 http://192.168.1.136:9000/data/ \
 http://192.168.1.136:9000/data1/
 
 -- 136
 docker run -d  \
 --net=host --name minio-node2 \
 --privileged=true \
 --restart=on-failure:5 \
 -e "MINIO_ACCESS_KEY=你的賬號" \  
 -e "MINIO_SECRET_KEY=相當於你的密碼" \ 
 -v /data/node-3:/data \
 -v data/node-4:/data1   \
 -v minio/config:/root/.minio \
 -v /etc/localtime:/etc/localtime \
 minio/minio server \
 http://192.168.1.162:9000/data/ \
 http://192.168.1.162:9000/data1/ \
 http://192.168.1.136:9000/data/ \
 http://192.168.1.136:9000/data1/

上面的參數說明一下, --net 其實就是使用宿主機的網絡環境  --restart 這個是重啓的參數,如果意外掛掉自動重啓5次,不行就不再次重啓了

/etc/localtime 這個是掛載時間,和宿主機的時間一致。

說下碰到的坑,一定要注意,這個端口映射,我之前不是使用默認的端口,一直報連接不上,後面纔想明白,雖然我傳進去的IP是對的,但是容器不知道,還是按照他的邏輯去跑的,導致端口對不上,也連接不到其他的機器,從而一直報錯,端口建議就使用宿主機的網絡,不要去指定,另外記得官方文檔還要開啓幾個其他的端口通信的,這裏很容易翻車。第二個就是掛載的目錄,注意後面的IP就是容器內的掛載目錄!

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章