微服务系列:分布式文件存储之 MinIO 入门指南

2022-04-16 20:20:09

经过前面多篇文章我们学习了服务网关、服务调用、服务注册、服务监控等微服务系列的的相关知识,今天开始我们来学习一下分布式文件的相关知识。

首先我们从学习MinIO 对象存储服务开始,后面还会学习下其他的分布式文件存储服务比如FastDFS 等。

话不多说,开始今天的学习。

基本介绍

1. 什么是对象存储

关于对象存储,我们可以看下阿里云OSS 的解释。

对象存储服务OSS(Object Storage Service)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。

对象存储最大的优势就在于它可以存储大容量的非结构化数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。对于大多数的企业来说,这可以说是最为理想的存储媒介了。

2. 什么是分布式文件

分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。

分布式文件系统是面对互联网的需求而产生,互联网时代对海量数据如何存储?靠简单的增加硬盘的个数已经满足不了我们的要求,因为硬盘传输速度有限但是数据在急剧增长,另外我们还需要做好数据备份、数据安全等。

3. 什么是MinIO

MinIO 是一款基于 Go 语言的高性能、可扩展、云原生支持、操作简单、开源的分布式对象存储产品。基于 Apache License v2.0 开源协议,虽然轻量,却拥有着不错的性能。它兼容亚马逊S3云存储服务接口。可以很简单的和其他应用结合使用,例如 NodeJS、Redis、MySQL 等。

在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO 产品。

官网:www.minio.org.cn/

4.MinIO 特点

  • 高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GG/s的写速率

  • 可扩容:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心

  • 云原生:容器化、基于K8S的编排、多租户支持

  • Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。

  • 可对接后端存储: 除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。

  • SDK支持: 基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持

  • Lambda计算: Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及Elasticsearch,Redis,Postgres和MySQL等数据库。

  • 有操作页面

  • 功能简单: 这一设计原则让MinIO不容易出错、更快启动

  • 支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据

上手使用

本篇文章将演示如何搭建一个MinIO 对象存储服务,演示直接使用我本地的 Windows 系统。

1. 下载启动

下载地址:https://min.io/download

直接下载 windows 版的minio.exe

我们再创建一个文件夹D:\minioData 作为文件数据存储的地方,

然后在minio.exe 文件夹下使用 cmd 命令启动

minio.exe server D:/minioData

image.png

此处启动也可以这样

minio.exe server D:/minioData/data0 D:/minioData/data1 D:/minioData/data2 http://192.168.1.201/D:/minioData
  • 这里面指定了4个分区,具体可以根据你的实际情况进行配置。可以四台主机各一个数据存放位置,也可以两台主机各两个存放位置。我这边是三个存放位置在一台主机上,第四个在另一台主机上。格式是 ip + 存放位置

启动成功后浏览器访问地址 http://localhost:9000

image.png

默认的用户名和密码在启动的时候就告诉你啦minioadmin/minioadmin

2. 上传文件

登录成功之后我们进入主页面

image.png

通过使用 MinIO 的网页端即可完成文件的上传下载功能,下面我们来演示下。

  • 新建一个存储桶 test

image.png

  • 创建好之后我们来给这个存储桶中上传张图片

image.png

  • 上传成功后,点击 share,取到一个地址

image.png

image.png

  • 浏览器访问这个地址,可以访问到这张图片

image.png

我们刚刚访问的这个地址只是一个临时地址,要想获取一个永久的访问路径,需要修改存储桶的访问策略,我们可以点击存储桶右上角的设置按钮来修改访问策略

image.png

Prefix*Access 有三种,一种只读、一种只写、一种可读可写,这里我们选择只读即可

保存之后我们就只需要通过拷贝链接中的前一串路径即可永久访问该文件 http://192.168.0.111:9000/test/wallhaven-dp2okl.jpg

image.png

是不是感觉搭建起来超级简单。

下一篇我们将要学习在 Java 项目中如何集成MinIO

纠删码(erasure code) 模式

在上面的MinIO 特点中有一条是支持纠删码,这里我们就对这个特点来验证一下。

1. 概念

MinIO 使用纠删码和校验和等特性保护数据免受硬件故障和静默数据损坏。使用最高级别的冗余,使用者可最多丢失多达一半(N/2)的驱动器,仍可以自动恢复数据。

纠删码是一种用来重建丢失或损坏数据的数学算法。MinIO 使用 Reed-Solomon 码将需要存储的对象切分为可变数据块和奇偶校验块。例如,在由 12 个驱动器构成的存储架构中,对象分片范围可以是 6 个数据块、6 个奇偶校验块到 10 个数据块、2 个奇偶校验块。

2. 验证

这次我们这样来启动 MinIO

minio.exe server D:/minioData/data0 D:/minioData/data1 D:/minioData/data2 D:/minioData/data3

image.png

在控制台上传文件后,你会发现上传目录下的文件是文件夹的形式

image.png

此时你就可以大胆手动删除 /minioData 目录下的 dataN(N 从0到3) 目录,只要删除的驱动(目录)个数小于 N/2,都可以保证文件被恢复(即:你删除了目录之后,过一会也会自动创建,无需人为干预)。

文章参考:minio原理和使用

PS:都看到这里了,点个赞吧,彦祖

补充

1、Linux 下启动minio

./minio server /data1&

2、修改minio 默认账号密码

直接修改环境变量的配置文件vim /etc/profile

exportMINIO_ACCESS_KEY=accesskey(自行设置)exportMINIO_SECRET_KEY=secretkey(自行设置)
  • 作者:程序猿秃头之路
  • 原文链接:https://blog.csdn.net/zhang33565417/article/details/122740612
    更新时间:2022-04-16 20:20:09