1.MinIO概念
MinIO是在GUN Affero通用公共許可證v3.0下發布的高性能的對象存儲。它是與Amazon S3云存儲服務兼容的API。使用MinIO為機器學習、分析和隱月宮程序數據工作負載構建高性能基礎架構。
MinIO對象存儲使用buckets(桶)來組織對象,桶類似于文件系統中的目錄/文件夾,可以存放任意數量的對象,它提供與 AWS S3 buckets 相同的功能。
bucket多版本存儲:MinIO支持同一個對象在一個桶中存在多個版本。
2.MinIO在CentOS 8上搭建
安裝(rpm方法):
- MinIO Server
dnf install https://dl.min.io/server/minio/release/linux-amd64/minio-20210825004118.0.0.x86_64.rpm
- MinIO Client
dnf install https://dl.min.io/client/mc/release/linux-amd64/mcli-20210727064619.0.0.x86_64.rpm
- python minio SDK
pip install minio(需要更新系統)
啟動:
- 添加環境變量
vim ~/.bash_profile
給path參數添加/usr/local/bin/
- Server端
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password minio server /mnt/data --console-address ":9001"
- Client端
mcli alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD
添加防火墻端口9000和9001
firewall-cmd --permanent --add-port=9001/tcp --add-port=9000/tcp
firewall-cmd --reload
添加主機名
vim /etc/hosts
192.168.1.128 server1
之后就可以通過 server1:9000 來訪問 MinIO 控制臺了
后續還可以通過server2、server3來命名其他主機,從而可以通過server{1…3}來指定3個服務器。
3.分布式部署
條件:
- 大于等于4個 drives/volumes
- 由1-n個minio server 進程管理
特點:
- 每個MinIO服務器都擁有完整的分布式拓撲圖,應用可以連接到部署中的任一臺節點,并執行S3 操作
- 默認應用糾刪碼,提供健壯性,對象級的恢復比相似計數如RAID或復制,開銷更小
- 基于配置好的 erasure code parity, 分布式部署m 服務器和n 磁盤每服務器可以在m/2 服務器上或 m*n/2個磁盤驅動上正常運行
- 服務器端對象復制
- 一次寫入多次讀鎖定
- 對象版本控制
部署條件:
- 網絡條件:節點間的雙向網絡通聯
- 主機名:要求使用【序列編號】的主機名,需要構建必要的DNS主機名映射表
例如:
minio1.example.com
minio2.example.com
minio3.example.com
minio4.example.com - 磁盤陣列:
- 強烈推薦使用 JBOD 陣列(沒有冗余,區別于RAID),使用 RAID 不能提供minio附加的恢復和可用性優勢,并且會降低系統性能。
- 推薦 xfs 格式的驅動,性能最佳
- 在每個節點部署中,需要使用序列號編碼的驅動,且序號在不同節點間是可復制的。
例如 4-drive/node 部署:
/mnt/disk1
/mnt/disk2
/mnt/disk3
/mnt/disk4 - MinIO嚴格的 read-after-write 和 list-after-write 約束模型要求本地磁盤文件系統(例如xfs, ext4, 等)。
- 對于NFS 或其他 網絡訪問存儲卷 minio不提供一致性
- 如果部署需要使用網絡訪問存儲,NFSv4 是最好的選擇
部署
- 給每個節點安裝MinIO
- 添加TLS/SSL 證書
MinIO 在MinIO Certs目錄探測到一個x.509 證書(.crt)和私鑰(.key)后,自動應用 TLS 1.2+
certs在Linux上的 ${HOME}/.minio/certs中
使用命令 minio server --cert-dir,可以覆蓋證書目錄參數
(此過程是可選,但強烈建議) - 運行 MinIO服務器進程
在每個部署的節點上執行以下命令
(部署了4個節點,主機名序列化:minio1.example, minio2.example, etc.)
(每個節點由2個本地符屬磁盤,以序列化命名:/mnt/disk1, /mnt/disk2)
export MINIO_ROOT_USER = minio-u234
export MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME
*#export MINIO_SERVER_URL=https://minio.example.net* *#export MINIO_KMS_SECRET_KEY=my-minio-encryption-key:bXltaW5pb2VuY3J5cHRpb25rZXljaGFuZ2VtZTEyMwo*
minio server [<u>https://minio{1…4}.example/mnt/disk{1…2}/</u>](https://minio{1…4}.example/mnt/disk{1…2}/) --console-address ":9001"
其中:
參數 | 含義 |
---|---|
MINIO_ROOT_USER | root 用戶的 access key |
MINIO_ROOT_PASSWORD | root 用戶的 secret key |
MINIO_SERVER_URL | MinIO Console 用于連接MinIO 服務器的 URL 主機名。如果指定不包含MinIO服務器主機IP地址的TLS 證書作為主題別名,則需要此變量。指定 TLS 證書SAN 條目中的一個覆蓋的主機名 |
MINIO_KMS_SECRET_KEY | 用于加密MinIO后端的key。在生產環境中不要使用該設置,推薦使用MinIO 密鑰加密服務(KES)和外部密鑰管理系統(KMS)來應用加密功能。用 MINIO_KMS_KES_KEY_NAME 指定加密key的名字。(See KMS IAM/Config Encryption for more information.) 為所有節點指定相同加密key, 格式:<key-name>:<encryption-key> key-name:隨意的字符串,如果之后你用專用KMS來管理加密keys,則必須指定, encryption-key:32位 base64編碼的值,例如: cat /dev/urandom |head -c 32 |base64 - 將這個key復制到安全的位置。MinIO需要用這個key來解碼后端 |
- 訪問 MinIO Console
打開瀏覽器訪問任意MinIO hostnames 端口號9001來打開 MinIO Console 登陸界面,用 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD登陸 - 下一步
用mcli 創建別名(alias)
創建用戶和策略來做訪問控制 Create users and policies to control access to the deployment.
推薦配置
- 部署最小節點數:每個 server pool 最少4個節點和每服務器4 drives,該部署最多可以丟失4 drive和1個節點
- 服務器硬件:
參數 | 配置 |
---|---|
處理器 | Dual Intel Xeon Scalable Gold CPUs with 8 cores per socket |
內存 | 128GB of Memory per pod |
網絡 | Minimum of 25GbE NIC and supporting network infrastructure between nodes. |
硬盤 | SATA/SAS NVMe/SSD with a minimum of 8 drives per server. Drives should be JBOD arrays with no RAID or similar technologies. MinIO recommends XFS formatting for best performance. |
- 網絡:
NIC bandwidth (Gbps) | Estimated Aggregated Storage Throughput (GBps) |
---|---|
10GbE | 1GBps |
25GbE | 2.5GBps |
50GbE | 5GBps |
100GbE | 10GBps |
- CPU分配:
Host NIC Bandwidth | Recommended Pod vCPU |
---|---|
10GbE or less | 8 vCPU per pod. |
25GbE | 16 vCPU per pod. |
50GbE | 32 vCPU per pod. |
100GbE | 64 vCPU per pod. |
- 內存分配
Total Host Storage | Recommended Host Memory |
---|---|
Up to 1 Tebibyte (Ti) | 8GiB |
Up to 10 Tebibyte (Ti) | 16GiB |
Up to 100 Tebibyte (Ti) | 32GiB |
Up to 1 Pebibyte (Pi) | 64GiB |
More than 1 Pebibyte (Pi) | 128GiB |