MinIO教程(1)对象存储基本概念与安装部署

MinIO教程(1)对象存储基本概念与安装部署

一、对象存储简介

对象存储(Object Storage)是一种以对象为基本单位进行数据的存储系统,广泛用于存储图片、音视频、日志、备份等非结构化数据,并在私有云、混合云和边缘计算等场景中得到广泛应用。与传统的文件存储(如 NAS)和块存储(如 SAN)相比,对象存储具有更强的扩展性、灵活性和性能优势,有效解决了传统存储在容量扩展、管理复杂性和高并发访问方面的限制。

与传统的文件系统不同的地方在于每个对象包含数据本体、元数据和唯一标识符三个部分:

· 元数据:用于描述对象的属性,例如存储桶(Bucket)、自定义标签、内容类型、加密信息等

· 数据本体:对象数据本身的内容,可以是文本、图像、视频、语音等各种非结构化内容

· 唯一标识符:类似数据库的主键,用于在整个存储系统中快速找到对象,也是实现权限控制的核心要素,通过标识符可以控制某个用户对某个对象的读取、写入权限

二、MinIO特性

常见的对象存储系统有开创了对象存储标准的Amazon S3(Simple Storage Service)、阿里OSS、Ceph以及MinIO。在开源对象存储方案中,MinIO 以其高性能、轻量化、易部署、S3 完全兼容等特性,成为当前最受欢迎的对象存储项目之一。

1、MinIO性能

MinIO支持存储从 KB 级到 TB 级的对象,根据官方在特定硬件配置和并发条件下的测试结果,其 GET/PUT 性能可分别达到 325 GiB/s 和 165 GiB/s,客户端通过对象的 URL 路径或 API 调用中指定的桶名和对象名来访问数据。

2、MinIO纠删码

MinIO通过纠删码(Erasure Code,简称EC)可以最大化确保数据的安全。纠删码会将每个对象分割成若干个数据块,并基于算法生成冗余校验块,然后分布在多个磁盘或节点上。即使部分块损坏或节点故障,系统仍能自动恢复原始数据。在分布式部署中最多可以容忍一半节点失效的极端情况,非常适合云原生和边缘环境。假设有12块磁盘组成了MinIO集群,存储的对象就会被分成6个数据块和6个校验块,然后任意损坏6块磁盘(不管是数据盘还是校验盘)都可以保证数据不丢失。

在使用 MinIO 的纠删码模式(Erasure Coding)时,至少需要4块磁盘,上传的对象会被分片并分布存储在多个节点或磁盘上,以提高容错能力和数据可靠性,其中 xl.meta 存储对象的元信息,part.N 为数据分片,类似如下结构:

minio.png

三、MinIO的安装

通过MinIO官网下载服务端和客户端的二进制包(https://min.io/open-source/download?platform=linux)。由于是二进制包,下载完成后就可以直接运行启动服务了,MinIO可以部署为单机模式、单机多磁盘模式以及集群模式。

#服务端
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv /usr/local/src/minio /usr/local/bin/minio

#客户端
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv /usr/local/src/mc /usr/local/bin/mc


minio2.png


四、单机模式

单机模式一般用于测试,生产环境下不建议使用。服务正常启动后可以看到API地址、控制台地址等信息

MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"
# MINIO_ROOT_USER:minio管理账号
# MINIO_ROOT_PASSWORD:minio管理密码
# /mnt/data:数据存放目录
# --console-address:Web控制台监听地址和端口

五、单机多磁盘模式

需要提前做好磁盘分区和格式再进行启动,由于存在单节点故障,也不建议在生产环境下使用

nohup ./minio server --console-address ":9091" /data/{1..12} > /tmp/min.lo 2>&1 &

六、集群模式

生产环境推荐模式,当部署分布式集群时,只要磁盘梳理>=4块就可以自动启用纠删码模式。MinIO虽然可以在低成本的硬件上运行,但是为了获得最好的性能,建议所有节点的磁盘在容量和性能上都一致,并且将磁盘配置为JBOD直通方式并且使用XFS文件系统。另外各节点间需要保证时间同步,避免因为各节点时间不一致可能带来的数据冲突问题。

1、创建MinIO用户组和相关数据目录

groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /data2 /data3 /data4 /data5

2、创建变量配置文件

需要确保各节点都使用了相同的信息来启动,不允许顺序不一致、地址不一致、路径不一致,这是 MinIO 识别各个节点属于一个集群的前提

cat /etc/default/minio 
MINIO_VOLUMES="http://192.168.254.20{1...3}:9000/data{1...4}"
MINIO_OPTS="--console-address :9001"
MINIO_ROOT_USER=tanglu
MINIO_ROOT_PASSWORD=123456789

3、配置启动脚本

cat /usr/lib/systemd/system/minio.service 
[Unit]
Description=MinIO
Documentation=https://minio.org.cn/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local
User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

Restart=always
LimitNOFILE=65536
TasksMax=infinity
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

4、每个节点启动服务,运行后初始报错可以忽略,因为此时各节点还没有建立好连接

systemctl start minio
tailf /var/log/messages


#非脚本启动命令
MINIO_ROOT_USER="admin" MINIO_ROOT_PASSWORD="123456789" minio server --console-address ":9001" \
http://192.168.254.101:9000/data2 http://192.168.254.101:9000/data3 http://192.168.254.101:9000/data4 http://192.168.254.101:9000/data5  \
http://192.168.254.102:9000/data2 http://192.168.254.102:9000/data3 http://192.168.254.102:9000/data4 http://192.168.254.102:9000/data5  \
http://192.168.254.103:9000/data2 http://192.168.254.103:9000/data3 http://192.168.254.103:9000/data4 http://192.168.254.103:9000/data5

5、访问Web控制台

minio3.png

文章评论

猜你喜欢

MinIO教程(2)使用客户端工具mc实现对象与集群管理

运维技术 MinIO教程(2)使用客户端工具mc实现对象与集群管理

一、MinIO Client介绍mc是 MinIO 官方提供的命令行客户端工具,该工具支持 Bucket 操作、对象同步、用户权限管理、Prometheus 集成、健康状态检查、纠删码修复等丰富功能,...