【博学谷学习记录】超强总结,用心分享 | 架构师 MinIO学习总结

news/2024/4/28 2:19:35/文章来源:https://blog.csdn.net/qq_49122165/article/details/130329718

文章目录

  • MinIO
  • 对象存储的概念
    • 计算机数据存储系统-架构模式
    • 对象存储的优势
    • 常见的对象存储系统/服务(Object Storage Service,OSS)
  • MinIO
    • 简介
    • 特点
    • 高级特性
    • 小结
  • MinIO部署
    • 基于 linux Binary 部署 MinIO Server
    • MinIO数据组织结构
    • MinIO Client
    • **基于 Docker 部署 MinIO Server**
    • 基于 Kubernetes 部署 MinIO Server
  • MinIO JAVA客户端使用
    • 业务系统中文件上传的基本流程
    • MinIO JAVA客户端使用要点
  • Minio的高级概念
    • 高级概念
    • 纠删码(erasure code /EC):纠删码是一种用以恢复 丢失和损坏数据的数学算法,也是一种编码技术
      • **基于单节点纠删码模式部署**
    • 位衰减
    • 高可用

MinIO

对象存储的概念

计算机数据存储系统-架构模式

  1. 文件存储:文件存储将数据存储和整理到文件夹中,类似于保存在办公室纸质文件系统中的物理文件,如果需要某个文件中的信息,则需要知道哪个房间、文件柜、抽屉、文件夹和文件名称。文件存储使用这种分层目录结构将数据及元数据以文件的形式进行存储。
  2. 块存储:块存储在文件存储的基础上提升了性能,它将文件拆分为多个单独的块并单独存储。块存储系统会为每个原始数据块分配一个唯一标识符,当您需要访问完整的文件时,系统将使用唯一标识符将数据块重组为完整的文件。块存储不需要单一的数据路径,因此您可以将其存储在最方便的位置,并且在需要时仍然能够快速检索。
  3. 对象存储:它将数据划分为对象并存储在结构扁平的数据环境中【存储池】,对象包含全部数据、唯一标识符和详细元数据,对象存储最适合非结构化数据的静态存储【一次写入多次读取】;对象存储不需要目录、文件夹和其他复杂的分层结构,但却不适合用来存储不断变化的动态数据,因为修改动作需要重写整个对象。

对象存储的优势

  1. 可伸缩性强:可以轻松横向扩容对象存储的容量【只需添加存储设备即可】
  2. 复杂性低:对象存储没有文件夹或目录,也就不具有层次结构系统的大多数复杂性
  3. 易于搜索:元数据是对象的一部分,使您无需借助单独的应用即可轻松搜索和导航
  4. 具有弹性:对象存储可以自动复制数据并存储在多个设备和多个地理位置。这有助于防范服务中断和数据丢失,并可为灾难恢复策略提供支持
  5. 成本效益高:对象存储在设计时考虑了成本因素,与基于文件和块的系统相比,能够以更低的价格存储大量数据

常见的对象存储系统/服务(Object Storage Service,OSS)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-paYkPZMA-1682252559144)(minIO记录.assets/image-20230420212035489.png)]

MinIO

简介

  1. Minio是一个轻量级的、开源的、高性能的对象存储服务,非常适合存储大容量非结构化的数据,比如:图片,视频,日志文件,备份数据,容器/虚拟机镜像等,单个对象大小支持从几KB到5T不等。
  2. 兼容亚马逊 S3 API【全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准】
  3. 基于Golang语言开发,主要作者Anand Babu Periasamy是GlusterFS 的初始开发者,minio在设计上汲取了GlusterFS 的相关经验与教训,系统复杂度上作了大量简化,足够轻量。

github项目

官方站点

中文站点

特点

  1. 简单:简单性是构建百万兆次级数据基础设施的基础,无论是在技术上还是在操作上。MinIO使用和部署非常简单,可以让您在最快的时间内实现下载到生产环境进行部署
  2. 高性能:MinIO 自称是世界上最快的对象存储,没有之一。在 32 个 NVMe 驱动器节点和 100Gb网络上发布的GET/PUT 结果超过 325 GiB/秒和 165 GiB/秒
  3. Kubernetes原生支持:通过原生 Kubernetes 运营商集成,MinIO 支持公共云、私有云和边缘云上所有主要的Kubernetes 发行版 minio可以让你快速构建自己的云存储服务

高级特性

  1. 远程备份/灾难恢复:提供了主动/被动跨区域的数据复制,可用于灾难恢复
  2. 加密:MinIO 对存储在磁盘上和通过网络传输的数据进行加密。 加密方案支持现代行业标准加密算法(例如AES-256-GCM、ChaCha20-Poly1305 和 AES-CBC),加密粒度为对象级加密,并兼容S3 加密语义
  3. 自动化数据管理接口:提供了命令行界面(CLI)和应用程序编程界面(API),以及直观的控制台图形用户界面(GUI)
  4. 对象不变:MinIO能保护数据不被删除(意外或故意),MinIO 支持对对象锁定、保留、治理和合规性, 对象锁定可以与 MinIO 版本控制结合使用,以确保数据不变性并消除数据篡改或破坏的风险
  5. 完善的身份和访问机制:有完善的对象存储身份管理和外部身份控制,以及对象存储访问管理机制
  6. 可扩展性:具备可伸缩性,支持横向扩展

小结

  1. 开源、轻量、高性能的对象存储服务,适合存储大量的非结构化数据
  2. 兼容S3 API,原生支持Kubernetes,
  3. 提供了灾备、数据加密、数据备份、安全控制、数据管理等特性
  4. 扩展性强,易于使用

MinIO部署

基于 linux Binary 部署 MinIO Server

参考文档:
https://github.com/minio/minio#gnulinux
http://www.minio.org.cn/docs/minio/linux/index.html
http://www.minio.org.cn/docs/minio/linux/reference/minio-server/minio-server.html

MinIO数据组织结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G4F5ov29-1682252559145)(minIO记录.assets/image-20230420213200990.png)]

租户:用以隔离存储资源【一个minio实例代表了一个租户】
Bucket (桶):若干个对象的逻辑抽象,是盛装对象的容器
用户:在租户下面创建的用于访问不同桶的账号

MinIO Client

mc:minio 命令行工具,提供了UNIX命令(如ls、cat、cp、mv和diff)的现代替代方案,同时支持本地MinIO服务和Amazon s3兼容的云存储服务

参考:http://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html#command-quick-reference

mc部署参考文档:http://www.minio.org.cn/docs/minio/linux/reference/minio-mc.html#quickstart

基于 Docker 部署 MinIO Server

参考文档:
http://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html

基于 Kubernetes 部署 MinIO Server

参考文档:
http://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html

MinIO JAVA客户端使用

一般:可以以 “应用” 来划分 桶 (主用户、订单)
在每个应用下,可以进行folder的划分(比如:图片、CSS、JS)

1.参考官方站点(中文翻译站点同步有延迟):https://min.io/docs/minio/linux/developers/minio-drivers.html
2.使用如下maven坐标导入

<dependency><groupId>io.minio</groupId><artifactId>minio</artifactId><version>8.5.2</version>
</dependency>

3.基于官方Quickstart Guide:https://min.io/docs/minio/linux/developers/java/minio-java.html#minio-java-quickstart
4.Java Client API Reference:https://min.io/docs/minio/linux/developers/java/API.html

业务系统中文件上传的基本流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xnoCv5Ts-1682252559145)(minIO记录.assets/image-20230420213507483.png)]

MinIO JAVA客户端使用要点

1.业务系统中是前端先跟本地系统对接,由后端服务对接MinIO
2.对应API的使用参考官方站点:

JAVA API官方文档

Minio的高级概念

高级概念

Drive

可理解为minio的数据存储磁盘,minio server /disk1/data /disk2/data

Set

一组Drive的集合,有如下特点:

​ 一个集群划分为一个或多个Set

​ 一个 SET 中的 Drive 尽可能分布在不同的节点上

​ 一个 Set 包含的 Drive 数量是固定的,默认由系统根据集群规模自动计算得出

​ 一个对象存储在一个Set上

纠删码(erasure code /EC):纠删码是一种用以恢复 丢失和损坏数据的数学算法,也是一种编码技术

  1. 简单来说就是:纠删码可通过将 n 份原始数据,增加 m 份校验数据,并能通过 n+m 份中的任意 n 份数据,还原为原始数据。即如果有任意小于等于 m 份的数据失效,仍然能通过剩下的数据还原出来
  2. Minio 采用 Reed-Solomon code(里德-所罗门类纠删码) 将对象拆分成 N/2 数据和 N/2 奇偶校验块。 这就意味着如果是 12 块盘,一个对象会被分成 6 个数据块、6 个奇偶校验块,你可以丢失任意 6 块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复

Erasure Sets:一组Drive,MinIO 将纠删码对象写入其中。MinIO 在erasure set 上随机且均匀地分布给定对象的数据和奇偶校验块
1.MinIO 根据Server Pool中节点和驱动器的总数自动计算Erasure Sets的数量和大小,minio支持最小为2,最大为16,一经确定无法修改

基于单节点纠删码模式部署

参考文档:
https://min.io/docs/minio/linux/operations/install-deploy-manage/deploy-minio-single-node-multi-drive.html

位衰减

​ 位衰减(bit rot):又被称为数据腐化 Data Rot、无声数据损坏 Silent Data Corruption ,是目前硬盘数据的一种严重数据丢失问题。硬盘上的数据可能会神不知鬼不觉就损坏了,也没有什么错误日志。正所谓明枪易躲,暗箭难防,这种背地里犯的错比硬盘直接故障还危险。 所以 Minio 纠删码采用了HighwayHash 基于哈希的校验和来防范位衰减

高可用

​ 单机 Minio 服务存在单点故障,相反,如果是一个 N 节点的分布式 Minio , 只要有 N/2 节点在线,你的数据就是安全的。不过你需要至少有 N/2+1 个节点来创建新的对象

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ISO-27145故障诊断说明

ISO-27145故障诊断说明 2.1 27145目录说明 ISO27145-1: 这里边介绍的是一般信息和用例定义&#xff1b; ISO27145-2: 这里边介绍的是与排放相关的通用数据规则&#xff0c;用于查询&#xff1b; ISO27145-3: 这里边主要介绍了支持的服务 12服务 14服务 19服务 22服务 31服务&…

「C/C++」C/C++强制类型转换

博客主页&#xff1a;何曾参静谧的博客 文章专栏&#xff1a;「C/C」C/C学习 目录 相关术语C语言中的强制类型转换C中的强制类型转换static_castdynamic_castreinterpret_castconst_cast 注意事项 相关术语 强制类型转换&#xff1a;是指将一个数据类型强制转换为另一个数据类型…

Python初学小知识(十四):数据分析处理库Pandas

Python初学小知识&#xff08;十四&#xff09;&#xff1a;数据分析处理库Pandas 十八 Pandas1 文件读取1.1 读取csv1.2 读取txt1.3 读取excel&#xff08;xlsx&#xff09; 2 内容读取2.1 读取行2.2 读取列 3 数据处理3.1 加减乘除3.1.1 列 与 元素3.1.2 列 与 列 3.2 最值、…

GoJS Beginner Tutorial #1

1.关系图&#xff1a; gojs部件由一个或多个gojs面板组成&#xff0c;这些面板包含和组织各种gojs图形对象 通常使用go.GraphObject.make创建一个GraphObject&#xff0c;我们通过使用$符号变量缩短了该函数的名称 这个函数的第一个参数&#xff0c;往往是你想要制作的GraphOb…

Centos切换jdk版本

先安装了jdk1.8的版本&#xff0c;需要使用jdk17的版本 1.先安装jdk17&#xff0c;再配置环境变量&#xff1a; vim ~/.bashrc 2.在最后一行添加 ##这个添加的就是路径&#xff0c;一定要和自己jdk安装的路径是一致的 export JAVA_HOME/usr/lib/jvm/java-8-openjdk-amd64 3.然…

docker容器:docker镜像的三种创建方法及dockerfile案例

目录 一、基于现有镜像创建 1、创建启动镜像 2、生成新镜像 二、基于本地模板创建 1、OPENVZ 下载模板 2、导入容器生成镜像 三、基于dockerfile创建 1、dockerfile结构及分层 2、联合文件系统 3、docker镜像加载原理 4、dockerfile操作常用的指令 (1)FROM指令 (…

响应式布局

文章目录 响应式布局概述viewport 视口CSS 常用单位CSS 媒体查询语法直接使用使用style标签使用link引入 自适应布局栅格系统响应式布局案例rem媒体查询 响应式布局 概述 响应式布局是指网站或应用程序可以自适应不同的屏幕尺寸和设备类型&#xff0c;简而言之就是一个网站兼…

Sentinel同时配置fallback和blockHandler的问题

Spring Cloud在使用Sentinel进行服务降级和熔断时&#xff0c;如果同时配置了fallback和blockHandler&#xff0c;则在服务熔断后&#xff0c;抛出的BlockException不会再fallback逻辑中执行&#xff0c;而是在blockHandler逻辑中执行。 首先来看只配置了fallback的情况&#x…

常用的设计模式(单例模式、工厂模式等)

1.单例模式 概述: 在有些系统中&#xff0c;为了节省内存资源、保证数据内容的一致性&#xff0c;对某些类要求只能创建一个实例&#xff0c;这就是所谓的单例模式. 例如&#xff0c;Windows 中只能打开一个任务管理器&#xff0c;这样可以避免因打开多个任务管理器窗口而造…

战争教育策略游戏 MiracleGame,开启新阶段重塑生态和玩法

香港 Web3 区块链周刚刚在一片喧嚣中结束。各路大V、KOL 们的 report 都对 GameFi 的前景非常自信。2021-2023年期间&#xff0c;大量资金涌入 GameFi 赛道&#xff0c;GameFi 一旦爆发将会是现象级的出圈事件。 MiracleGame 是一款基于 BNB Chain 构建的英雄和元神主题的战争教…

HNCTF-re部分复现

目录 [HNCTF 2022 WEEK3]Help_Me! [HNCTF 2022 WEEK3]Whats 1n DLL? [HNCTF 2022 WEEK4]ez_maze 这几天在做HNCTF的week3&#xff0c;week4部分&#xff0c;学到了一些不知道的没接触过的东西&#xff0c;所以记录一下 [HNCTF 2022 WEEK3]Help_Me! 题目下载&#xff1a;下…

[自注意力神经网络]Mask Transfiner网络-论文解读

本文为CVPR2022的论文。国际惯例&#xff0c;先贴出原文和源码&#xff1a; 原论文地址https://arxiv.org/pdf/2111.13673.pdf源码地址https://github.com/SysCV/transfiner 一、概述 传统的Two-Stage网络&#xff0c;如Mask R-CNN虽然在实例分割上取得了较好的效果&#xff…

ARM busybox 的移植实战2

一、busybox 源码分析1 1、源码目录梳理 2、整个程序入口的确认 (1) 分析一个程序&#xff0c;不管多庞大还是小&#xff0c;最好的路线都是 按照程序运行时的逻辑顺序来。所以找到一个程序的入口至关重要。 (2) 学 C 语言的时候都知道&#xff0c;程序的主函数 main 函数就是…

【JUC高并发编程】—— 初见JUC

一、JUC 概述 什么是JUC JUC 是 Java并发编程的缩写&#xff0c;指的是 Java.util.concurrent 即Java工具集下的并发编程库 【说白了就是处理线程的工具包】 JUC提供了一套并发编程工具&#xff0c;这些工具是Java 5以后引入的&#xff0c;使得Java开发者可以更加方便地编写…

【系统集成项目管理工程师】项目干系人管理

&#x1f4a5;十大知识领域&#xff1a;项目干系人管理 项目干系人管理包括以下 4 个过程: 识别干系人规划干系人管理管理干系人参与控制干系人参与 一、识别干系人 输入工具与技术输出项目章程采购文件事业环境因素组织过程资产组织相关会议专家判断干系人分析干系人登记册 …

ansible自动运维——ansible使用临时命令通过模块来执行任务

大家好&#xff0c;这里是天亮之前ict&#xff0c;本人网络工程大三在读小学生&#xff0c;拥有锐捷的ie和红帽的ce认证。每天更新一个linux进阶的小知识&#xff0c;希望能提高自己的技术的同时&#xff0c;也可以帮助到大家 另外其它专栏请关注&#xff1a; 锐捷数通实验&…

为什么使用了索引,查询还是慢?

&#x1f3c6;今日学习目标&#xff1a; &#x1f340;为什么使用了索引&#xff0c;查询还是慢&#xff1f; ✅创作者&#xff1a;林在闪闪发光 ⏰预计时间&#xff1a;30分钟 &#x1f389;个人主页&#xff1a;林在闪闪发光的个人主页 &#x1f341;林在闪闪发光的个人社区&…

linux 安装 oracle 11g

linux 安装 oracle 11g 1、下载oracle 11g (11.2.0.1.0)1.1、Oracle Database 11.2.0.1.01.2、Oracle Database Grid Infrastructure 11.2.0.1.01.3、客户端 2、安装文档3、安装前准备3.1、建立用户和用户组3.2、sysctl3.3、security limits3.4、其他设置3.5、创建安装目录3.6、…

校招又临近了,怎么在面试中应对设计模式相关问题呢?

夏天开始了&#xff0c;那么夏天结束时的毕业季也不远了。毕业是个伤感、期待而又略带残酷的时节&#xff0c;就像蜜桃无论成熟与否都会在这个时间被采摘&#xff0c;如果毫无准备就踏入社会&#xff0c;就会……马上变成低级社畜。所以说还是要早点为了毕业找工作做点准备&…

Jetson nano B01学习笔记 -- 系统环境配置以及ROS安装

文章目录 一、Jetson nano 简介二、 系统环境配置1、系统镜像烧录2、CUDA环境配置 三、 ROS安装和环境配置总结 一、Jetson nano 简介 Jetson Nano是一款体积小巧、功能强大的人工智能嵌入式开发板&#xff0c;于2019年3月由英伟达推出。它预装Ubuntu 18.04LTS系统&#xff0c;…