分布式⽂件存储MinIO实战
1.分布式⽂件系统应⽤场景
互联⽹海量⾮结构化数据的存储需求
电商⽹站:海量商品图⽚
mysql存储文档视频⽹站:海量视频⽂件
⽹盘 : 海量⽂件
社交⽹站:海量图⽚
1.1 Minio介绍
MinIO 是⼀个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接⼝,⾮ 常适合于存储⼤容量⾮结构化的数据,例如图⽚、视频、⽇志⽂件、备份数据和容器/虚拟机镜像等,⽽ ⼀个对象⽂件可以是任意⼤⼩,从⼏kb到最⼤5T不等。
MinIO是⼀个⾮常轻量的服务,可以很简单的和其他应⽤的结合,类似 NodeJS, Redis 或者 MySQL。
对象存储服务(Object Storage Service,OSS)是⼀种海量、安全、低成本、⾼可靠的云存储服 务,适合存放任意类型的⽂件。
容量和处理能⼒弹性扩展,多种存储类型供选择,全⾯优化存储成 本。
对于中⼩型企业,如果不选择存储上云,那么 Minio 是个不错的选择,⿇雀虽⼩,五脏俱全。当然 Minio 除了直接作为对象存储使⽤,还可以作为云上对象存储服务的⽹关层,⽆缝对接到 Amazon S3、 MicroSoft Azure。
在中国:阿⾥巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使⽤MinIO产 品。
Minio优点
部署简单: ⼀个single⼆进制⽂件即是⼀切,还可⽀持各种平台。
minio⽀持海量存储,可按zone扩展(原zone不受任何影响),⽀持单个对象最⼤5TB;
兼容Amazon S3接⼝,充分考虑开发⼈员的需求和体验;
低冗余且磁盘损坏⾼容忍,标准且最⾼的数据冗余系数为2(即存储⼀个1M的数据对象,实际占⽤ 磁盘空间为2M)。但在任意n/2块disk损坏的情况下依然可以读出数据(n为⼀个纠删码集合(Erasure Coding Set)中的disk数量)。并且这种损坏恢复是基于单个对象的,⽽不是基于整个存储卷的。
读写性能优异
1.2 MinIO的基础概念
Object:存储到 Minio 的基本对象,如⽂件、字节流,
Bucket:⽤来存储 Object 的逻辑空间。每个 Bucket 之间的数据是相互隔离的。对于客户端⽽ ⾔,就相当于⼀个存放⽂件的顶层⽂件夹。
Drive:即存储数据的磁盘,在 MinIO 启动时,以参数的⽅式传⼊。Minio 中所有的对象数据都会 存储在 Drive ⾥。
Set :即⼀组 Drive 的集合,分布式部署根据集规模⾃动划分⼀个或多个 Set ,每个 Set 中的 Drive 分布在不同位置。⼀个对象存储在⼀个 Set 上。(For example: {1...64} is divided into 4 sets each of size 16.)
⼀个对象存储在⼀个Set上
⼀个集划分为多个Set
⼀个Set包含的Drive数量是固定的,默认由系统根据集规模⾃动计算得出
⼀个SET中的Drive尽可能分布在不同的节点上
1.3 纠删码EC(Erasure Code)
MinIO 使⽤纠删码机制来保证⾼可靠性,使⽤ highwayhash 来处理数据损坏( Bit Rot Protection )。 关于纠删码,简单来说就是可以通过数学计算,把丢失的数据进⾏还原,它可以将n份原始数据,增加m 份数据,并能通过n+m份中的任意n份数据,还原为原始数据。即如果有任意⼩于等于m份的数据失 效,仍然能通过剩下的数据还原出来。
1.4 存储形式
⽂件对象上传到 MinIO ,会在对应的数据存储磁盘中,以 Bucket 名称为⽬录,⽂件名称为下⼀级⽬ 录,⽂件名下是 part.1 和
1.5 存储⽅案
2.1 单机部署
minio server的standalone模式,即要管理的磁盘都在host本地。该启动模式⼀般仅⽤于实验环境、测 试环境的验证和学习使⽤。在standalone模式下,还可以分为non-erasure code mode和erasure code mode。
non-erasure code mode
在此启动模式下,对于每⼀份对象数据,minio直接在data下⾯存储这份数据,不会建⽴副本,也不会 启⽤纠删码机制。因此,这种模式⽆论是服务实例还是磁盘都是“单点”,⽆任何⾼可⽤保障,磁盘损坏 就表⽰数据丢失。
erasure code mode
此模式为minio server实例传⼊多个本地磁盘参数。⼀旦遇到多于⼀个磁盘参数,minio server会⾃动 启⽤erasure code mode。erasure code对磁盘的个数是有要求的,如不满⾜要求,实例启动将失 败。 erasure code启⽤后,要求传给minio server的
endpoint(standalone模式下,即本地磁盘上的⽬ 录)⾄少为4个。
基于centos7
chmod +x minio
#启动minio server服务,指定数据存储⽬录/mnt/data
./minio server /mnt/data
默认⽤户名密码minioadmin:minioadmin,修改默认⽤户名密码可以使⽤:
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=12345678
默认的配置⽬录是${HOME}/.minio,可以通过--config-dir命令⾃定义配置⽬录:
./minio server --config-dir /mnt/config /mnt/data
控制台监听端⼝是动态⽣成的,可以通过--console-address ":port"指定静态端⼝
.
/minio server --console-address ":50000" /mnt/data
基于docker
对外暴露minio控制台的端⼝,通过--console-address ":50000"指定控制台端⼝为静态端⼝,MinIO⾃定义⽤户名密码
docker run -d -p 9000:9000 -p 50000:50000 --name minio -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" -v /home/data/minio:/data -v /home/data/minio/config:/root/.minio minio/minio server --console-address ":50000" /data
minio纠删码模式
Minio使⽤纠删码 erasure code 和校验和 checksum 来保护数据免受硬件故障和⽆声数据损坏。 即便 您丢失⼀半数量(N/2)的硬盘,您仍然可以恢复数据。
纠删码是⼀种恢复丢失和损坏数据的数学算法, Minio采⽤Reed-Solomon code将对象拆分成N/2 数据和N/2 奇偶校验块。 这就意味着如果是12块盘,⼀个对象会被分成6个数据块、6个奇偶校验 块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的 数据进⾏恢复。
使⽤Minio Docker镜像,在8块盘中启动Minio服务:
docker run -d -p 9000:9000 -p 50000:50000 -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" --name minio -v /mnt/config:/root/.minio -v /home/data1:/data1 -v /home/data2:/data2 -v /home/data3:/data3 -v /home/data4:/data4 -v /home/data5:/data5 -v /home/data6:/data6 -v /home/data7:/data7 -v /home/data8:/data8 minio/minio server --console-address ":50000" /8}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论