当前位置: 首页 > news >正文

Minio入门系列【2】纠删码

1 纠删码

Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据

1.1 什么叫纠删码

纠删码是一种用于重建丢失或损坏数据的数学算法。

纠删码(erasure coding,EC)是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。
在这里插入图片描述
Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。 这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。

1.2 为什么纠删码有用?

纠删码的工作原理和RAID或者复制不同,像RAID6可以在损失两块盘的情况下不丢数据,而Minio纠删码可以在丢失一半的盘的情况下,仍可以保证数据安全。 而且Minio纠删码是作用在对象级别,可以一次恢复一个对象,而RAID是作用在卷级别,数据恢复时间很长。 Minio对每个对象单独编码,存储服务一经部署,通常情况下是不需要更换硬盘或者修复。Minio纠删码的设计目标是为了性能和尽可能的使用硬件加速。
在这里插入图片描述

1.3 什么是位衰减bit rot保护?

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

2 纠错码单机模式环境搭建

2.1 创建存储文件夹

这里直接在D盘下创建了四个文件夹,也可以在不同的盘符下创建。
在这里插入图片描述

2.2 启动

直接在启动命名最后添加多个存贮位置就可以了。

# 设置用户名
set MINIO_ROOT_USER=admin
# 设置密码(8位)
set MINIO_ROOT_PASSWORD=admin123
# 指定启动端口(未指定默认9000)、控制台端口90001及存储位置
minio.exe  server  --address :9000 --console-address :9001 D:\tools\minio\data01  D:\tools\minio\data02 D:\tools\minio\data03 D:\tools\minio\data04

启动命令后,控制台显示了警告信息,这里只配置了4个位置,所以两个以上损坏就会造成数据不可用。

警告:主机本地有2个以上的驱动器故障,将导致数据变得不可用。

在这里插入图片描述
Status显示当前4个驱动器在线,0个不在线。

登录后查看控制台,也能看到当前所有驱动器的状态。

在这里插入图片描述

2.3 测试

首先上传一张150K大小的照片。
在这里插入图片描述
查看硬盘中文件,发现这4个文件下都存在以上传文件名命名的文件夹,而不是直接的文件了,是以文件名创建文件夹,然后将文件分片为了文件块的元数据。
在这里插入图片描述
然后我们删除data03和data04文件夹,然后会发现,被删除的文件夹竟然马上自动恢复了过来。然后直接删除data03和data04文件夹下的元数据:
在这里插入图片描述
发现尽管删除了两份分片数据,依然可以正常下载。
在这里插入图片描述
接着再删了一个元数据,发现该文件就会找不到了,说明半数以上元数据丢失,这个文件就真的找不到了。。。
在这里插入图片描述

3 分布式MinIO

分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
在这里插入图片描述

3.1 分布式存储可靠性常用方法

分布式存储,很关键的点在于数据的可靠性,即保证数据的完整,不丢失,不损坏。只有在可靠性实现的前提下,才有了追求一致性、高可用、高性能的基础。而对于在存储领域,一般对于保证数据可靠性的方法主要有两类,一类是冗余法,一类是校验法。

3.1.1 冗余

冗余法最简单直接,即对存储的数据进行副本备份,当数据出现丢失,损坏,即可使用备份内容进行恢复,而副本备份的多少,决定了数据可靠性的高低。这其中会有成本的考量,副本数据越多,数据越可靠,但需要的设备就越多,成本就越高。可靠性是允许丢失其中一份数据。当前已有很多分布式系统是采用此种方式实现,如Hadoop的文件系统(3个副本),Redis的集群,MySQL的主备模式等。

3.1.2 校验

校验法即通过校验码的数学计算的方式,对出现丢失、损坏的数据进行校验、还原。注意,这里有两个作用,一个校验,通过对数据进行校验和( checksum )进行计算,可以检查数据是否完整,有无损坏或更改,在数据传输和保存时经常用到,如TCP协议;二是恢复还原,通过对数据结合校验码,通过数学计算,还原丢失或损坏的数据,可以在保证数据可靠的前提下,降低冗余,如单机硬盘存储中的RAID技术,纠删码(Erasure Code)技术等。MinlO采用的就是纠删码技术。

3.2 分布式Minio有什么好处?

在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。

3.2.1 数据保护

分布式Minio采用 纠删码来防范多个节点宕机和位衰减bit rot。

分布式Minio至少需要4个硬盘,使用分布式Minio自动引入了纠删码功能。

3.2.2 高可用

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

例如,一个16节点的Minio集群,每个节点16块硬盘,就算8台服務器宕机,这个集群仍然是可读的,不过你需要9台服務器才能写数据。

注意,只要遵守分布式Minio的限制,你可以组合不同的节点和每个节点几块硬盘。比如,你可以使用2个节点,每个节点4块硬盘,也可以使用4个节点,每个节点两块硬盘,诸如此类。

3.2.3 一致性

Minio在分布式和单机模式下,所有读写操作都严格遵守read-after-write一致性模型。

相关文章:

Minio入门系列【2】纠删码

1 纠删码 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据 1.1 什么叫纠删码 纠删码是一种用于重建丢失或损坏数据的数学算法。 纠删码(e…...

基于永磁同步发电机的风力发电系统研究(Simulink实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

5.后端·新建子模块与开发(自动模式)

文章目录 学习资料自动生成模式创建后端三层 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p11&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 自动生成模式创建后端三层 首先,运行起来若依的前后端整个项目,…...

vue的data为什么要写成data(return{})这样而不是data:{}这样?

在Vue.js中,为什么要将data写成一个返回对象的函数data()而不是一个普通的对象data: {} 为什么? 因为Vue.js的组件实例是可复用的,而且它们可以在应用中多次实例化。通过将data定义为一个返回对象的函数,可以确保每个组件实例都…...

MySQL基础运维知识点大全

一. MySQL基本知识 1. 目录的功能 通用 Unix/Linux 二进制包的 MySQL 安装下目录的相关功能 目录目录目录binMySQLd服务器,客户端和实用程序docs信息格式的 MySQL 手册manUnix 手册页include包括(头)文件lib图书馆share用于数据库安装的错…...

javascript获取样式表的规则及读取与写入

CSSStyleSheet是继承了StyleSheet的接口属性,它是用于找当前文档中的<link rel“” href“”…>这样文件的&#xff0c;有以下属性&#xff1a;lenght,cssRules,title,href,type,deleteRule,insertRule等 CSSStyleRule是继承于CSSRule&#xff0c;它是用于找<link re…...

什么是promise?

是JavaScript中用于处理异步操作的一种机制。 异步操作&#xff0c;例如从服务器获取数据、读取文件、执行数据库查询等等。 经典使用&#xff1a;Axios 是一个基于Promise的HTTP客户端 Promise具有三个状态&#xff1a; Pending&#xff08;待定&#xff09;&#xff1a;Pr…...

从零开始学习软件测试-第45天笔记

monkey事件 事件&#xff1a;对app进行的操作&#xff0c;比如触摸事件&#xff0c;滑动事件...动作&#xff1a;构成一个事件所需要的步骤。 调整事件的百分比 adb shell monkey -p 包名 -v -v --pct-xxx 百分比 次数>输出文件的路径 分析日志有没有报错 到日志中去找…...

visual studio常用快捷键

CtrlM、CtrlO 折叠到定义 CtrlM、CtrlM 折叠当前定义 CtrlM、CtrlA 折叠全部 CtrlK、CtrlD 自动编排代码格式 F12 转到定义 ShiftF12 查看所有定义 ctrl] 转到定义首部或尾部 ctrlX 未选中文本时&#xff0c;剪切/删除光标所在行。ctrlV 未选中文本时&#xff0c;粘贴到…...

数据变换:数据挖掘的准备工作之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

Go语言实践案例之简单字典

一、程序要实现效果&#xff1a; 在命令行调用程序的时候&#xff0c;可以在命令行的后面查询一个单词&#xff0c;然后会输出单词的音标和注释。 二、思路分析&#xff1a; 定义一个结构体 DictRequest&#xff0c;用于表示翻译请求的数据结构。其中包含了 TransType&#…...

笔试面试相关记录(3)

&#xff08;1&#xff09;String String和String.append()的底层实现 C中string append函数的使用与字符串拼接「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com) String String 在 第二个String中遇到\0就截止&#xff0c;append()的方法则是所有字符都会加在后面。 &…...

第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…...

开源免费的流程图软件draw.io

2023年9月16日&#xff0c;周六上午 想买微软的visio&#xff0c;但发现不是很值得&#xff0c;因为我平时也不是经常需要画图。 所以我最后还是决定使用开源免费的draw.io来画图 draw.io网页版的网址&#xff1a; Flowchart Maker & Online Diagram Software draw.io的…...

Python绘图系统19:添加时间轴以实现动态绘图

文章目录 时间轴单帧跳转源代码 Python绘图系统&#xff1a; &#x1f4c8;从0开始的3D绘图系统&#x1f4c9;一套3D坐标&#xff0c;多个函数&#x1f4ca;散点图、极坐标和子图自定义控件&#xff1a;绘图风格&#x1f4c9;风格控件&#x1f4ca;定制绘图风格坐标设置进阶&a…...

深度解析shell脚本的命令的原理之rm

rm 是 Unix/Linux 系统中的一个基本命令&#xff0c;用于删除文件或目录。以下是对这个命令的深度分析&#xff1a; 基本操作&#xff1a;rm 命令删除一个或多个文件或目录。这是通过从文件系统中移除链接来完成的。在 Unix/Linux 中&#xff0c;文件是通过链接&#xff08;可以…...

RPA机器人流程自动化专题培训大纲(供大家参考使用)

一、RPA机器人流程自动化概述 RPA的定义和发展历程RPA的应用场景和优势RPA与人工智能的关系 二、RPA机器人流程自动化基础知识 RPA的基本原理和技术架构RPA的常用技术和工具RPA的编程语言和开发环境 三、RPA机器人流程自动化实战应用 如何进行业务流程分析与优化如何利用R…...

Python用若干列的数据多条件筛选、去除Excel数据并批量绘制直方图

本文介绍基于Python&#xff0c;读取Excel数据&#xff0c;以一列数据的值为标准&#xff0c;对这一列数据处于指定范围的所有行&#xff0c;再用其他几列数据数值&#xff0c;加以筛选与剔除&#xff1b;同时&#xff0c;对筛选与剔除前、后的数据分别绘制若干直方图&#xff…...

驱动开发,IO多路复用实现过程,epoll方式

1.框架图 被称为当前时代最好用的io多路复用方式&#xff1b; 核心操作&#xff1a;一棵树&#xff08;红黑树&#xff09;、一张表&#xff08;内核链表&#xff09;以及三个接口&#xff1b; 思想&#xff1a;&#xff08;fd代表文件描述符&#xff09; epoll要把检测的事件…...

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

SQL注入篇-sqlmap的配置和使用

在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap&#xff0c;但是由于很多朋友看不了解命令行格式&#xff0c;所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习&#xff0c;链接&#xff1a;https://wwhc.lanzoue.com/ifJY32ybh6vc…...

若依项目部署--传统架构--未完待续

若依项目介绍 项目源码获取 #Git工具下载 dnf -y install git #若依项目获取 git clone https://gitee.com/y_project/RuoYi-Vue.git项目背景 随着企业信息化需求的增加&#xff0c;传统开发模式存在效率低&#xff0c;重复劳动多等问题。若依项目通过整合主流技术框架&…...