MinIO 新版配置

HuDu發表於2021-09-29

官方文件

MinIO | The MinIO Quickstart Guide

單節點部署

通過二進位制檔案部署

# 正常直接通過
$ wget https://dl.min.io/server/minio/release/linux-amd64/minio
$ chmod +x minio
$ ./minio server /opt/data
# 啟動後,會發現使用者名稱密碼預設為 minioadmin,並且 console 監聽的是一個動態的埠,下次訪問埠會發生變化。

MinIO 新版配置

# 配置使用者名稱密碼
$ export MINIO_ROOT_USER = admin
$ export MINIO_ROOT_PASSWORD = 12345678
# 預設的配置目錄是${HOME}/.minio,可以通過 --config-dir 命令自定義配置目錄
$ ./minio server -config-dir /mnt/config /opt/data
# 控制檯監聽埠是動態生成的,可以通過 --console-address ":port" 指定靜態埠
./minio server --console-address ":5000" /opt/data

基於 Docker

$ docker run -p 9000:9000 --name minio \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server /data

存在問題:瀏覽器無法訪問 minio 控制檯,因為沒有對外暴露控制檯對外暴露控制檯埠

$ docker run -p 9000:9000 -p 5000:5000 --name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=12345678" \
-v /opt/data:/data \
-v /opt/config:/root/.minio \
minio/minio server --console-address ":5000" /data

MinIO 糾刪碼模式

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

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

MinIO 新版配置

使用 Minio Docker 映象,在 8 塊盤中啟動 Minio 服務:

docker run -d -p 9000:9000 -p 5000:5000 --name minio \
-v /opt/data1:/data1 \
-v /opt/data2:/data2 \
-v /opt/data3:/data3 \
-v /opt/data4:/data4 \
-v /opt/data5:/data5 \
-v /opt/data6:/data6 \
-v /opt/data7:/data7 \
-v /opt/data8:/data8 \
minio/minio server /data{1...8} --console-address ":5000"

分散式叢集部署

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

MinIO 新版配置

分散式 Minio 優勢

資料保護

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

高可用

單機節點存在單點故障,相反,如果是一個有 N 塊硬碟的分散式 MinIO,只要有 N/2 塊硬碟線上,你的資料就是安全的。不過你需要有 N/2 + 1 個硬碟來建立新的物件。
例如,一個 16 個節點的 MinIO 叢集,每個節點 16 塊硬碟,就算 8 臺伺服器當機,這個叢集仍然是可讀的,不過需要有 9 題啊伺服器才能寫資料

一致性

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

執行分散式 MioIO

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

  • 分散式 minio 裡所有的節點需要有同樣的 access 金鑰和 secret 金鑰,這樣這些節點才能建立聯接。為了實現這個,你需要執行 minio server 命令之前,現將先將 access 金鑰和secret 金鑰 export成環境變數。新版本使用 MINIO_ROOT_USER & MINIO_ROOT_PASSWORD.

  • 分散式minio使用的磁碟裡必須是乾淨的,裡面沒有資料。

  • 下面示例裡的 IP 僅供參考,你需要改成你真實用到的 IP 和 資料夾路徑。

  • 分散式 minio 裡的節點時間差不能超過 3 秒,可以使用 NTP 來保證時間一致。

  • 在Windows 下執行分散式 minio 處於實驗性階段。

8 個節點,每個節點 1 塊硬碟,需要在每個節點上都執行下面的命令

export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
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 \

MinIO 新版配置

4 節點,每個節點 4 塊硬碟

export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
minio server http://192.168.1.11/export1 http://192.168.1.11/export2
 http://192.168.1.11/export3 http://192.168.1.11/export4
 http://192.168.1.12/export1 http://192.168.1.12/export2
 http://192.168.1.12/export3 http://192.168.1.12/export4
 http://192.168.1.13/export1 http://192.168.1.13/export2
 http://192.168.1.13/export3 http://192.168.1.13/export4
 http://192.168.1.14/export1 http://192.168.1.14/export2
 http://192.168.1.14/export3 http://192.168.1.14/export4

MinIO 新版配置

export MINIO_ROOT_USER = admin
export MINIO_ROOT_PASSWORD = 12345678
MINIO_HOME = /usr/local/soft
MINIO_HOST = 192.168.3.14
for i in {01..04}; do
  nohup ${MINIO_HOME}/minio server --address ":90${i}" --console-address ":50${i}" http://${MINIO_HOST}:9001/mnt/data01 http://${MINIO_HOST}:9002/mnt/data02 http://${MINIO_HOST}:9003/mnt/data03 http://${MINIO_HOST}:9004/mnt/data04 > ${MINIO_HOME}/minio-90${i}.log 2>&1 &
done

基於 nginx 實現 loadbalance

upstream minio {
    server 192.168.33.161:9000;
    server 192.168.33.162:9000;
    server 192.168.33.163:9000;
    server 192.168.33.164:9000;
}

upstream console {
    ip_hash;
    server 192.168.33.161:5000;
    server 192.168.33.162:5000;
    server 192.168.33.163:5000;
    server 192.168.33.164:5000;
}

server {
    listen      9000;
    server_name localhost;

    ignore_invalid_headers  off;
    client_max_body_size    0;
    proxy_buffering         off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $http_x_forwarded_proto;

        proxy_connect_timeout   300;
        proxy_http_version      1.1;
        chunked_transfer_encoding   off;
        proxy_ignore_client_abort   on;

        proxy_pass  http://minio;
    }
}

server {
    listen      5000;
    server_name localhost;

    ignore_invalid_headers  off;
    client_max_body_size    0;
    proxy_buffering         off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host:$server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $http_x_forwarded_proto;

        proxy_connect_timeout   300;
        proxy_http_version      1.1;
        chunked_transfer_encoding   off;
        proxy_ignore_client_abort   on;

        proxy_pass  http://console;
    }
}

MinIO 客戶端 mc 使用

MinIO Client (mc) 為 ls,cat,cp,mirror,diff,find 等 UNIX 命令提供了一種替代方案。它支援檔案系統和相容 Amazon S3 的雲端儲存服務 (AWS Signature v2 和 v4)。

ls            列出檔案和資料夾
mb            建立一個儲存桶或一個資料夾
cat           顯示檔案和物件內容
pipe          將一個 STDIN 重定向到一個物件或者檔案或者 STDOUT。
share         生成用於共享的 URL。
cp            拷貝檔案和物件
mirror        給儲存桶和資料夾做映象
find          基於引數查詢檔案
diff          對兩個資料夾或者儲存桶比較差異
rm            刪除資料夾或者物件
enents        管理物件通知
watch         監視檔案和物件的事件
policy        管理訪問策略
config        管理 mc 配置檔案
update        檢查軟體更新
version       輸出版本資訊

部署客戶端 mc

$ wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
$ chmod +x mc
$ ./mc --help

配置 mc

mc 將所有的配置資訊都儲存在~/.minio/config.json檔案中

# 查詢 mc host 配置
$ mc config host ls
# 新增 minio 服務
$ mc config host add minio-server http://192.168.33.160:9000 admin 12345678
# 刪除 host
$ mc config host remove minio-server

mc 具體命令操作參考官方文件即可。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章