Minio对象存储服务介绍、单机和集群部署及其使用
- 前言
- Minio简介
- Minio版本选择
- AGPL协议说明
- Minio优缺点
- 优点
- 缺点
- Minio分server 和client
- minio-client
- 下载二进制文件
- 查看 mc 版本
- Minio分布式集群详细搭建
- 基础环境
- 操作系统
- Minio下载
- 准备工作
- 1、机器资源
- 2、创建相关目录
- 3、创建启动脚本目录
- 4、上传安装包
- 5、编写集群启动脚本run.sh
- 6、编写服务脚本minio.service
- 7、将下载好的minio文件赋予权限
- 8、赋予启动文件和服务脚本权限
- 9、依次启动每个服务器的minio
- 10、访问测试
- 11、代理集群
- 12、集群代理测试
- 13、服务端版本查看
- 14、服务开机自启动设置
- 15、开机自动挂载
- 问题解决
- 问题1:启动脚本run.sh编写错误
- 问题2:单独运行启动脚本run.sh报错
- 问题3:run.sh启动参数错误
- 问题4:单独运行启动脚本run.sh报错2
- 问题5:密码错误提示Unauthorized
前言
在企业中,我们通常会将一些图片、视频、文档等相关数据存储在对象存储中。
常见的对象存储服务包括阿里云OSS对象存储、FastDFS分布式文件系统和公司私有云平台,方便数据存储和快速访问。但是,随着业务的快速发展,我们需要存储一些文件相关数据。我们选择使用兼容S3协议的Minio进行自建服务。
Minio简介
开源分布式对象存储。
MinIO 是全球领先的对象存储先锋。
在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
MinIO对象存储系统专为海量数据存储、人工智能和大数据分析而设计。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。
通过添加更多集群可以扩展名称空间,更多机架,直到实现目标。同时,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。
Minio是基于Apache License v2.0开源协议的一个分布式的对象存储系统,在2021年4月22日后的版本使用协议是AGPLv3。
Minio支持Amazon S3云存储的服务接口,完全兼容Amazon S3接口。
非常适合支持大量非结构化的数据,最大单个对象可达5TB。一个文件可以是任意大小,从几十k到最大的5TB。
Minio也是一个非常轻量的服务,可以结合其他的应用进行使用。
Minio适用于存储海量图片、视频、日志文件、备份数据和容器/虚拟机镜像。
MinIO 主要用 Golang 语言实现。整个系统运行在操作系统的用户态空间中。客户端与存储服务器之间采用http/https通信协议。
Minio版本选择
发布版本年份 | 详细版本 | 发版周期 |
---|---|---|
2018 | minio.OFFICIAL.2015-11-14T08-36-28Z | 总共发布5个版本 |
2018 | minio.OFFICIAL.2016-02-08T00-12-28Z | |
2019 | minio.RELEASE.2019-01-10T00-21-20Z | 基本一周一个版本 |
2020 | minio.RELEASE.2020-02-27T00-23-05Z | 基本一周一个版本 |
2021 | Minio.RELEASE.2021-04-22T15-44-28Z | 最后一个使用Apache2.0协议的版本 |
2021 | minio.RELEASE.2021-07-12T02-44-53Z | 基本一周一个版本 协议:AGPLv3 |
2022 | minio.RELEASE.2022-02-05T04-40-59Z | 基本一周一个版本 协议:AGPLv3 |
2023 | minio.RELEASE.2023-04-07T05-28-58Z | 基本一周一个版本 协议:AGPLv3 |
2023 | minio.RELEASE.2023-04-13T03-08-07Z |
最新版本:
本教程分布式集群版本:RELEASE.2023-04-13T03-08-07Z
AGPL协议说明
AGPL 是 GPL 的一个补充, 在GPL 的基础上加了一些限制。GPL 的约束生效前提是该软件"发布",有的公司就使用 GPL 组件编写web 系统,但是不发布系统,只用这个系统在线提供服务,这样就避免了开源系统代码。而 AGPL 要求如果云服务(即 saas )用到的代码是该许可证,那云服务的代码也必须开源。
Minio优缺点
优点
完全兼容S3
学习成本低,安装运维简单,开箱即用。
有java客户端、js客户端。
数据保护:分布式Minio采用纠删码来防范多个节点宕机和位衰减bit rot。分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。
数据一致性:Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。
支持联盟模式扩展集群。
缺点
不支持动态增加节点,minio创始人的设计理念就是动态增加节点太复杂,后续会采用其它方案来支持扩容。
Minio分server 和client
minio-client
下载二进制文件
cd /usr/local/bin/ && wget https://dl.min.io/client/mc/release/linux-amd64/mc && chmod +x mc
查看 mc 版本
mc version
Minio分布式集群详细搭建
基础环境
操作系统
[root@localhost opt]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
Minio下载
方式一:
wget https://dl.minio.io/server/minio/release/linux-amd64/minio
方式二:
https://dl.min.io/server/minio/release/linux-amd64/minio
方式三:
打开https://dl.minio.io/server/minio/release/linux-amd64/自己根据需求选择下载。
推荐方式三。
准备工作
1、机器资源
服务器需要5台
序号 | 用途 | IP:端口 | 用户名 | 密码 |
---|---|---|---|---|
1 | Minio集群服务器 | 192.168.8.226 30000/30001 | root | 123456 |
2 | Minio集群服务器 | 192.168.8.227 30000/30001 | root | 123456 |
3 | Minio集群服务器 | 192.168.8.244 30000/30001 | root | 123456 |
4 | Minio集群服务器 | 192.168.8.248 30000/30001 | root | 123456 |
5 | 代理集群的nginx |
2、创建相关目录
所有节点,上面四台机器都创建相同路径的文件夹。
mkdir /data/minio_data/
cd /data/minio_data/
mkdir data1
mkdir data2
注意:需要将新建的目录挂在到对应的磁盘下,磁盘不挂在好,集群启动会报错:找不到磁盘,如下:
df -h
mount /dev/sda1 /data/minio_data/
lsblk
开机自动挂载
文件挂载的配置文件:/etc/fstab
编辑fstab默认启动文件命令:
vi /etc/fstab 回车在其中添加一行
/dev/sda1 /data/minio_data/ xfs defaults 0 0
3、创建启动脚本目录
mkdir /opt/minio/
4、上传安装包
上传安装包到/opt/minio/
5、编写集群启动脚本run.sh
所有节点配置文件相同。
vim /opt/minio/run.sh
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=adminminio
/opt/minio/minio server -address :30001 --console-address :30000 \
http://192.168.8.226/data/minio_data/data1 http://192.168.8.226/data/minio_data/data2 \
http://192.168.8.227/data/minio_data/data1 http://192.168.8.227/data/minio_data/data2 \
http://192.168.8.244/data/minio_data/data1 http://192.168.8.244/data/minio_data/data2 \
http://192.168.8.248/data/minio_data/data1 http://192.168.8.248/data/minio_data/data2
或者简化脚本如下:
#!/bin/bash
export MINIO_ACCESS_KEY=admin
export MINIO_SECRET_KEY=adminminio
/opt/minio/minio server -address “:30001”--console-address “:30000” \
http://192.168.8.226/data/minio_data/data{1...2} \
http://192.168.8.227/data/minio_data/data{1...2} \
http://192.168.8.244/data/minio_data/data{1...2} \
http://192.168.8.248/data/minio_data/data{1...2}
其中,“MINIO_ACCESS_KEY”为用户名,“MINIO_SECRET_KEY”为密码,密码不能设置过于简单,不然minio会启动失败。
创建好的/opt/minio/目录下的结构如下图:
6、编写服务脚本minio.service
所有节点都创建。
vim /usr/lib/systemd/system/minio.service
[Unit]
Description=Minio service
Documentation=https://docs.minio.io/
[Service]
WorkingDirectory=/opt/minio/
ExecStart=/opt/minio/run.sh
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
其中,“WorkingDirectory”为启动脚本目录,“ExecStart”为指定集群启动脚本
7、将下载好的minio文件赋予权限
cd /opt/minio/
chmod +x /opt/minio/minio
8、赋予启动文件和服务脚本权限
chmod +x /opt/minio/run.sh
chmod +x /usr/lib/systemd/system/minio.service
9、依次启动每个服务器的minio
systemctl daemon-reload
systemctl start minio
systemctl status minio
systemctl daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
成功启动截图如下:
10、访问测试
浏览器输入集群任意节点地址+30000端口,即可访问minio,用户名密码为前面设置的“MINIO_ACCESS_KEY”和“MINIO_SECRET_KEY”,可创建“bucket”并上传文件测试。
打开http://192.168.8.244:30000/
11、代理集群
生产环境需要使用Nginx将集群地址进行代理,对外提供统一入口。
upstream minio{
server 192.168.8.226:30000;
server 192.168.8.227: 30000;
server 192.168.8.244: 30000;
server 192.168.8.248: 30000;
}
server {
listen 30000;
server_name minio;
location / {
proxy_pass http://minio;
proxy_set_header Host $http_host;
client_max_body_size 1000m;
}
}
12、集群代理测试
浏览器访问minio集群代理地址+9000端口。
用户名密码为上文中启动脚本run.sh中我们设置的。
13、服务端版本查看
./minio --help
./minio --version
14、服务开机自启动设置
systemctl list-unit-files #显示所有已启动的服务
systemctl enable minio.service #使minio服务自动启动
systemctl list-unit-files #显示所有已启动的服务
15、开机自动挂载
编辑fstab默认启动文件命令:
vi /etc/fstab 回车在其中添加一行
/dev/sda1 /data/minio_data/ xfs defaults 0 0
问题解决
问题1:启动脚本run.sh编写错误
启动脚本run.sh编写错误会出现以下错误。
解决办法:先单独运行./run.sh 看启动报错,根据错误解决,最后再执行服务脚本。
问题2:单独运行启动脚本run.sh报错
提示可以看到是用户名密码设置问题。
解决办法:MINIO_ACCESS_KEY长度不能小于3,MINIO_SECRET_KEY长度不能小于8。
问题3:run.sh启动参数错误
注意:minio新版本的 API和console端口不能使用同一个,否则会报错:
ERROR Unable to start the server: --console-address cannot be same as --address
其中 9000是 web默认的端口,9001的api的默认端口,新版本 java sdk不能使用 9000 web端口。
问题4:单独运行启动脚本run.sh报错2
问题描述:可以看到启动脚本如下
/opt/minio/minio server http://192.168.8.226/data/minio_data/data1
解决办法:脚本的后面的ip后的目录一定要存在才行,否则会提示上面的报错。
问题5:密码错误提示Unauthorized
解决办法:输入正确的用户名和密码即可