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

news2025/2/27 14:13:41

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/minio
    command: server --console-address ":9090"
    container_name: minio
    environment:
      MINIO_CONFIG_ENV_FILE: /etc/config.env
    ports:
      - "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-me

MINIO_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/mc

chmod +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.coloradmin.cn/o/1087369.html

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

相关文章

培训考试系统如何满足个性化学习需求?

随着科技的不断发展&#xff0c;培训考试系统逐渐成为满足个性化学习需求的重要工具。个性化学习强调根据每个学员的特点和需求&#xff0c;量身定制学习内容和方式&#xff0c;提高学习效果和学习兴趣。 培训考试系统通过个性化内容推荐满足学员的学习需求。系统会根据学员的…

SELECT COUNT(*)会不会导致全表扫描引起慢查询

SELECT COUNT(*)会不会导致全表扫描引起慢查询呢&#xff1f; SELECT COUNT(*) FROM SomeTable 网上有一种说法&#xff0c;针对无 where_clause 的 COUNT(*)&#xff0c;MySQL 是有优化的&#xff0c;优化器会选择成本最小的辅助索引查询计数&#xff0c;其实反而性能最高&…

支付宝企业转账到个人账号[新接口版](php源码,亲测)

前言 之前专栏写过一篇企业支付宝转账到个人的文章,里面用的是老接口,官方已经不再维护。最近有人找到帮忙使用新接口实现这个功能,看了下文档以及官方的sdk,为了这一个接口,我还要去下载官方庞大的sdk,而且php低版本的还不支持composer,就很离谱,经过一天的研究,把单…

科技为饮食带来创新,看AI如何打造智能营养时代

在当今社会&#xff0c;快节奏的生活方式、便捷的食品选择以及现代科技的快速发展正深刻地重塑着我们对健康的认知和实践&#xff0c;它已经不再仅仅是一个话题&#xff0c;而是一个备受关注的社会焦点。在这个纷繁复杂的交汇点上&#xff0c;AI技术的介入为我们开辟了前所未有…

项目管理包含哪些内容?

做好项目管理不是一件容易的事儿&#xff0c;只有掌握了正确的技巧&#xff0c;才能事半功倍地完成项目。 下面就按照项目管理的流程来讲一讲项目管理的主要内容包括哪些、如何做好项目管理。 项目管理是指运用系统的理论方法&#xff0c;在有限的条件和资源下&#xff0c;对…

Google SGE 正在添加人工智能图像生成器,现已推出:从搜索中的生成式 AI 中获取灵感的新方法

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

学信息系统项目管理师第4版系列25_项目绩效域(上)

1. 绩效评估是指以员工与组织的共同发展为目标&#xff0c;通过正式的结构化的制度或方法&#xff0c;评价和测量在一定的周期内团队或员工个人的工作行为和工作成果&#xff0c;全面了解员工的发展潜力 1.1. 【高23上选13】 2. 干系人绩效域 2.1. 涉及与干系人相关的活动和…

react native app开发环境搭建

Reactjs是一个响应式的、多场景的web前后端应用开发框架&#xff0c;react native是一种使用reactjs开发框架与native移动设备应用开发技术混合开发的技术&#xff0c;使用react native技术开发出的应用支持跨设备、多终端&#xff0c;本文主要描述react native开发环境搭建。 …

1.Cesium For Unity插件安装

1.Unity安装 先安装Unity Hub,然后在里面安装Unity。 2.新建工程 新建项目 选择项目类型 3. 导入Cesium包 打开新建的项目&#xff0c;在菜单栏选择Edit->Project Settings->Package Manager.并添加Cesium的包信息。 Name: Cesium URL: https://unity.pkg.cesium.com Sco…

CRM系统:快速实现外勤出差人员远程访问企业提升工作效率!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 快速实现外勤出差人员远程访问企业CRM系统前言1. 无需公网IP&#xff0c;高效低成本实现CRM系统远程访问1.1 下…

推荐5款小众软件,感兴趣自行下载

​ 今天推荐5款十分小众的软件&#xff0c;知道的人不多&#xff0c;但是每个都是非常非常好用的&#xff0c;有兴趣的小伙伴可以自行搜索下载。 1.重复文件清理——Duplicate Cleaner ​ Duplicate Cleaner 是一款专业的重复文件清理工具&#xff0c;可以快速扫描电脑上的重…

【深度学习】DDPM,Diffusion,概率扩散去噪生成模型,原理解读

看过来看过去&#xff0c;唯有此up主&#xff0c;非常牛&#xff1a; Video Explaination(Chinese) 1. DDPM Introduction q q q - 一个固定&#xff08;或预定义&#xff09;的正向扩散过程&#xff0c;逐渐向图像添加高斯噪声&#xff0c;直到最终得到纯噪声。 p θ p_θ p…

JavaScript基础入门

javaScript基础知识 $的作用 如果在jquery框架里面的话它代表jquery本身。 其它时候它只是一个变量名&#xff0c;仅此而已。 比如 var $ function(id) { return document.getElementById(id); }; 那么现在 就代表一个函数了&#xff0c;直接 就代表一个函数了&#xff0c;直…

centos下安装elasticsearch-head

1、安装npm sudo yum install npm 2、下载elasticsearch-head cd /home/packages sudo git clone https://github.com/mobz/elasticsearch-head.git 3、将npm镜像换为国内镜像 npm config set registry http://registry.npm.taobao.org/ 4、安装phantomjs sudo npm install p…

亚马逊英国儿童玩具合规政策合规标准是什么?如何办理?

亚马逊儿童玩具合规政策更新 重点 名称 日期 政策实施日期 2023年8月16日 产品下架日期 2023年10月15日 儿童玩具 英国 01 本政策适用的儿童玩具 02 亚马逊儿童玩具政策 03 办理流程 本政策适用的儿童玩具 儿童玩具是指供 14 岁或以下儿童在学习或玩耍时使用的商…

第14章总结:lambda表达式与处理

14.1&#xff1a; lambada表达式 14.1.1&#xff1a;lambada表达式简介 无参数 package fourteen; interface SayhHi{ String say();//抽象方法接口 } public class NoParamDemo { public static void main(String[] args) { //无参数 …

JMeter三种常用的逻辑控制器

一. 如果&#xff08;if&#xff09;控制器 1.1 使用js语法来判断&#xff1a; ## 1.2 使用jexl3函数来判断性能好&#xff1a; 二. 循环控制器 三. ForEach控制器 ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用&#xff0c;其在用户自定义变量或者从正…

C++ (Chapter 2)

C(二) 1.缺省参数 在C中,在函数定义的时候,可以为形参指定一个默认值,也称作缺省值.如果在调用这个函数时没有传参,那么函数在执行的时候就采用该实参的缺省值,否则使用实参的值. 例如: #include<iostream> using namespace std; void Add(int x, int y 10) {cout &…

结合源码聊一聊为何线上RocketMQ偶尔出现system busy

这里是weihubeats,觉得文章不错可以关注公众号小奏技术&#xff0c;文章首发。拒绝营销号&#xff0c;拒绝标题党 RocketMQ 版本 5.1.0 背景 继之前研究过的RocketMQ发送消息还有这种坑&#xff1f;遇到SYSTEM_BUSY不重试&#xff1f; 今天我们来分析分析RocketMQ什么情况下…

从概念到现实:ChatGPT 和 Midjourney 的设计之旅

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 在现代技术的世界中&…