Rick Zheng's Blog

Minio

2021-05-27

开源项目Minio学习

前言

MinIO简介

MinIO是一个基于Apache License v2.0开源协议的对象存储服务。它兼容aws s3云存储服务接口,非常适合于存储非结构化的数据,例如图片、视频、日志文件、备份数据和容量/虚拟机镜像等,而一个对象文件可以是任意大小的,几十kb到5TB不等。
MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,如MySQL、Redis…

MinIO使用

refs:
https://docs.min.io/cn/minio-quickstart-guide.html

MinIO安装

MacOS

brew install minio/stable/minio
minio server /data

Linux

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
minio server /data

使用源码安装,或者要看开源代码;前提是安装好Golang环境

Linux安装golang环境,可以看这篇 Linux配置Golang依赖包

go get -u github.com/minio/minio

纠删码

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

纠删码ensure code是什么

纠删码是一种恢复丢失和损坏数据的数学算法,Minio采用Reed-Solomon code将对象分为N/2数据和2/N奇偶校验块。这就意味着如果12块盘,一个对象会被分为6个数据块、6个奇偶校验块至10个数据块、2个奇偶校验块。

平常工作中经常说的几-几编码就是这个意思,既能节省空间又能保证数据的安全性。

Minio EC

默认情况下Minio会将对象分为N/2个数据块、N/2个奇偶校验块。尽管可以自定义conf配置Strong Slass来区分EC比,但还是推荐N/2个数据块、奇偶校验块。因为这是防止设备异常最有效的方案。

意味着丢失任意的6块盘(不管其存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复

img

Reed Solomon算法

img
Encode
img

Decode
img
逆矩阵计算
img

RAID6 vs EC

RAID, n-way-replication(如典型的1主3备)

  • 容错能力:
    • RAID5可以防止1台设备失败;RAID6可以防止2台设备失败。
    • EC编码可以防止至多一半设备失败,并能保证数据存在。
  • 数据恢复:
    • RAID是volume level,只能在停机状态下恢复。
    • EC编码是object level,可以保证不停服的状态下不断恢复数据。

Bit Rot protection

存在设备中的数据可能会默默“腐烂”,这比物理设备损坏更可怕。
Minio EC底层使用 HighwayHash 计算校验和来解决以上问题。

可以深入了解下

Start EC in MinIO

nohup ./minio server ./data{0..12} > out.log 2>&1 &

Distributed MinIO

  • Data protection
    • MinIO实现分布式最小需要4个设备
  • High availability
    • 如果单机版的MinIO服务所使用的盘挂了,那服务就彻底挂了。

    • 如果是n台服务器,每台服务器m个盘构成的分布式版MinIO服务所使用的服务器或盘一半以上挂了,才不可靠;至少需要n + 1个节点来创建新的对象。

      ec比参考:

      erasure stripe size

      storage class

  • Consistency Guarantees

    • Minio强一致性遵循对所有的I/O操作必须read-after-write and list-after-write ;不管是单机还是分布式;
    • 这些强一致模型只针对分布式文件系统有效(例如 xfs, ext4 or zfs etc.. )
    • If MinIO distributed setup is using NFS volumes underneath it is not guaranteed MinIO will provide these consistency guarantees since NFS is not consistent filesystem by design (If you must use NFS we recommend that you atleast use NFSv4 instead of NFSv3).

Setup Distributed MinIO

可以参考

https://www.cnblogs.com/erdongx/p/11829726.html

主要就是对节点、盘设置

源码

Trie字典树

参考

https://docs.min.io/cn/
https://github.com/minio/highwayhash
https://www.jianshu.com/p/e43dcdefae05


Similar Posts

上一篇 Httpie

下一篇 Hey工具魔改

Comments