【学习笔记】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.rhkb.cn/news/157887.html

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

相关文章

HTML-注册页面

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title> </head> <body><from action"#" method"get"><table border"1" align&q…

估算总体标准差的极差均值估计法sigma = R/d2

总体标准差的估算值可以通过将平均极差除以合适的常数因子d2来计算。这个估算方法是用于估算总体标准差的一种常见方法&#xff0c;尤其在质量控制和过程监控中经常使用。 总体标准差的估算值 (平均极差) / d2 其中&#xff1a; "总体标准差的估算值" 表示用极差…

《Python基础教程》专栏总结篇

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

有关范数的学习笔记

向量的【范数】&#xff1a;模长的推广&#xff0c;柯西不等式_哔哩哔哩_bilibili 模长 范数 这里UP主给了说明 点赞 范数理解&#xff08;0范数&#xff0c;1范数&#xff0c;2范数&#xff09;_一阶范数-CSDN博客 出租车/曼哈顿范数 det()行列式 正定矩阵&#xff08;Posit…

【iOS】Mac M1安装iPhone及iPad的app时设置问题

【iOS】Mac M1安装iPhone及iPad的app时设置问题 简介一&#xff0c;设置问题二&#xff0c;适配问题 简介 由于 苹果M1芯片的Mac可用安装iPhone以及iPad应用&#xff0c;因为开发者并没有适配Mac&#xff0c;因此产生了很多奇怪问题&#xff0c;这里总结归纳Mac M1安装iPhone和…

机器学习基础之《回归与聚类算法(2)—欠拟合与过拟合》

一、背景 1、上一篇说正规方程的时候&#xff0c;实际情况中使用很少&#xff0c;主要原因它不能解决过拟合。 2、训练集上表现的好&#xff0c;测试集上表现不好—过拟合 二、欠拟合和过拟合 1、欠拟合 训练集&#xff1a;有3个训练集&#xff0c;告诉机器都是天鹅 机器学…

力扣164最大间距

1.前言 因为昨天写了一个基数排序&#xff0c;今天我来写一道用基数排序实现的题解&#xff0c;希望可以帮助你理解基数排序。 这个题本身不难&#xff0c;就是线性时间和线性额外空间(O(n))的算法&#xff0c;有点难实现 基数排序的时间复杂度是O(d*(nradix))&#xff0c;其中…

如何快速区分GPT-3.5 与GPT-4?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

数学术语之源——“齐次(homogeneity)”的含义

1. “homogeneous”的词源 “homogeneous”源自1640年代&#xff0c;来自中古拉丁词“homogeneus”&#xff0c;这个词又源自古希腊词“homogenes”&#xff0c;词义为“of the same kind(关于同一种类的)”&#xff0c;由“homos”(词义“same(相同的)”&#xff0c;参见“ho…

用wpf替代winform 解决PLC数据量过大页面卡顿的问题

winform 由于不是数据驱动, 页面想刷新数据必须刷新控件, wpf则不用. 可以利用wpf 的数据绑定和IOC, 页面中的消息传递, itemscontrol 实现大量数据刷新, 上位机页面不卡顿 跨页面传值, 可以用两种方法: Toolkit.Mvvm中的Message和IOC. 下面是代码: using Microsoft.Extensio…

allure测试报告生成逻辑--解决在Jenkins里打开allure报告页面后空白显示无数据问题(以window环境为例)

前言 相信大家在用Jenkins持续集成+ant自动构建+jmeter接口测试+pytest代码.xml文件转化+allure测试报告为一体的接口自动化测试构建过程中,都会遇到Jenkins里打开allure报告页面后空白显示无数据问题这一现象级问题,今天Darren洋就给大家分享一下如何讲讲allure测试报告生成…

【(数据结构) —— 顺序表的应用-通讯录的实现】

&#xff08;数据结构&#xff09;—— 顺序表的应用-通讯录的实现 一.通讯录的功能介绍1.基于动态顺序表实现通讯录(1). 功能要求(2).重要思考 二. 通讯录的代码实现1.通讯录的底层结构(顺序表)(1)思路展示(2)底层代码实现(顺序表&#xff09; 2.通讯录上层代码实现(通讯录结构…

angular项目指定端口,实现局域网内ip访问

直接修改package.json文件 "dev": "ng serve --host 0.0.0.0 --port 8080"终端运行npm run dev启动项目。 这里就指定了使用8080端口运行项目&#xff0c;同时局域网内的其他电脑可以通过访问运行项目主机的ip来访问项目 例如项目运行在ip地址为192.168.2…

ChatGPT角色扮演教程,Prompt词分享

使用指南 1、可直复制使用 2、可以前往已经添加好Prompt预设的AI系统测试使用 https://ai.idcyli.comhttps://ai.idcyli.com 雅思写作考官 我希望你假定自己是雅思写作考官&#xff0c;根据雅思评判标准&#xff0c;按我给你的雅思考题和对应答案给我评分&#xff0c;并且按…

[科研琐事] 安装服务器到机柜的二三事

1. 机柜参数 宽度&#xff1a;一般机器都是符合的&#xff1b; 深度&#xff1a;对应服务器最长的那个边&#xff1b; 厚度&#xff08;高度&#xff09;&#xff1a;1/2/3/4U&#xff0c;就是机柜上写的刻度数字&#xff0c;1U1.75英寸。 1U4.45cm 2U4.45cm * 2 3U4.45cm * …

【踩坑】hive脚本笛卡尔积严重降低查询效率问题

前一阵子查看我们公司的大数据平台的离线脚本运行情况, 结果发现有一个任务居然跑了一天多, 要知道这还只是几千万量级的表, 且这个任务是每天需要执行的 于是我把hive脚本捞出来看了下, 发现无非多join了几个复杂的子查询, 应该不至于这么久, 包括我又检查了是不是没有加上每…

微信小程序 在bindscroll事件中监听scroll-view滚动到底

scroll-view其实提供了一个 bindscrolltolower 事件 这个事件的作用是直接监听scroll-view滚动到底部 但是 总有不太一样的情况 公司的项目 scroll-view 内部 最下面有一个 类名叫 bottombj 的元素 我希望 滚动到这个 bottombj 上面的时候就开始加载滚动分页 简单说 bottombj这…

dockerfile 搭建lnmp+wordpress,docker-compose搭建lnmp+wordpress

目录 dockerfile 搭建lnmpwordpress 部署nginx&#xff08;容器IP 为 172.18.0.10&#xff09; 部署mysql&#xff08;容器IP 为 172.18.0.20&#xff09; 部署php&#xff08;容器IP 为 172.18.0.30&#xff09; docker-compose搭建lnmpwordpress dockerfile 搭建lnmpword…

TCP/IP(十一)TCP的连接管理(八)socket网络编程

一 socket网络编程 socket 基本操作函数 bind、listen、connect、accept、recv、send、select、close 说明: 本文需要C语言、syscall系统调用、OS 操作系统基础理论,如果不了解可以暂时跳过目标&#xff1a; 知道对应库函数的更底层机制思考&#xff1a; socket函数与FIN、A…

VSCode怎么创建Java项目

首先安装好Java的开发环境&#xff1a;JDK在VSCode中安装适用于Java开发的插件。打开VSCode&#xff0c;点击左侧的扩展图标&#xff0c;搜索并安装Java Extension Pack插件。等待安装完成后&#xff0c;重启VSCode生效。创建一个新的Java项目&#xff0c;按下Ctrl Shift P&a…