【学习笔记】minIO分布式文件服务系统

MinIO

一、概述

1.1 minIO是什么?

MinIO是专门为海量数据存储、人工智能、大数据分析而设计的对象存储系统。(早前流行的还有FastDFS)

据官方介绍,单个对象最大可存储5T,非常适合存储海量图片、视频、日志文件、备份数据和容器、虚拟镜像等。

  • 采用golang语言编译
  • 客户端和用户端交互采用http和https用户协议

1.2 为什么选择minIO?

  • 安装部署简单
  • 自带UI界面,操作简单,开箱即用
  • 性能优秀,对象读写速度极快
  • 支持云原生容器化部署
  • 支持全部主流的SDK支持,java py等
  • 兼容亚马逊S3 API(便于后续继续迁移到更大的云厂商
  • 官方文档很完整

1.3 基础概念

1.3.1 Object 存储对象

存储到minIO的基本对象,包括文件、字节流、任何类型…

1.3.2 Buckets 桶

对象和关联配置的分组。

  • 不同的项目可以使用Bucket进行区分
  • 每个项目中不同的功模块,还可以在项目内部创建不同的目录
1.3.3 cluster 集群

汇集到单个存储资源中的一组驱动器和一个或多个 MinIO 服务器进程。See also: tenant.

1.3.4 Drive 驱动

即存储数据的磁盘,在minIO启动时,以参数的方式传入。

minIO所有的对象数据都会存储在Drive里。

1.3.5 Set 集合

即一组Drive的集合,分布式部署根据集群规模自动划分一个或多个Set——每个Set的Drive分布在不同位置。

  • 一个对象存储在一个Set上。
  • 一个集群又划分多个Set
  • 一个Set包含的Drive数量是固定的,默认由系统根据集群规模自动计算得出。
  • 一个Set中的Drive尽可能的分布在不同的节点上。
1.3.3 Console 控制台

用于与 MinIO 部署或租户交互的图形用户界面 (GUI)。

其他概念具体看官方文档https://www.minio.org.cn/docs/minio/container/glossary.html#

1.4 纠删码EC (Erasure Code)

官方解释 : MinIO 纠删码是一种数据冗余和可用性功能,允许 MinIO 部署在集群中多个驱动器或节点丢失的情况下自动动态重建对象

纠删码提供对象级修复,其开销显着低于 RAID 或复制等相邻技术。

简单理解:

minio存储文件会通过纠删码进行冗余。

比如一个原文件进行存储后,会经过纠删码优化(压缩)后存储到其他位置。

开启纠删码模式后,miniIO可以实现低冗余且磁盘损坏高容忍,标准且最高的数据冗余系数为2(即存一个1m的文件,实际占用空间为2m)。

具体的原理先不展开

二、MinIO基于Docker快速部署

这里参考的版本较早,接下来会结合官方最新的英文文档,记录部署流程。

英文:https://min.io/docs/

中文:https://www.minio.org.cn/docs/cn/minio/kubernetes/upstream/index.html

2.0 快速记录指令

# 镜像拉取
docker pull minio/minio;# 创建环境变量文件
touch /etc/default/minio
vi  /etc/default/minio# 输入账号密码
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=自己改密码MINIO_VOLUMES="/mnt/data"#保存# 启动容器
docker run                                   \-p 9001:9000 -p 9091:9090                     \-v 路径也要自己设置:/mnt/data                \-v /etc/default/minio:/etc/config.env         \-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"    \--name "minio"                          \minio/minio server --console-address ":9090"

docker-compose

version: '3'
services:minio_local1:image: minio/miniocommand: server --console-address ":9090"container_name: minioenvironment:MINIO_CONFIG_ENV_FILE: /etc/config.envports:- "9001:9000"- "9091:9090"volumes:- ./data:/mnt/data- /etc/default/minio:/etc/config.env

2.1 拉取最新的稳定版镜像

拉取镜像

docker pull minio/minio

2.2 创建环境变量文件

在 处创建环境变量文件/etc/default/minio

vi  /etc/default/minio

需要配置的内容如下:

MINIO_ROOT_USER=myminioadmin
MINIO_ROOT_PASSWORD=minio-secret-key-change-meMINIO_VOLUMES="/mnt/data"# MINIO_SERVER_URL="http://minio.example.net:9000"

基本的注释如下:

  1. MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 设置了 MinIO 服务器的 root 帐户。该用户拥有最高权限。
  2. 没有配置时默认值为:minioadmin:minioadmin。当然,官方推荐不使用默认值,无论任何环境。
  3. MINIO_VOLUMES 设置用于 MinIO 服务器的存储卷或路径。
  4. MINIO_SERVER_URL 设置与 MinIO 服务器一起使用的本地计算机的主机名。MinIO 假设您的网络控制层可以正确将此主机名解析为本地计算机
  5. 手动配置MINIO_SERVER_URL :请将该值替换为本地计算机的正确主机名和 MinIO 服务器的端口(否则默认为 9000)。

配置后如下:

image-20231012105133037

2.3 创建并运行容器

docker运行指令

docker run -dt                                  \-p 9001:9000 -p 9091:9090                     \-v PATH:/mnt/data                             \-v /etc/default/minio:/etc/config.env         \-e "MINIO_CONFIG_ENV_FILE=/etc/config.env"    \--name "minio_local1"                          \minio/minio server --console-address ":9090"

成功启动打印日志可以查看:

image-20231012105339661

访问9090端口,登陆控制台即可查看到:

image-20231012105535047

三、Minio Client 快速入门指南

MC和linux指令类似,为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案

ls       列出文件和文件夹。
mb       创建一个存储桶或一个文件夹。
cat      显示文件和对象内容。
pipe     将一个STDIN重定向到一个对象或者文件或者STDOUT。
share    生成用于共享的URL。
cp       拷贝文件和对象。
mirror   给存储桶和文件夹做镜像。
find     基于参数查找文件。
diff     对两个文件夹或者存储桶比较差异。
rm       删除文件和对象。
events   管理对象通知。
watch    监听文件和对象的事件。
policy   管理访问策略。
session  为cp命令管理保存的会话。
config   管理mc配置文件。
update   检查软件更新。
version  输出版本信息。

3.1 安装Minio Client

64-bit Intel

curl https://dl.min.io/client/mc/release/linux-amd64/mc \--create-dirs \-o $HOME/minio-binaries/mcchmod +x $HOME/minio-binaries/mc
export PATH=$PATH:$HOME/minio-binaries/mc --help

更多安装方式:https://min.io/docs/minio/linux/reference/minio-mc.html?ref=docs

3.2 配置MC,连接到minIO

# 查看当前已配置的服务器
mc config host ls# 添加服务器配置
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE># 举个例子 mc config host add minio-local1 http://localhost:9000 通行码 秘钥
  • 提示如下即可成功,输入指令测试

    image-20231012113813188

3.3 几个基础指令

mc的大部分指令都有很完整的案例,使用–help参数即可查看详细

3.3.1 上传下载文件
  • ls-查看目录
  • cp- 复制文件(下载文件,上传文件
  • mv 移动文件
  • rm 删除文件

举个例子

mc ls minio-local1/first-bucket
# 下载文件
mc cp  minio-local1/first-bucket/pom.xml  /home
# 上传文件
mc cp docker-compose.yml minio-local1/first-bucket

image-20231012114441835

image-20231012114629451

3.3.2 Bucket-桶管理
  • mb 创建桶

  • rb 删除桶

    • 要强制删除 需要加上参数 --force 【慎用!!】
  • du 查询使用情况

    image-20231012115419146

举个例子

# 创建几个桶
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket
Bucket created successfully `minio-local1/new-bucket`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket2
Bucket created successfully `minio-local1/new-bucket2`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket3
Bucket created successfully `minio-local1/new-bucket3`.
root@VM-12-17-ubuntu:/home/nexus3# mc mb minio-local1/new-bucket4
Bucket created successfully `minio-local1/new-bucket4`.# 删除几个桶root@VM-12-17-ubuntu:/home/nexus3# mc rb  minio-local1/new-bucket4
Removed `minio-local1/new-bucket4` successfully.
root@VM-12-17-ubuntu:/home/nexus3# mc rb  minio-local1/new-bucket2
Removed `minio-local1/new-bucket2` successfully.

3.99 MC Admin使用

MinIO 客户端 “mc” 命令行工具提供命令 用于在 MinIO 部署上执行管理任务的命令。

现在一般用界面代替,不详细看了

官方文档地址:https://min.io/docs/minio/linux/reference/minio-mc-admin.html

四、TODO 分布式集群部署

4.1、MinIO的EC码和文件存储结构

4.1.1 EC 快速理解

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。

即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。

4.1.2 什么是Erasure Code?

纠删码是一种恢复丢失和损坏数据的数学算法, Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。

这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复,是不是很NB,感兴趣的同学请翻墙google。

4.1.3 为什么EC有用?

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。

而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,回复速度很快,而RAID是作用在卷级别,数据恢复时间很长。

Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。

Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。

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

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

相关文章

java.sql.SQLFeatureNotSupportedException解决方法

使用MyBatis访问数据库查询数据时报错&#xff1a; Caused by: java.sql.SQLFeatureNotSupportedExceptionat com.alibaba.druid.pool.DruidPooledResultSet.getObject(DruidPooledResultSet.java:1771)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun…

03在命令行环境中创建Maven版的Java工程,了解pom.xml文件的结构,了解Java工程的目录结构并编写代码,执行Maven相关的构建命令

创建Maven版的Java工程 Maven工程的坐标 数学中使用x、y、z三个向量可以在空间中唯一的定位一个点, Maven中也可以使用groupId,artifactId,version三个向量在Maven的仓库中唯一的定位到一个jar包 groupId: 公司或组织域名的倒序, 通常也会加上项目名称代表公司或组织开发的一…

JDBC操作BLOB类型字段

JDBC中Statement接口本身不能直接操作BLOB数据类型 操作BLOB数据类型需要使用PreparedStatement或者CallableStatement(存储过程) 这里演示通过PreparedStatement操作数据库BLOB字段 设置最大传入字节 一般是4M 可以通过以下命令修改 set global max_allowed_packet1024*1…

网页在线打开PDF_网站中在线查看PDF之pdf.js

一、pdf.js简介 PDF.js 是一个使用 HTML5 构建的便携式文档格式查看器。 pdf.js 是社区驱动的&#xff0c;并由 Mozilla 支持。我们的目标是为解析和呈现 PDF 创建一个通用的、基于 Web 标准的平台。 pdf.js 将 PDF 文档转换为 HTML5 Canvas 元素&#xff0c;并使用 JavaScr…

Puppeteer结合测试工具jest使用(四)

Puppeteer结合测试工具jest使用&#xff08;四&#xff09; Puppeteer结合测试工具jest使用&#xff08;四&#xff09;一、简介二、与jest结合使用&#xff0c;集成到常规测试三、支持其他的几种四、总结 一、简介 Puppeteer是一个提供自动化控制Chrome或Chromium浏览器的Node…

MyBatis(中)

目录 1、动态sql&#xff1a; 1、if标签&#xff1a; 2、where标签&#xff1a; 3、 trim标签&#xff1a; 4、set标签&#xff1a; 5、choose when otherwise&#xff1a; 6、模糊查询的写法&#xff1a; 7、foreach标签&#xff1a; &#xff08;1&#xff09;批量删除…

施耐德Unity通过Modbus控制变频器

硬件设备 PLC: Unity Premium (CPU:TSX P57154) 通讯卡: TSX SCP 114 连接电缆: TSX SCP CM 4030 VSD: ATV 58 硬件连接 Unity Premium (CPU: TSX P57154)本身不带Modbus接口&#xff0c;因此&#xff0c;采用TSX SCP 114扩展一个Modbus接口。TSX SCP 114是一个RS-485接…

【已解决】No Python at ‘D:\Python\python.exe‘

起因&#xff0c;我把我的python解释器&#xff0c;重新移了个位置&#xff0c;导致我在Pycharm中的爬虫项目启动&#xff0c;结果出现这个问题。 然后&#xff0c;从网上查到了这篇博客: 【已解决】No Python at ‘D:\Python\python.exe‘-CSDN博客 但是&#xff0c;按照上述…

8.Covector Transformation Rules

上一节已知&#xff0c;任意的协向量都可以写成对偶基向量的线性组合&#xff0c;以及如何通过计算基向量穿过的协向量线来获得协向量分量&#xff0c;且看到 协向量分量 以 与向量分量 相反的方式进行变换。 现要在数学上确认协向量变换规则是什么。 第一件事&#xff1a;…

前端小案例 | 一个带切换的登录注册界面(静态)

文章目录 &#x1f4da;HTML&#x1f4da;CSS&#x1f4da;JS &#x1f4da;HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sc…

紫光同创FPGA实现UDP协议栈网络视频传输,基于YT8511和RTL8211,提供4套PDS工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案紫光同创FPGA精简版UDP方案紫光同创FPGA带ping功能UDP方案 3、设计思路框架OV7725摄像头配置及采集OV5640摄像头配置及采集UDP发送控制视频数据组包数据缓冲FIFOUDP协议栈详解RGMII转GMII动态ARPUDP协议IP地址、端口…

【深度学习 | Transformer】释放注意力的力量:探索深度学习中的 变形金刚,一文带你读通各个模块 —— Positional Encoding(一)

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

kettle应用-从数据库抽取数据到excel

本文介绍使用kettle从postgresql数据库中抽取数据到excel中。 首先&#xff0c;启动kettle 如果kettle部署在windows系统&#xff0c;双击运行spoon.bat或者在命令行运行spoon.bat 如果kettle部署在linux系统&#xff0c;需要执行如下命令启动 chmod x spoon.sh nohup ./sp…

视频监控系统/安防视频平台EasyCVR广场视频细节优化

安防视频监控系统/视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频汇聚平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;可实现视频监控直播、视频轮播、…

华为9.20笔试 复现

第一题 丢失报文的位置 思路&#xff1a;从数组最小索引开始遍历 #include <iostream> #include <vector> using namespace std; // 求最小索引值 int getMinIdx(vector<int> &arr) {int minidx 0;for (int i 0; i < arr.size(); i){if (arr[i] …

spring boot Rabbit高级教程

消息可靠性 生产者重试机制 首先第一种情况&#xff0c;就是生产者发送消息时&#xff0c;出现了网络故障&#xff0c;导致与MQ的连接中断。 为了解决这个问题&#xff0c;SpringAMQP提供的消息发送时的重试机制。即&#xff1a;当RabbitTemplate与MQ连接超时后&#xff0c;…

【git】500 Whoops, something went wrong on our end.

在访问公的的git 时出现了500错误提示. 500 Whoops, something went wrong on our end. 哎呀&#xff0c;我们这边出了问题。 TMD 出了什么问题了&#xff1f;&#xff1f;&#xff1f;一脸懵逼。 登录git 服务器。 查看git的状态。 命令&#xff1a; gitlab-ctl statu…

互联网Java工程师面试题·Java 总结篇·第一弹

目录 1、面向对象的特征有哪些方面&#xff1f; 2、访问修饰符 public,private,protected,以及不写&#xff08;默认&#xff09;时的区别&#xff1f; 3、String 是最基本的数据类型吗&#xff1f; 4、float f3.4;是否正确&#xff1f; 5、short s1 1; s1 s1 1;有错吗…

华为OD机考算法题:开心消消乐

题目部分 题目开心消消乐难度易题目说明给定一个 N 行 M 列的二维矩阵&#xff0c;矩阵中每个位置的数字取值为 0 或 1&#xff0c;矩阵示例如&#xff1a; 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1 现需要将矩阵中所有的 1 进行反转为 0&#xff0c;规则如下&#xff1a; 1) 当点击一…

动态规划算法(3)--0-1背包、石子合并、数字三角形

目录 一、0-1背包 1、概述 2、暴力枚举法 3、动态规划 二、石子合并问题 1、概述 2、动态规划 3、环形石子怎么办&#xff1f; 三、数字三角形问题 1、概述 2、递归 3、线性规划 四、租用游艇问题 一、0-1背包 1、概述 0-1背包&#xff1a;给定多种物品和一个固定…