是什么
- MinIO 是全球领先的对象存储先锋,目前在全世界有数百万的用户. 在标准硬件上,读/写速度上高达183 GB / 秒 和 171 GB / 秒。
- 对象存储可以充当主存储层,以处理Spark、Presto、TensorFlow、H2O.ai等各种复杂工作负载以及成为Hadoop HDFS的替代品。
- MinIO用作云原生应用程序的主要存储,与传统对象存储相比,云原生应用程序需要更高的吞吐量和更低的延迟。而这些都是MinIO能够达成的性能指标
- 简单可扩展
- 与aws的s3兼容,可实现无缝衔接
安装
- 其他方式安装请参考官方文档
- docker安装minio
docker run -p 9000:9000 --name minio1 \
-e "MINIO_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE" \
-e "MINIO_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" \
-v /mnt/data:/data \
-v /mnt/config:/root/.minio \
minio/minio server /data
对象存储原理
- MinIO的编码方式,将一个对象编码成若干个数据块和校验块,我们简称为Erasure Code码,这个是编码的类型,这种编码的类型,还需要算法来实现,minio 采用的是 Reed-Solomon算法
- 即便您丢失一半数量(N/2)的硬盘,您仍然可以恢复数据。
- Minio默认采用Reed-Solomon code将数据拆分成N/2个数据块和N/2个奇偶校验块
- 16块盘,一个对象会被分成8个数据块、8个奇偶校验块,你可以丢失任意8块盘(不管其是存放的数据块还是校验块),你仍可以从剩下的盘中的数据进行恢复
- 解释
- B是一个n x (m + n)的矩阵
- D是一个我们真实的一个数据块举证
- 图一
- 图二
- 图三
- 根据矩阵运算可知,原始数据矩阵D可有Survivors矩阵*B`的可逆矩阵求得
- 综上所诉
- 数据丢失最大容忍为m
- 数据冗余量为m
- 一般情况m = n,所以就是2倍冗余
存储桶通知指南
- 存储桶(Bucket)如果发生改变,比如上传对象和删除对象,可以使用存储桶事件通知机制进行监控,并通过以下方式发布出去
- AMQP,MQTT,Elasticsearch,Redis,NATS,PostgreSQL,MySQL,Apache Kafka,Webhooks
- 配置一个es通知案例
- MinIO Server的配置文件默认路径是 ~/.minio/config.json
- ES配置信息是在notify这个节点下的elasticsearch节点下
"elasticsearch": {
"1": {
"enable": true,
"format": "namespace",
"url": "http://127.0.0.1:9200",
"index": "minio_events"
}
},
mc mb myminio/images
mc event add myminio/images arn:minio:sqs:us-east-1:1:elasticsearch --suffix .jpg
$ mc cp myphoto.jpg myminio/images
$ curl "http://localhost:9200/minio_events/_search?pretty=true"
客户端安装
brew install minio/stable/mc
mc --help
sdk指南
from minio import Minio
from minio.error import (ResponseError, BucketAlreadyOwnedByYou,
BucketAlreadyExists)
minioClient = Minio('play.min.io',
access_key='Q3AM3UQ867SPQQA43P2F',
secret_key='zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG',
secure=True)
try:
minioClient.make_bucket("maylogs", location="us-east-1")
except BucketAlreadyOwnedByYou as err:
pass
except BucketAlreadyExists as err:
pass
except ResponseError as err:
raise
else:
try:
minioClient.fput_object('maylogs', 'pumaserver_debug.log', '/tmp/pumaserver_debug.log')
except ResponseError as err:
print(err)