Minio-笔记-服务启动-创建桶(MB)-保存对象PutObj-保存Bucket元数据-代码流程图汇总

在这里插入图片描述
[minio] 笔记

常用链接:
http://www.minio.org.cn/

高性能
MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标

可扩展性
MinIO利用了Web缩放器的来之不易的知识,为对象存储带来了简单的缩放模型。 这是我们坚定的理念 “简单可扩展.” 在 MinIO, 扩展从单个群集开始,该群集可以与其他MinIO群集联合以创建全局名称空间, 并在需要时可以跨越多个不同的数据中心。 通过添加更多集群可以扩展名称空间, 更多机架,直到实现目标

云的原生支持
MinIO 是在过去4年的时间内从0开始打造的一款软件 ,符合一切原生云计算的架构和构建过程,并且包含最新的云计算的全新的技术和概念。 其中包括支持Kubernetes 、微服和多租户的的容器技术。使对象存储对于 Kubernetes更加友好

开放全部源代码 + 企业级支持
MinIO 基于Apache V2 license 100% 开放源代码 。 这就意味着 MinIO的客户能够自动的、无限制、自由免费使用和集成MinIO、自由的创新和创造、 自由的去修改、自由的再次发行新的版本和软件. 确实, MinIO 强有力的支持和驱动了很多世界500强的企业。 此外,其部署的多样性和专业性提供了其他软件无法比拟的优势

与Amazon S3 兼容
亚马逊云的 S3 API(接口协议) 是在全球范围内达到共识的对象存储的协议,是全世界内大家都认可的标准。 MinIO 在很早的时候就采用了 S3 兼容协议,并且MinIO 是第一个支持 S3 Select 的产品. MinIO对其兼容性的全面性感到自豪, 并且得到了 750多个组织的认同, 包括Microsoft Azure使用MinIO的S3网关 - 这一指标超过其他同类产品的总和

简单
极简主义是MinIO的指导性设计原则。简单性减少了出错的机会,提高了正常运行时间,提供了可靠性,同时简单性又是性能的基础。 只需下载一个二进制文件然后执行,即可在几分钟内安装和配置MinIO。 配置选项和变体的数量保持在最低限度,这样让失败的配置概率降低到接近于0的水平。 MinIO升级是通过一个简单命令完成的,这个命令可以无中断的完成MinIO的升级,并且不需要停机即可完成升级操作 - 降低总使用和运维成本

Reed:芦苇
纠删码,生成矩阵是范德蒙矩阵, MinIO集成了Reed-Solomon纠删码库, 联盟部署模式federation, 保持统一命名空间, 纠删组,
obj -> part1, …partN, 数据分片, 校验分片, 每一个数据分片、校验分片都被“防比特位衰减”算法所保护Bitrot, MinIO采用CRC32哈希算法, 速度>容量均衡,
数据修复: 磁记录磨损、磁盘幻象写(phantom writes)、磁盘指向错误(misdirectedreads/writes)、宇宙射线的辐射等, 修复静默错, 正常模式检查分片状态, 深度用hash校验分片内容, madmin模块, 深度优先搜索, 校验分片错误——minio使用各个数据分片重新计算缺失的校验片。数据分片错误——使用纠删算法恢复数据(需要计算逆矩阵), lambda计算通知机制, S3 Select, https://github.com/alecthomas/participle

Ceph同时支持副本、纠删码,而MinIO只支持纠删码。对于个别的对于数据可靠性要求极高的单位,Ceph对象存储更加合适, 招聘Golang程序员来 维护MinIO所花费的成本,显然低于招聘c++程序员来维护Ceph

MinIO技术白皮书: https://mp.weixin.qq.com/s/_8wcvUXryh_FhXrBPWc0Lw

生成加密密钥: cat /dev/urandom | head -c 32 | base64 -

console
registerLoginHandlers ->

身份和访问管理, 身份提供者 (IDP), IDentity Provider (IDP). MinIO also external management of identities using either an OpenID Connect (OIDC) or Active Directory/LDAP IDentity Provider (IDP)

您可以使用 MinIO 控制台执行一般管理任务,例如身份和访问管理、指标和日志监控或服务器配置。 每个 MinIO 服务器都包含自己的嵌入式 MinIO 控制台。,

./mc admin info play

arbitrary任意数量,

MinIO 使用桶来组织对象。 存储桶类似于文件系统中的文件夹或目录,其中每个存储桶可以保存任意数量的对象。

版本控制允许将同一对象的多个版本保留在同一键下。

对象锁定可防止对象被删除。 需要支持保留和合法保留。 只能在创建存储桶时启用。

配额限制存储桶中的数据量。

保留规定了在一段时间内防止对象删除的规则。

MinIO 存储桶通知允许管理员针对某些对象或存储桶事件向支持的外部服务发送通知。 MinIO 支持类似于 Amazon S3 事件通知的存储桶和对象级 S3 事件。

Tiers层由 MinIO 对象生命周期管理使用,它允许为基于时间或日期的对象自动转换或到期创建规则。 对于对象转换,MinIO 自动将对象移动到配置的远程存储层。

进一步探索, 快速开始: https://docs.min.io/docs/minio-quickstart-guide.html

纠删码是一种用于重建丢失或损坏数据的数学算法。 MinIO 使用 Reed-Solomon理德-所罗门代码将对象分片为可变数据和奇偶校验块。 N个数据块计算M个校验块, 存储放大比为(N+M)/N, 例如,在 12 个驱动器设置中,可以将一个对象分片到所有驱动器上的可变数量的数据和奇偶校验块 - 从六个数据和六个奇偶校验块到十个数据和两个奇偶校验块。默认情况下,MinIO 在 N/2 个数据和 N/2 个奇偶校验驱动器上对对象进行分片。 不过,您可以使用存储类来使用自定义配置。 我们推荐 N/2 个数据块和奇偶校验块,因为它可以确保对驱动器故障提供最佳保护。

在上面的 12 个驱动器示例中,MinIO 服务器在默认配置下运行,您可以丢失六个驱动器中的任何一个,但仍然可以从剩余驱动器可靠地重建数据。与 RAID 或复制不同,纠删码可保护数据免受多个驱动器故障的影响。 例如,RAID6 可以防止两个驱动器发生故障,而在 MinIO 擦除代码中,您可能会丢失多达一半的驱动器,但数据仍然安全。 此外,MinIO 的纠删码是对象级别的,一次可以修复一个对象。 对于 RAID,只能在卷级别进行修复,这会导致停机时间较长。 由于 MinIO 单独编码每个对象,它可以逐步修复对象。 部署后的存储服务器在服务器的整个生命周期内都不需要驱动器更换或修复。 MinIO 的纠删码后端旨在提高运营效率,并在可用时充分利用硬件加速。

MinIO 的纠删码后端使用高速 HighwayHash 校验和来防止 Bit Rot,

纠删码集erasure codeing sets, erasure-coding set

bucket: mount point in filesystems and should not be treated as folders, 挂载点或驱动而非目录

start -> cmd/format-erasure.go -> markRootDisksAsDown

serverMain -> erasureSelfTest -> newObjectLayer

mc cp ->

minio -> api-router.go api.PutBucketHandler ->

initConsoleServer

mb -> MakeBucketWithLocation ->

startup

make run -> newApp(appName).Run(args) -> versionBanner -> func (a *App) Run -> HandleAction(a.Action, context) -> func serverMain ->

func HandleAction(action interface{}, context *Context) -> action.(func(*Context)) abort断言 -> a(context) 执行 ->

registerCommand(serverCmd) -> func serverMain(ctx *cli.Context)

CreateServerEndpoints -> NewEndpoints

ellipses: 省略号
// Ellipses constants 省略号常量
openBraces = “{” // 大括号
closeBraces = “}”
ellipses = “…”

checkCrossDeviceMounts(eps)

SlashSeparator = “/” 路径分隔符

url.Parse(arg) 解析为url对象 -> u.Host != “” 判断为本地或host模式 -> CheckCrossDevice
filepath.Abs(arg) 绝对路径
path.Clean(absArg): 返回最短路径名

/proc/mounts
file io.Reader
strconv.Atoi(fields[4]) string -> int

mounts.checkCrossMounts 交叉挂载

ErasureSetupType 纠删码集类型
if setupType == ErasureSetupType && gotSetupType == DistErasureSetupType {
setupType = DistErasureSetupType
}

GetLocalPeer ->
indicate

map[string]config.KVS 键值对

periodicHealSeqsClean

NewNotificationSys 通知系统

go m.trackEWMA() 指数加权移动平均线 (EWMA) exponentially weighted moving average

IAM
NewLifecycleSys 生命周期管理

setMaxResources
kenernal: 4.0.0
configureServerHandler

newObjectLayer

ecDrives: 2

waitForFormatErasure -> connectLoadInitFormats -> g.Go -> newStorageAPI -> newXLStorage -> bgFormatErasureCleanupTmp

go removeAll(tmpOld)
go renameAllBucketMetacache(diskPath)

formatGetBackendErasureVersion

newStorageRESTClient

loadFormatErasureAll -> loadFormatErasure -> func (s *xlStorage) ReadAll ->

newErasureSets -> newNSLock(globalIsDistErasure) -> newLockAPI -> set.NewStringSet()

go s.cleanupStaleUploads(ctx)

go s.cleanupDeletedObjects(ctx)

go intDataUpdateTracker.start(ctx, drives…)

go d.startSaver

initAutoHeal(GlobalContext, newObject)

初始化后台副本
initBackgroundReplication

constraint 限制 -> objectAPI.MakeBucketWithLocation -> func (z *erasureServerPools) MakeBucketWithLocation -> z.serverPools[index].MakeBucketWithLocation -> func (s *erasureSets) MakeBucketWithLocation -> func (er erasureObjects) MakeBucketWithLocation -> er.getDisks() -> storageDisks[index].MakeVol -> func (p *xlStorageDiskIDCheck) MakeVol -> func (s *xlStorage) MakeVol -> mkdirAll(volumeDir, 0o777) ->

in 0o777 the o stands for “octal” 八进制, like the x in 0xFF stands for “hexadecimal” 十六进制

simultaneously 同时

bucket-mb.lck

获取函数名, 文件名, 行号
func getSource

suspend: 暂停

func newErasureSets -> getDisks: s.GetDisks(i), -> func (s *erasureSets) GetDisks ->

copy(disks, s.erasureDisks[setIndex])
复制内置函数将元素从源切片复制到目标切片。 (作为一种特殊情况,它还将字节从字符串复制到字节片。)源和目标可能重叠。 Copy 返回复制的元素数量,它将是 len(src) 和 len(dst) 的最小值。

func (z *erasureServerPools) MakeBucketWithLocation -> meta := newBucketMetadata(bucket) -> meta.Save -> func (b *BucketMetadata) Save -> func saveConfig -> store.PutObject -> func (z *erasureServerPools) PutObject -> checkPutObjectArgs -> encodeDirObject(object) -> prefix__XLDIR__ -> globalDirSuffix -> z.getPoolIdxNoLock -> func (s *erasureSets) PutObject -> func (er erasureObjects) PutObject -> func (er erasureObjects) putObject -> auditObjectErasureSet -> func newFileInfo -> func NewErasure -> var enc reedsolomon.Encoder 编码器 -> reedsolomon.New -> defer -> er.renameAll -> func (e *Erasure) ShardFileSize -> func newStreamingBitrotWriterBuffer -> erasure.Encode -> e.EncodeData -> partsMetadata[i].AddObjectPart -> partsMetadata[i].Erasure.AddChecksumInfo

4B
bucketMetadataFormat 0:2 B value=1
bucketMetadataVersion 2:4 B value=1

configFile:buckets/bucket-mb1/.metadata.bin
.minio.sys

cardinality 基数
blockSizeV2: 1MB
shuffle 随机

WORM
启用WORM后,MinIO会禁用所有可能会使对象数据和元数据发生变异的API。这意味着一旦写入数据就可以防止篡改。这对于许多不同的法规要求具有实际应用

利用Lambda计算通知和对象元数

汲取了Glusterfs的相关经验不教训, minio舍弃了传统分布式存储扩容所需要的迁移流程,采用联盟模式添加集群的方式,极大简化了扩容流程;除此之外,minio还具有纠删编码、比特位保护、单写多读(worm),

三、性能测试

MinIO已经为高性能做过高度优化,尤其是部分关键的算法已经使用SIMD指令对Intel(AVX2/AVX512)、Arm(NEON)的cpu做过特殊优化,主要包括:

  1. 纠删码部分用到的伽罗瓦域的运算:加法、乘法、乘方等等;

  2. 监测比特位衰减(bitrot)的哈希函数,如HighwayHash。

另外每一个MinIO集群都是无中心的,其中的每一个节点都是对等的,从而在性能上,不会存在单点瓶颈,也不会有单点故障

GlusterFs 的translator类

02、Ceph优势
•数据冗余策略更加丰富
Ceph同时支持副本、纠删码,而MinIO只支持纠删码。对于个别的对于数据可靠性要求极高的单位,Ceph对象存储更加合适

在最大奇偶校验时,MinIO 可以容忍每个擦除集 ( ) 丢失多达一半的驱动器,N/2-1并且仍然执行读取和写入操作。MinIO 默认为每个对象 4 个奇偶校验块,每个擦除集允许丢失 4 个驱动器。有关选择纠删码奇偶校验的更完整信息,请参阅纠删码奇偶校验 (EC:N)。
At maximum parity, MinIO can tolerate the loss of up to half the drives per erasure set (N/2-1) and still perform read and write operations

如何相识成集群

Minio 为什么没有 POST 接口?https://mp.weixin.qq.com/s/vdtFcL8JBZ4KqmZupe5jqA

服务启动

在这里插入图片描述

创建桶

在这里插入图片描述

保存对象在这里插入图片描述

保存Bucket元数据

在这里插入图片描述

Author 晓兵

博客: https://logread.cn | https://blog.csdn.net/ssbandjl

weixin: ssbandjl

公众号: 云原生云

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值