Minio对象存储服务介绍、单机和集群部署及其使用

前言

在企业中,我们通常会将一些图片、视频、文档等相关数据存储在对象存储中。
常见的对象存储服务包括阿里云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

在这里插入图片描述
解决办法:输入正确的用户名和密码即可

猜你喜欢

转载自blog.csdn.net/fxzzq/article/details/130234353
今日推荐