12 圖入門高性能分佈式對象存儲 MinIO

作者:liugp
出處:https://u.kubeinfo.cn/FyksUQ

一、概述

MinIO 是在 GNU Affero 通用公共許可證 v3.0 下發布的高性能對象存儲。它與 Amazon S3 雲存儲服務 API 兼容。使用 MinIO 爲機器學習、分析和應用程序數據工作負載構建高性能基礎架構。

官方文檔:https://docs.min.io/
中文文檔:http://docs.minio.org.cn/docs/
GitHub 地址:https://github.com/minio/minio

特點:

例如,一個 16 節點的 Minio 集羣,每個節點 16 塊硬盤,就算 8 臺服務器宕機,這個集羣仍然是可讀的,不過你需要 9 臺服務器才能寫數據。

【溫馨提示】只要遵守分佈式 Minio 的限制,你可以組合不同的節點和每個節點幾塊硬盤。比如,你可以使用 2 個節點,每個節點 4 塊硬盤,也可以使用 4 個節點,每個節點兩塊硬盤,諸如此類。

MinIO 的優點如下:

二、MinIO 基礎概念

Set /Drive 的關係

三、糾刪碼(Erasure Code)

糾刪碼(Erasure Code)簡稱 EC,是一種數據保護方法,它將數據分割成片段,把冗餘數據塊擴展、編碼,並將其存儲在不同的位置,比如磁盤、存儲節點或者其它地理位置。

四、MinIO

1)單主機,單硬盤模式

該模式下,Minio 只在一臺服務器上搭建服務,且數據都存在單塊磁盤上,該模式存在單點風險,主要用作開發、測試等使用

2)單主機,多硬盤模式

該模式下,Minio 在一臺服務器上搭建服務,但數據分散在多塊(大於 4 塊)磁盤上,提供了數據上的安全保障。

3)多主機、多硬盤模式(分佈式)

該模式是 Minio 服務最常用的架構,通過共享一個 access_key 和 secret_key, 在多臺服務器上搭建服務,且數據分散在多塊(大於 4 塊,無上限)磁盤上,提供了較爲強大的數據冗餘機制(Reed-Solomon 糾刪碼)。

五、MinIO 環境部署(分佈式)

1)環境準備

|        主機名        |       IP        |                  data                   |
|-------------------|-----------------|-----------------------------------------|
| local-168-182-110 | 192.168.182.110 | /opt/bigdata/minio/data/export{1,2,3,4} |
| local-168-182-111 | 192.168.182.111 | /opt/bigdata/minio/data/export{1,2,3,4} |
| local-168-182-112 | 192.168.182.112 | /opt/bigdata/minio/data/export{1,2,3,4} |

2)下載

mkdir -p /opt/bigdata/minio ; cd /opt/bigdata/minio
# 下載rpm包進行部署
#wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20220802235916.0.0.x86_64.rpm -O minio.rpm
# yum -y install minio.rpm

# 下載二進制包部署
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x /opt/bigdata/minio
# 加在/etc/profile
export PATH=$PATH:/opt/bigdata/minio

minio --help

3)每臺新加四塊磁盤

# 不重啓,直接刷新磁盤數據總線,獲取新加的磁盤
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done

lsblk

# 格式化
mkfs.ext4 /dev/sdb
mkfs.ext4 /dev/sdc
mkfs.ext4 /dev/sdd
mkfs.ext4 /dev/sde

# 掛載
mount /dev/sdb /opt/bigdata/minio/data/export1
mount /dev/sdc /opt/bigdata/minio/data/export2
mount /dev/sdd /opt/bigdata/minio/data/export3
mount /dev/sde /opt/bigdata/minio/data/export4

【溫馨提示】磁盤大小必須 > 1G,這裏我添加的是 4*2G 的盤

4)配置

Minio 默認9000端口,在配置文件中加入–address “127.0.0.1:9029” 可更改端口

編寫啓動腳本(/opt/bigdata/minio/run.sh

#!/bin/bash
# 創建日誌存儲目錄
mkdir -p /opt/bigdata/minio/logs
# 分別在三個節點上創建存儲目錄
mkdir -p /opt/bigdata/minio/data/export{1,2,3,4}
# 創建配置目錄
mkdir -p /etc/minio
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=admin123456

# 在三臺機器上都執行該文件,即以分佈式的方式啓動了MINIO
# --address "0.0.0.0:9000" 掛載9001端口爲api端口(如Java客戶端)訪問的端口
# --console-address ":9000" 掛載9000端口爲web端口;
/opt/bigdata/minio/minio server --address 0.0.0.0:9000 --console-address 0.0.0.0:9001 --config-dir /etc/minio \
http://local-168-182-110/opt/bigdata/minio/data/export1 \
http://local-168-182-110/opt/bigdata/minio/data/export2 \
http://local-168-182-110/opt/bigdata/minio/data/export3 \
http://local-168-182-110/opt/bigdata/minio/data/export4 \
http://local-168-182-111/opt/bigdata/minio/data/export1 \
http://local-168-182-111/opt/bigdata/minio/data/export2 \
http://local-168-182-111/opt/bigdata/minio/data/export3 \
http://local-168-182-111/opt/bigdata/minio/data/export4 \
http://local-168-182-112/opt/bigdata/minio/data/export1 \
http://local-168-182-112/opt/bigdata/minio/data/export2 \
http://local-168-182-112/opt/bigdata/minio/data/export3 \
http://local-168-182-112/opt/bigdata/minio/data/export4 > /opt/bigdata/minio/logs/minio_server.log

【溫馨提示】下面腳本複製時 \ 後不要有空格,還有就是上面的目錄是對應的一塊磁盤,而非簡單的在 / opt/bigdata/minio/data 目錄下創建四個目錄,要不然會報如下錯誤,看提示以爲是 root 權限問題。part of root disk, will not be used (*errors.errorString)

5)啓動服務

# 在三臺機器上都執行該文件,即以分佈式的方式啓動了MINIO
sh /opt/bigdata/minio/run.sh

添加或修改 minio.service,通過 systemctl 啓停服務(推薦)

# 如果使用rpm安裝,minio.service就會自動生成,只要修改就行
cat > /usr/lib/systemd/system/minio.service <<EOF
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/

[Service]
WorkingDirectory=/opt/bigdata/minio
ExecStart=/opt/bigdata/minio/run.sh

Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

修改文件權限

chmod +x /usr/lib/systemd/system/minio.service && chmod +x /opt/bigdata/minio/minio && chmod +x /opt/bigdata/minio/run.sh

# 將文件copy其它節點local-168-182-111,local-168-182-112
scp -r /usr/lib/systemd/system/minio.servicee local-168-182-111:/usr/lib/systemd/system/minio.service
scp -r /opt/bigdata/minio local-168-182-111:/opt/bigdata/

scp -r /usr/lib/systemd/system/minio.service local-168-182-112:/usr/lib/systemd/system/minio.service
scp -r /opt/bigdata/minio local-168-182-112:/opt/bigdata/

啓動集羣

 #重新加載服務
systemctl daemon-reload
#啓動服務
systemctl start minio
#加入自啓動
systemctl enable minio


訪問 MinIO,三個節點都可以訪問
http://local-168-182-110:9001/
http://local-168-182-111:9001/
http://local-168-182-112:9001/

賬號密碼:admin/admin123456

6)使用 nginx 負載均衡

單獨對每個節點進行訪問顯然不合理,通過使用 nginx 代理,進行負載均衡則很有必要。簡單的配置如下:

# 安裝nginx
yum install epel-release -y
yum install nginx -y
systemctl start nginx
systemctl status nginx
systemctl enable nginx

添加配置文件,配置內容如下:

vi  /etc/nginx/conf.d/minio.conf

upstream minio_api {
    server 192.168.182.110:9000;
    server 192.168.182.111:9000;
    server 192.168.182.112:9000;
}

upstream minio_console {
    server 192.168.182.110:9001;
    server 192.168.182.111:9001;
    server 192.168.182.112:9001;
}

server{
    listen       19000;
    server_name  192.168.182.110;

    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;

    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

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

        proxy_pass http://minio_api;
    }
}

server{
    listen       19001;
    server_name  192.168.182.110;

    ignore_invalid_headers off;
    client_max_body_size 0;
    proxy_buffering off;

    location / {
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;

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

        proxy_pass http://minio_console;
    }
}

重啓加載配置

nginx -t
nginx -s reload
#或者
systemctl reload nginx

訪問:http://local-168-182-110:19001

六、MinIO 客戶端 (mc)

1)下載

cd /opt/bigdata/minio/
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
./mc --help

2)添加 MinIO 存儲服務

MinIO 服務器顯示 URL,訪問權和祕密密鑰。
【用法】

mc config host add <ALIAS> <YOUR-MINIO-ENDPOINT> [YOUR-ACCESS-KEY] [YOUR-SECRET-KEY]

【示例】

cd /opt/bigdata/minio/
# 明文輸入
./mc config host add minio http://local-168-182-110:19000 admin admin123456

# 密文輸入(推薦)
./mc config host add minio http://local-168-182-110:19000
Enter Access Key: admin
Enter Secret Key: admin123456

3)測試

cd /opt/bigdata/minio/
# 獲取已配置別名“ minio”的MinIO服務器信息
./mc admin info minio

# 添加外殼別名以獲取信息,以便恢復。
alias minfo='/opt/bigdata/minio/mc admin info'
alias mheal='/opt/bigdata/minio/mc admin heal'

更多示例操作,可以參考官方文檔:http://docs.minio.org.cn/docs/master/minio-admin-complete-guide

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/GvxrRzBUzIPN-hhoyH4S5A