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 |