Minio初识

1 MinIO介绍

官网:https://min.io/

官方示例:https://gitcode.net/mirrors/minio/minio-java/-/tree/master

下载(国内加速镜像):https://dl.min.io/

MinIO是一个分布式文件存储系统,基于Apache License V2.0协议开发,Go语言编写。完全兼容Amazon S3。易于使用、快速与其他应用结合。为海量数据存储、人工智能、大数据分析而设计。

优点:

  1. 高性能 2. 可扩展性 3. 云原生支持 4. 代码开源

特性:

  1. 纠删编码 2. 提供bit rot保护 3.数据加密保护 4.连续复制 5.WORM防篡改 6. 全局统一性 7.多云网关

2 环境搭建

2.1 单机

  1. 下载MinIO

地址-1:https://dl.min.io/ (建议) (server ==> minio ==> release ==> linux-amd64 ==> minio)

地址-2:https://min.io/download#/linux (国外镜像,很慢)

  1. 部署MinIO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# 1、minio安装目录(创建|定位)
mkdir -p /data/minio/
cd /data/minio/

# 2、将下载的文件上传到安装目录
##--------【此处直接指定账号密码、采用后台启动的方式运行MinIO】----------------##
# 创建账号
#export MINIO_ACCESS_KEY=admin
# 创建密码
#export MINIO_SECRET_KEY=minio123456
# 后台启动(打印日志)
#nohup /data/minio/minio server /data/minio/ > /data/minio/minio.log &
##---------------------------------------------------------------------##

##--------【下方配置成系统服务、启动运行的方式 较为方便】----------------------##
# 3、创建启动脚本
vim /data/minio/start.sh
##--------写入内容-------------------------------------------------##
#####写入内容#####
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=minio123456
/data/minio/minio server /data/minio/ > /data/minio/minio.log
# 默认端口:9000;还可以使用 自定义启动端口 和 控制台端口(默认端口不冲突的话 可以不设置)
# /data/minio/minio server --address :9000 --console-address :9001 /data/minio/ > /data/minio/minio.log
##----------------------------------------------------------------##

# 4、创建停止脚本
vim /data/minio/stop.sh
#---写入内容-------------------------------------------------------------#
#!/bin/bash
ps -ef | grep minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9
if $? != 0;then
echo "minio service stop failed."
exit 1
fi
#-----------------------------------------------------------------------#

# 5、创建minio系统服务(将其加入系统服务)
vim /usr/lib/systemd/system/minio.service
#---写入内容------------------------------#
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/data/minio/
ExecStart=/data/minio/start.sh
ExecStop=/data/minio/stop.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
#----------------------------------------#

# 6、修改相关文件权限
chmod +x /usr/lib/systemd/system/minio.service && chmod +x /data/minio/minio && chmod +x /data/minio/start.sh && chmod +x /data/minio/stop.sh

# 7、服务操作
# 7-1、重写加载服务(使配置文件变更生效)
systemctl daemon-reload
# 7-2、启动服务
systemctl start minio
# 7-3、关闭服务
# systemctl stop minio
# 7-4、加入自启动
systemctl enable minio
##---------------------------------------------------------------------##

# 8、检查状态
ps -ef|grep minio
  1. 使用

浏览器访问地址:http://ip:9000 (登录输入之前配置的 access_key 和 secret_key)

2.2 集群

2.2.1 系统环境

Linux(CentOS 7、IP:192.168.61.142、192.168.61.143)

集群部署方式分为以下两种:

​ 直接部署(未分组、不支持集群扩容)

​ 分组扩容部署(支持 MinIO 官方方式扩容)【建议

2.2.2 挂载新硬盘

MinIO在集群部署时,数据目录所对应的要求是一块物理盘,启动时MinIO会去格式化硬盘,不能是系统盘,若不然 会提示错误,所以系统预装没有新硬盘的情况下,需要执行系统挂载新硬盘操作。

2.2.2.1 添加硬盘

虚拟机关机

查看设备挂载情况,开启虚拟机

1
lsblk -f

2.2.2.2 新硬盘分区
1
2
3
4
5
# sdb(新磁盘名)
fdisk /dev/sdb
# 分区操作参考:
# n(回车)==> p(回车)==> {1 | 2 | 3 | 4}(回车)==> 起始扇区[默认值](回车)==> 扇区大小[+xxxxM按需指定](回车)
# w(保存分区信息

2.2.2.3 分区格式化
1
2
3
4
mkfs -t ext4 /dev/sdb1
mkfs -t ext4 /dev/sdb2
mkfs -t ext4 /dev/sdb3
mkfs -t ext4 /dev/sdb4

1
2
#查看结果
lsblk -f

2.2.2.4 挂载硬盘目录
1
2
3
4
5
6
7
mount /dev/sdb1 /data/minio/data1
mount /dev/sdb2 /data/minio/data2
mount /dev/sdb3 /data/minio/data3
mount /dev/sdb4 /data/minio/data4

#查看结果
lsblk -f

2.2.2.5 设置自动挂载

1
2
3
4
5
6
7
8
9
10
vim /etc/fstab
# 文件末尾添加
#UUID=33c07641-bae6-4f7b-987a-c58f1d370cc3 /dev/sdb1 /data/minio/data1/ ext4 defaults 0 0
#UUID=78c7e4b5-756e-4b14-9627-85b4cb11a388 /dev/sdb2 /data/minio/data2/ ext4 defaults 0 0
#UUID=f8c05a74-4f9c-447d-8d9f-0771bb6e493f /dev/sdb3 /data/minio/data3/ ext4 defaults 0 0
#UUID=aa96b070-bf21-4d13-9c00-9bf390d69618 /dev/sdb4 /data/minio/data4/ ext4 defaults 0 0
/dev/sdb1 /data/minio/data1/ ext4 defaults 0 0
/dev/sdb2 /data/minio/data2/ ext4 defaults 0 0
/dev/sdb3 /data/minio/data3/ ext4 defaults 0 0
/dev/sdb4 /data/minio/data4/ ext4 defaults 0 0

1
2
#重新加载
mount -a

2.2.3 下载MinIO

同单机一样

2.2.4 安装部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#【注意:以下操作均在两节点上进行】
# 1、创建数据目录
mkdir -p /data/minio/{data1,data2,data3,data4}

# 2、创建配置目录【两个节点均操作】
mkdir -p /etc/minioconfig

# 3、定位到minio安装目录、将下载的文件上传到安装目录【两个节点均操作】
cd /data/minio/

# 4、创建MinIO启动脚本文件【两个节点均操作】
vim /data/minio/start.sh
##---【192.168.61.142】写入内容------------------------------##
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=minio123456
/data/minio/minio server --config-dir /etc/minioconfig \
--address "192.168.61.142:9000" \
http://192.168.61.{142...143}/data/minio/data{1...4}
##---------------------------------------------------------##
##---【192.168.61.143】写入内容------------------------------##
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=minio123456
/data/minio/minio server --config-dir /etc/minioconfig \
--address "192.168.61.143:9000" \
http://192.168.61.{142...143}/data/minio/data{1...4}
##---------------------------------------------------------##

# 5、创建MinIO停止脚本文件【两个节点均操作】
vim /data/minio/stop.sh
##---【192.168.61.142】写入内容-------------------------------------------##
#!/bin/bash
ps -ef | grep minio | grep -v 'grep' | awk '{print $2}'| xargs kill -9
if $? != 0;then
echo "minio service stop failed."
exit 1
fi
##----------------------------------------------------------------------##

# 6、创建minio系统服务(将其加入系统服务)
vim /usr/lib/systemd/system/minio.service
##---写入内容----------------------------------##
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/data/minio/
ExecStart=/data/minio/start.sh
ExecStop=/data/minio/stop.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
##--------------------------------------------##

# 7、修改相关文件权限
chmod +x /usr/lib/systemd/system/minio.service && chmod +x /data/minio/minio && chmod +x
/data/minio/start.sh && chmod +x /data/minio/stop.sh
#chmod +x /usr/lib/systemd/system/minio.service
#chmod +x /data/minio
#chmod +x /data/minio/start-run.sh

# 8、服务操作
# 8-1、重写加载服务(使配置文件变更生效)
systemctl daemon-reload
# 8-2、启动服务
systemctl start minio
# 8-3、关闭服务
# systemctl stop minio
# 8-4、加入自启动
systemctl enable minio

# 9、查看minon集群状态
systemctl status minio.service -l

2.2.5 MinIO使用

通过任意节点的ip都可以访问。

备注:实际场景中,如果想要实现对各个节点的均衡访问,还可以安装配置 Nginx 实现负载均衡,通过 Nginx 负载均衡进行反向代理,统一一个地址进行转发

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 1、安装nginx
yum install epel-release -y
yum install nginx -y
systemctl start nginx
systemctl status nginx
systemctl enable nginx

# 2、添加配置文件
vim /etc/nginx/conf.d/minio.conf
## 配置如下内容 ##
upstream minio_api {
server 192.168.61.142:9000;
server 192.168.61.143:9000;
}
upstream minio_console {
server 192.168.61.142:9001;
server 192.168.61.143:9001;
}
server{
listen 19000;
server_name 192.168.61.142;

ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;

location / {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;

proxy_connect_timeout 300;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_ignore_client_abort on;
proxy_pass http://minio_api;
}
}

server{
listen 19001;
server_name 192.168.61.142;

ignore_invalid_headers off;
client_max_body_size 0;
proxy_buffering off;

location / {
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;

proxy_connect_timeout 300;
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_ignore_client_abort on;

proxy_pass http://minio_console;
}
}

# 3、重启加载配置
nginx -t
nginx -s reload
#或者 systemctl reload nginx

2.3 客户端操作

2.3.1 概述

MinIO Client 简称 mc,是 MinIO 服务器的客户端,对 ls,cat,cp,mirror,diff,find 等 UNIX 命令提供了一种替代方案,它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4),常见 mc 指令:

指令 说明 指令 说明
ls 列出文件和文件夹 rm 删除文件和对象
mb 创建一个存储桶或文件夹 events 管理对象通知
cat 显示文件和对象内容 watch 监听文件和对象的事件
pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT policy 管理访问策略
share 生成用于共享的URL session 为cp命令管理保存的会话
cp 拷贝文件和对象 config 管理mc配置文件
mirror 给存储桶和文件夹做镜像 update 检查软件更新
find 基于参数查找文件 version 输出版本信息
diff 对两个文件夹或者存储桶比较差异

2.3.2 下载mc

地址:https://dl.min.io/ (client ==> mc ==> release ==> linux-amd64 ==> mc)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 若没有下载文件 也可直接安装
# wget http://dl.minio.org.cn/client/mc/release/linux-amd64/mc

# 1、mc安装目录(创建|定位)
mkdir -p /data/minio/mc
cd /data/minio/mc

# 2、将下载的文件上传到安装目录

# 3、授予权限
chmod +x mc

# 4、查看帮助
./mc -h

# 5、添加服务器节点
./mc config host add q1 http://192.168.61.142:9000 admin minio123456
./mc config host ls

# 6、查看信息
# 6-1、查看q1下的所有存储桶
./mc ls q1
# 6-2、获取q1的服务器信息
./mc admin info q1

Minio初识
http://www.zivjie.cn/2023/05/13/中间件/minio/Minio初识/
作者
Francis
发布于
2023年5月13日
许可协议