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

news2025/1/23 22:40:20

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版本选择

发布版本年份详细版本发版周期
2018minio.OFFICIAL.2015-11-14T08-36-28Z总共发布5个版本
2018minio.OFFICIAL.2016-02-08T00-12-28Z
2019minio.RELEASE.2019-01-10T00-21-20Z基本一周一个版本
2020minio.RELEASE.2020-02-27T00-23-05Z基本一周一个版本
2021Minio.RELEASE.2021-04-22T15-44-28Z最后一个使用Apache2.0协议的版本
2021minio.RELEASE.2021-07-12T02-44-53Z基本一周一个版本 协议:AGPLv3
2022minio.RELEASE.2022-02-05T04-40-59Z基本一周一个版本 协议:AGPLv3
2023minio.RELEASE.2023-04-07T05-28-58Z基本一周一个版本 协议:AGPLv3
2023minio.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:端口用户名密码
1Minio集群服务器192.168.8.226 30000/30001root123456
2Minio集群服务器192.168.8.227 30000/30001root123456
3Minio集群服务器192.168.8.244 30000/30001root123456
4Minio集群服务器192.168.8.248 30000/30001root123456
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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IOC容器与DI依赖注入示例

IOC容器与DI依赖注入示例 IOC深入理解IOC示例: DI深入理解DI示例 IOC深入理解 我们先通过几个问题来加深一下对IOC的理解 (1)Spring是使用IOC容器来管理bean对象的,我们主要管理什么? 主要管理项目中所使用到的类对象,比如(Service层对像和…

哈希表|STL使用

哈希表 时间复杂度为O(1) 拉链法 把X代表的数字映射到N所在区间,有可能会发生冲突俩个或多个数字映射到1个数 拉链法:把冲突的数字挂起来,用单链表挂起来 一般取模的数要取成质数,而且这个质数离二的n次幂要比较远,这样…

什么是深度学习?

目录 简介 深度学习的由来 深度学习未来的趋势 总结 简介 深度学习是在20世纪80年代被提出来的,主要是由加拿大的计算机科学家Geoffrey Hinton、Yoshua Bengio、Yann LeCun等人发起的。Geoffrey Hinton等人在经过多年的研究和实践之后,…

C语言的指针(进阶)

目录 数组指针 数组指针的使用 函数指针 函数指针数组 指向函数指针数组的指针 回调函数 数组指针 数组指针是指针?还是数组? 答案是:指针 数组指针也就是指向一个数组的指针 看下面两条代码: int *p1[10]; int (*p2)[10]; …

Manjaro安装clash-for-windows-bin

安装 安装Clash for Windows yay -S clash-for-windows-bin 配置 命令行进入~/.config/clash/ ,配置文件 config.yaml 和 Country.mmdb wget -O config.yaml [订阅链接]wget -O Country.mmdb https://gitee.com/mirrors/Pingtunnel/raw/master/GeoLite2-Country.…

领导给了一千多个需求,这个排序法救了我的命……

什么是MoSCoW排序法? 莫斯科排序法是一种优先级排序法,用于管理需求、任务或功能列表。该方法可以帮助团队确定哪些需求、任务或功能是最重要的,并决定在特定时间段内是否需要完成它们。 所以在对需求进行排序时,可以从以下维度…

优思学院|六西格玛常见问题有哪些?

要实现高质量、高效率和高客户满意度的目标,许多企业采用了六西格玛方法。然而,在实施过程中,往往会遇到各种各样的问题。优思学院会在这里探讨一下几个六西格玛常见问题,并提供解决方案,以帮助企业成功实施六西格玛方…

JSONP数据劫持漏洞

​介绍 JSONP(JSON with Padding)是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据;它利用的是script标签的 src 属性不受同源策略影响的特性&#x…

GoNote第二章 Moudles

Go Modules 1. 介绍 Go modules是官方提供的go包管理工具,用于解决go包管理和依赖问题;从1.11开始引入,到现在1.14已经比较完善,1.16已经全面推荐使用,并且默认为开启;Go Modules类似于JS的NPM&#xff0…

校园小助手【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 本系统源码地址: 更多系统资源库地址:骚戴的博客_CSDN_更多系统资源 更多系统…

Apple iWork(Pages、Numbers、Keynote)13.0 - 文档、电子表格、演示文稿

请访问原文链接:https://sysin.org/blog/apple-iwork-13/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 苹果今天将其专为 iOS 和 macOS 设备设计的 iWork 应用套件更新为版本 12 (sysin),引入了许多新…

高并发服务器之泄峰

文章目录 背景前言解决方案泄峰 泄峰结果总结代码示例 背景 行业: 车联网机器配置:阿里云服务 8核 16G内存 3M带宽 阿里云操作系统单台server接入设备:5w终端产品:GPS定位设备终端与平台通信方式:TCP长链 前言 近期…

Linux中的五种IO模型

Linux中有以下五种IO模型 一、同步阻塞IO(Blocking IO, BIO) 用户进程发起IO调用后就阻塞线程让出CPU,等待内核处理完毕返回结果再唤醒继续执行。 二、同步非阻塞IO(Non-Blocking IO, NIO) 用户进程发起IO调用后就…

前端研发提质增效利器,TypeScirpt成功迁移详解

点击蓝字👆 关注Agilean,获取一手干货 直播预告:Adapt 系列直播又双叒叕来啦!最新一期我们将围绕「版本分支与环境」进行深入探讨,欢迎大家来直播间和主播互动哟~ 点击下方右上角红色按钮「预约」&#x1f…

ESP32设备驱动-PAJ7620手势传感器驱动

PAJ7620手势传感器驱动 文章目录 PAJ7620手势传感器驱动2、硬件准备3、软件准备4、驱动实现PAJ7620 将手势识别功能与通用 I2C 接口集成到单个芯片中,形成图像分析传感器系统。 可识别上、下、左、右、前、后、顺时针、逆时针、挥手等9种人手手势。 它还提供内置的接近检测,以…

网络编程及项目思路

计算机和计算机之间通过网络进行数据传输 常见的软件架构: C/S:客户端/服务器 画面可以做的非常精美,用户体验好需要开发客户端,也需要开发服务端用户需要下载和更新的时候太麻烦 B/S:浏览器/服务器 不需要开发客户端,只需要…

java IO流_1

目录 分类 字节流 InputStream OutputStream 文件拷贝 字符流 FileReader FileWriter 处理流 BufferedReader BufferedWriter 文本拷贝 流是从起源到接受的有序数据,通过流的方式允许程序使用相同的方式来访问不同的输入/输出源。 分类 按数据…

SDK(动态链接库dll)的封装技巧

SDK(动态链接库dll)的封装技巧 一、说明 通过上篇文章,我们知道对于封装API,目的为了代码复用等,其中还有一个重要的原因,就是隐藏实现。 说到隐藏实现,在封装C的SDK库(动态dll库)时&#xff…

【获奖案例巡展】信创先锋之星——浙江省某市区视频能力中心

为表彰使用大数据、人工智能等基础软件为企业、行业或世界做出杰出贡献和巨大创新的标杆项目,星环科技自2021年推出了“新科技 星力量” 星环科技科技实践案例评选活动,旨在为各行业提供更多的优秀产品案例,彰显技术改变世界的力量&#xff0…

【id:33】【20分】C. 分数类(类与构造)

题目描述 完成下列分数类的实现: class CFraction { private: int fz, fm; public: CFraction(int fz_val, int fm_val) ; CFraction add(const CFraction &r); CFraction sub(const CFraction &r); CFraction mul(const CFraction &r);…