开源项目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块盘(不管其存放的数据块还是奇偶校验块),仍可以从剩下的盘中的数据进行恢复
Reed Solomon算法
Encode
Decode
逆矩阵计算
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比参考:
-
-
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