物件儲存服務MinIO安裝部署分散式及Spring Boot專案實現檔案上傳下載

莫忘歸發表於2021-04-20

一、MinIO快速入門

1. MinIO簡介

MinIO 是一個基於Apache License v2.0開源協議的物件儲存服務。它相容亞馬遜S3雲端儲存服務介面,非常適合於儲存大容量非結構化的資料,例如圖片、視訊、日誌檔案、備份資料和容器/虛擬機器映象等,而一個物件檔案可以是任意大小,從幾kb到最大5T不等。

MinIO 是一個基於Apache License MinIO是一個非常輕量的服務,可以很簡單的和其他應用的結合,類似 NodeJS, Redis 或者 MySQL。

2. CentOS7更換成阿里雲映象

image CentOS更換aliyun映象站

https://www.cnblogs.com/lishen2021/p/14680564.html

3. 安裝

3.1 下載

下載:
    wget https://dl.min.io/server/minio/release/linux-amd64/minio

3.2 執行測試

修改檔案執行許可權:
    chmod +x minio

執行:
    MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin ./minio server /data/minio/standalone

安裝啟動後使用瀏覽器訪問http://ip:port,預設埠為:9000,如果可以訪問,則表示minio已經安裝成功。賬號和密碼分別為:MINIO_ACCESS_KEY、MINIO_SECRET_KEY

4. 配置指令碼執行檔案

4.1 建立配置執行檔案

建立可執行檔案 minio.sh

touch minio.sh

新增以下指令碼內容:

#!/bin/sh

function start() {
    export MINIO_ACCESS_KEY=minioadmin
    export MINIO_SECRET_KEY=2020_minio@admin
    nohup /home/minio/minio server /home/minio/data > /home/minio/logs/minio.log 2>&1 &
}

NUM=`ps -C "minio" --no-header | wc -l`
ID=$(ps -ef | grep "minio" | grep -v "grep" | grep -v "sh" | awk '{print $2}')
#if [ "start" = $1 ]; then
#    if [ 0 -eq $NUM ]; then
#        start
#    fi
#elif [ "restart" = $1 ]; then
#    if [ 0 -ne $NUM ]; then
#        kill -9 $ID | start
#    else
#        start
#    fi
#elif [ "stop" = $1 ]; then
#    if [ 0 -ne $NUM ]; then
#        kill -9 $ID
#    fi
#else
#    echo "No sush command '$1'"
#fi

case $1 in
    "start")
        if [ 0 -eq $NUM ]; then
            start
        fi
        ;;
    "restart")
        if [ 0 -ne $NUM ]; then
            kill -9 $ID | start
        else
            start
        fi
        ;;
    "stop")
        if [ 0 -ne $NUM ]; then
            kill -9 $ID
        fi
        ;;
    *)
        echo "No sush command '$1'"
        ;;
esac

指令碼中使用 if 或 case 都可以

4.2 執行

啟動:
    sh minio.sh start

輸出執行資訊方式啟動:
    sh -x minio.sh start

重啟:
    sh minio.sh restart

停止服務:
    sh minio.sh stop

二、分散式MinIO快速入門

1. 分散式MinIO快速入門

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

1.1 分散式Minio有什麼好處?

在大資料領域,通常的設計理念都是無中心和分散式。Minio分散式模式可以幫助你搭建一個高可用的物件儲存服務,你可以使用這些儲存裝置,而不用考慮其真實物理位置。

1.2 資料保護

分散式Minio採用 糾刪碼 來防範多個節點當機和位衰減bit rot。分散式Minio至少需要4個硬碟,使用分散式Minio自動引入了糾刪碼功能。

1.3 高可用

單機Minio服務存在單點故障,相反,如果是一個有N塊硬碟的分散式Minio,只要有N/2硬碟線上,你的資料就是安全的。不過你需要至少有N/2+1個硬碟來建立新的物件。

例如,一個16節點的Minio叢集,每個節點16塊硬碟,就算8臺伺服器當機,這個叢集仍然是可讀的,不過你需要9臺伺服器才能寫資料。

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

1.4 一致性

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

2. 配置執行分散式Minio

啟動一個分散式Minio例項,你只需要把硬碟位置做為引數傳給minio server命令即可,然後,你需要在所有其它節點執行同樣的命令。

注意:

1. 分散式Minio裡所有的節點需要有同樣的access祕鑰和secret祕鑰,這樣這些節點才能建立聯接。為了實現這個,你需要在執行minio server命令之前,先將access祕鑰和secret祕鑰export成環境變數。
2. 分散式Minio使用的磁碟裡必須是乾淨的,裡面沒有資料。
3. 分散式Minio裡的節點時間差不能超過3秒,你可以使用NTP來保證時間一致。

2.1 將access祕鑰和secret祕鑰export成環境變數

注:需要在每個節點上都執行

export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

2.2 啟動分散式Minio例項

配置:2個節點,每個節點2塊盤。

執行命令:

./minio server http://192.168.199.140/data/minio/export1 http://192.168.199.140/data/minio/export2 http://192.168.199.141/data/minio/export1 http://192.168.199.141/data/minio/export2

注:需要在兩個節點上都執行

2.3 配置成啟動指令碼

2.3.1 建立配置執行檔案

建立可執行檔案 minio-cluster.sh

touch minio-cluster.sh

新增內容如下:

#!/bin/sh
export MINIO_ACCESS_KEY=minioadmin
export MINIO_SECRET_KEY=minioadmin

#nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
#                              http://192.168.199.140/data/minio/export2 \
#                             http://192.168.199.141/data/minio/export1 \
#                             http://192.168.199.141/data/minio/export2 \
#       > /dev/null 2>&1 &

nohup /opt/minio/minio server http://192.168.199.140/data/minio/export1 \
                              http://192.168.199.140/data/minio/export2 \
                              http://192.168.199.141/data/minio/export1 \
                              http://192.168.199.141/data/minio/export2 \
        > /opt/minio/minio.log 2>&1 &

2.3.2 執行

啟動:
    sh minio-cluster.sh

輸出執行資訊方式啟動:
    sh -x minio-cluster.sh

三、糾刪碼(erasure code)

Minio使用糾刪碼erasure code和校驗和checksum來保護資料免受硬體故障和無聲資料損壞。 即便您丟失一半數量(N/2)的硬碟,您仍然可以恢復資料。

1. 糾刪碼(erasure code)

1.1 什麼是糾刪碼erasure code?

糾刪碼是一種恢復丟失和損壞資料的數學演算法, Minio採用Reed-Solomon code將物件拆分成N/2資料和N/2 奇偶校驗塊。 這就意味著如果是12塊盤,一個物件會被分成6個資料塊、6個奇偶校驗塊,你可以丟失任意6塊盤(不管其是存放的資料塊還是奇偶校驗塊),你仍可以從剩下的盤中的資料進行恢復,是不是很NB,感興趣的同學請翻牆google。

1.2 為什麼糾刪碼有用?

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

image

1.3 什麼是位衰減bit rot保護?

位衰減又被稱為資料腐化Data Rot、無聲資料損壞Silent Data Corruption,是目前硬碟資料的一種嚴重資料丟失問題。硬碟上的資料可能會神不知鬼不覺就損壞了,也沒有什麼錯誤日誌。正所謂明槍易躲,暗箭難防,這種背地裡犯的錯比硬碟直接咔咔宕了還危險。 不過不用怕,Minio糾刪碼採用了高速 HighwayHash 基於雜湊的校驗和來防範位衰減。

四、MinIO個人專案測試

相關文章