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管理操作
相关推荐
面对疾风叭!哈撒给5 分钟前
Linux ARM架构的docker和docker-compose离线安装
linux·docker·架构
落苜蓿蓝21 分钟前
Java 循环中对象复用导致属性覆盖?从 JVM 内存模型讲解原因
java·jvm·python
weixin_4407841125 分钟前
Android基础知识汇总
android·java·android studio
布鲁飞丝26 分钟前
从零实现富文本编辑器#-浏览器选区与编辑器选区模型同步
java·前端·编辑器
阿虎儿27 分钟前
Linux 下为局域网 IP(如 192.168.1.100)打造不受浏览器警告的自签名 SSL/TLS 证书
linux·安全·https
小王C语言1 小时前
虚拟机开机过程中关机,再次开机没有分配 IP
linux·网络·tcp/ip
jun_bai1 小时前
使用java安全的移动文件
java
caishenzhibiao1 小时前
市场同步系统 同花顺期货通指标
java·c语言·c#
Devin~Y1 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag
520拼好饭被践踏1 小时前
JAVA+Agent学习day25
java·开发语言·学习