3.2 MinIO
3.2.1 介绍
本项目采用MinIO构建分布式文件系统,MinIO 是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。
它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。
官网:https://min.io
中文:https://www.minio.org.cn/,http://docs.minio.org.cn/docs/
MinIO集群采用去中心化共享架构,每个结点是对等关系,通过Nginx可对MinIO进行负载均衡访问。
去中心化有什么好处?
在大数据领域,通常的设计理念都是无中心和分布式。Minio分布式模式可以帮助你搭建一个高可用的对象存储服务,你可以使用这些存储设备,而不用考虑其真实物理位置。
它将分布在不同服务器上的多块硬盘组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。如下图:
Minio使用纠删码技术来保护数据,它是一种恢复丢失和损坏数据的数学算法,它将数据分块冗余的分散存储在各各节点的磁盘上,所有的可用磁盘组成一个集合,上图由8块硬盘组成一个集合,当上传一个文件时会通过纠删码算法计算对文件进行分块存储,除了将文件本身分成4个数据块,还会生成4个校验块,数据块和校验块会分散的存储在这8块硬盘上。
使用纠删码的好处是即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。 比如上边集合中有4个以内的硬盘损害仍可保证数据恢复,不影响上传和下载,如果多于一半的硬盘坏了则无法恢复。
3.2.2 数据恢复演示
下边在本机演示MinIO恢复数据的过程,在本地创建4个目录表示4个硬盘。
首先下载MinIO,下载地址:https://dl.min.io/server/minio/release/
CMD进入有minio.exe的目录,运行下边的命令:
Plain Text |
启动结果如下:
说明如下:
SQL |
1)老版本使用的MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY不推荐使用,推荐使用MINIO_ROOT_USER 和MINIO_ROOT_PASSWORD设置账号和密码。
2)pool即minio节点组成的池子,当前有一个pool和4个硬盘组成的set集合
3)因为集合是4个硬盘,大于2的硬盘损坏数据将无法恢复。
4)账号和密码默认为minioadmin、minioadmin,可以在环境变量中设置通过'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD' 进行设置。
下边输入http://localhost:9000进行登录。
登录成功:
下一步创建bucket,桶,它相当于存储文件的目录,可以创建若干的桶。
输入bucket的名称,点击“CreateBucket”,创建成功
点击“upload”上传文件。
下边上传几个文件
下边去四个目录观察文件的存储情况
我们发现上传的1.mp4文件存储在了四个目录,即四个硬盘上。
下边测试minio的数据恢复过程:
1、首先删除一个目录。
删除目录后仍然可以在web控制台上传文件和下载文件。
稍等片刻删除的目录自动恢复。
2、删除两个目录。
删除两个目录也会自动恢复。
3、删除三个目录 。
由于 集合中共有4块硬盘,有大于一半的硬盘损坏数据无法恢复。
此时报错:We encountered an internal error, please try again. (Read failed. Insufficient number of drives online)在线驱动器数量不足。
3.2.4 分布式集群测试
条件允许的情况下可以测试MinIO分布式存储的特性,首先准备环境。
分布式MinIO要求至少四个磁盘,建议至少4个节点,每个节点2个磁盘。
准备四台虚拟机:192.168.101.65、192.168.101.66、192.168.101.67、192.168.101.68
将minio的执行文件拷贝到四台虚拟机的/home/minio/目录下。
在四台虚拟机分别创建下边的脚本run.sh,内容如下:
Shell |
在四台虚拟机执行脚本run.sh,注意观察日志。
启动成功后访问: http://192.168.101.66:9001/、http://192.168.101.67:9001/、http://192.168.101.68:9001/、http://192.168.101.69:9001/。
访问任意一个都可以操作 minio集群。
下边进行测试:
1、向集群上传一个文件,观察每个节点的两个磁盘目录都存储了数据。
2、停止 一个节点,不影响上传和下载。
假如停止了65节点,通过其它节点上传文件,稍后启动65后自动从其它结点同步文件。
3、停止 两个节点,无法上传,可以下载。
此时上传文件客户端报错如下:
上传文件需要至少一半加1个可用的磁盘。
将停止的两个节点的minio启动,稍等片刻 minio恢复可用。
3.2.4 测试Docker环境
开发阶段和生产阶段统一使用Docker下的MINIO。
在下发的虚拟机中已安装了MinIO的镜像和容器,执行sh /data/soft /restart.sh启动Docker下的MinIO
启动完成登录MinIO查看是否正常。
访问http://192.168.101.65:9000
本项目创建两个buckets:
mediafiles: 普通文件
video:视频文件