MinIO介绍使用

MinIO介绍使用

MinIO 介绍

MinIO 是一款基于Go语言发开的高性能、分布式的对象存储系统。客户端支持Java,Net,Python,Javacript, Golang语言。

MinIO 英文官网 MinIO 中文官网 注意:中文官方更新不及时,会有很多坑,请以英文官网为准。

应用场景

互联网海量非结构化数据的存储需求

  • 电商网站:海量商品图片

  • 视频网站:海量视频文件

  • 网盘:海量文件

  • 社交网站:海量图片

  • 日志系统:审计日志

  • 镜像仓库:海量docker镜像

基础概念

  • Object:存储到 Minio 的基本对象,如文件、字节流,视频、音频、日志、镜像等等

  • Bucket:用来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端而 言,就相当于一个存放文件的顶层文件夹。

  • Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的方式传入。Minio 中所有的对象数据都会 存储在 Drive 里。

  • Set :即一组 Drive 的集合,分布式部署根据集群规模自动划分一个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。一个对象存储在一个 Set 上。(For example: {1...64} is divided into 4 sets each of size 16.)

MinIO优势

1、数据保护

1.1、分布式MInio采用纠删码来放反多个节点待机和位衰减 bit rot

1.2、分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

2、高可用

2.1、单机Minio服务存在单点故障,相反,如果是有一个N快硬盘的分布式Minio,只要有N/2硬盘在线,你的数据就是安全的。不过你需要至少有N/2+1个硬盘来创建新的对象。

2.2、例如,一个16节点的Minio集群,每个节点16块块硬盘,计算8台服务器宕机,这个集群仍然是可读的,不过你需要9台服务器才能写入数据。

3、一致性

3.1、Minio在分布式和单机模式下,所有读写炒作都严格遵守read-after-write 一致性模型

MinIO 使用

使用【服务端】

单机模式 (linux部署)

ps:初始用户名密码:minioadmin

1、下载linux minio, wget https://dl.min.io/server/minio/release/linux-amd64/minio

2、linux部署

复制代码
修改用户名密码:
export MINIO_ROOT_USER=username
export MINIO_ROOT_PASSWORD=password
​
启动:
./minio server --console-address ":9090" /mnt/data
​
后台启动,指定日志路径:
nohup ./minio server --console-address :"9090" ./miniodata/data >./miniodata/minio.log 2>&1 &
​
ps:接口默认地址:9000
指定console端口:9090

3、docker部署

复制代码
docker run \
  -p 9000:9000 \
  -p 9001:9001 \
  -e "MINIO_ROOT_USER=AKIAIOSFODNN7EXAMPLE" \
  -e "MINIO_ROOT_PASSWORD=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
  quay.io/minio/minio server /data --console-address ":9001"

4、docker部署纠删码模式

复制代码
docker run -d -p 9000:9000 -p 9090:9090 --name minio \
 -v /mnt/data1:/data1 \
 -v /mnt/data2:/data2 \
 -v /mnt/data3:/data3 \
 -v /mnt/data4:/data4 \
 -v /mnt/data5:/data5 \
 -v /mnt/data6:/data6 \
 -v /mnt/data7:/data7 \
 -v /mnt/data8:/data8 \
minio/minio server /data{1...8} --console-address ":9090"

5、缺点:单点故障,直接宕机

分布式部署

注意事项:

1、linux部署:启动一个分布式Minio实例,你只需要把硬盘位置作为参数传给minio server命令即可,然后,你需要在所有其他节点运行同样的命令。

2、分布式Minio里所有的节点需要有同样的access秘钥和secret秘钥,这样这些节点才能建立连接。为了实现这个,你需要在执行minioserver命令前,先将access秘钥和secret秘钥expoert成环境变量。新版本使用MINIO_ROOT_USER&MINIO_ROOTPASSWORD。

3、【举例1】8个节点,每个节点1块盘。启动分布式Minio实例,8个节点,每节点1块盘,需要再8个节点上都运行下面的命令:

复制代码
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456

【举例1.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。

复制代码
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 \

【举例2】4个节点,每个节点2块盘。启动分布式Minio实例,4个节点,每节点2块盘,需要再4个节点上都运行下面的命令:

复制代码
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=123456

【举例2.1】下面示例的IP仅供示例参考没需要改成你真实的IP地址和文件夹路径。

复制代码
http://192.168.1.11/export1 \
http://192.168.1.11/export2 \
http://192.168.1.12/export1 \
http://192.168.1.12/export2 \
http://192.168.1.13/export1 \
http://192.168.1.13/export2 \
http://192.168.1.14/export1 \
http://192.168.1.14/export2 \

5、统一入口:使用Nginx 统一入口,可以做ip hash策略分散服务器压力。

【例如 :】

复制代码
upstream minio {
    server 192.168.1.11:9001;
    server 192.168.1.12:9001;
    server 192.168.1.13:9001;
    server 192.168.1.14:9001;
}
​
upstream console {
    ip_hash;
    server 192.168.1.11:5001;
    server 192.168.1.12:5002;
    server 192.168.1.13:5003;
    server 192.168.1.14:5004;
}
​
server {
    listen      9000;
    listen [::] 9000;
    server_name localhost;
    
    localhost / {
    
        proxy_pass http://minio;
    }
}
server {
    listen      5000;
    listen [::] 5000;
    server_name localhost;
    
    localhost / {
    
    proxy_pass http://console;
    }
}

6、docker-compose部署,能力有限,留个入口。

使用【客户端】

介绍:MinIO Clinet(mc) 为ls,cat,cp,mirror,diff,find 等UNIX命令提供一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。

Windows 部署

ps:注意9001 是接口端口,不是console端口。

1、下载

复制代码
wget https://dl.min.io/client/mc/release/linux-amd64/mc 

2、赋予权限

复制代码
chmod +x mc
./mc --help

3、查询mc host配置

复制代码
mc config host ls

4、 添加minio服务

复制代码
mc config host add minio-server http://81.70.144.153:9001/
minioadmin minioadmin

5、 mc命令【管理文件】

复制代码
# 加入配置文件:
mc config host add minio01 http://81.70.144.153:9000 minioadmin minioadmin
​
# 连接查看minio文件内容:
mc ls tuling minio01
​
# 下载文件
mc cp minio01/yeb/数据结构算法面试题.txt D:\
​
# 上传文件
mc cp D:\测试.txt minio01/yeb
​
# 删除文件
mc rm minio01/yeb/测试.txt

6、mc命令【管理桶(Bucket)】

复制代码
# 创建bucket
mc mb minio01/yeb1
​
# 删除bucket(有数据删除失败)
mc rb minio01/yeb1
​
# bucket不为空,强制删除,慎用
mc rb --force minio01/yeb1
​
# 查看bucket磁盘使用情况
mc du minio01/yeb

7、mc命令【admin使用】

复制代码
Minio Client 提供了‘admin’子命令来对minio部署执行管理任务
​
service 服务器停止并且重启所有Minio服务器
udpate 更新所有MInio服务器
info 显示minio服务器信息
user 管理用户
group 管理小组
policy minio服务器中定义策略管理
cofnig 配置管理minio服务器
heal 修复minio服务器上的磁盘、桶、对象
profile 生成概要文件数据进行调试
top 顶部提供minio统计信息
trace 跟踪显示minio服务器的http跟踪
console 控制台显示minio服务器的控制台日志
prometheus prometheys配置
kms kms管理操作
相关推荐
天天摸鱼的java工程师2 分钟前
2025已过半,Java就业大环境究竟咋样了?
java·后端
时时刻刻看着自己的心4 分钟前
docker启动报错
运维·docker·容器
DIY机器人工房6 分钟前
代码详细注释:通过stat()和lstat()系统调用获取文件的详细属性信息
linux·嵌入式
人生在勤,不索何获-白大侠7 分钟前
day16——Java集合进阶(Collection、List、Set)
java·开发语言
Zedthm13 分钟前
LeetCode1004. 最大连续1的个数 III
java·算法·leetcode
艺杯羹25 分钟前
MyBatis之核心对象与工作流程及SqlSession操作
java·mybatis
神的孩子都在歌唱32 分钟前
3423. 循环数组中相邻元素的最大差值 — day97
java·数据结构·算法
匆匆那年9671 小时前
Docker容器中安装MongoDB,导入数据
运维·docker·容器
望获linux1 小时前
【Linux基础知识系列】第四十三篇 - 基础正则表达式与 grep/sed
linux·运维·服务器·开发语言·前端·操作系统·嵌入式软件
喜欢吃豆1 小时前
深入企业内部的MCP知识(三):FastMCP工具转换(Tool Transformation)全解析:从适配到增强的工具进化指南
java·前端·人工智能·大模型·github·mcp