1. 文件系统和分布式文件系统
1.1 文件系统
文件系统是负责管理和存储文件的系统软件,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。
1.2 分布式文件系统
一个计算机无法存储海量的文件,通过网络将若干计算机组织起来共同去存储海量的文件,去接收海量用户的请求,这些组织起来的计算机通过网络进行通信。
2. MinIo
MinIO
是一个非常轻量的服务,可以很简单的和其他应用的结合使用,它兼容亚马逊 S3 云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等。它一大特点就是轻量,使用简单,功能强大,支持各种平台,单个文件最大5TB,兼容 Amazon S3接口,提供了 Java、Python、GO等多版本SDK支持。
2.1 MinIo 纠删码技术
Minio使用纠删码技术来保护数据,它是一种恢复丢失和损坏数据的数学算法,它将数据分块冗余的分散存储在各各节点的磁盘上,所有的可用磁盘组成一个集合,上图由8块硬盘组成一个集合,当上传一个文件时会通过纠删码算法计算对文件进行分块存储,除了将文件本身分成4个数据块,还会生成4个校验块,数据块和校验块会分散的存储在这8块硬盘上。
使用纠删码的好处是即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据。 比如上边集合中有4个以内的硬盘损害仍可保证数据恢复,不影响上传和下载,如果多于一半的硬盘坏了则无法恢复。
比如说,创建四个目录表示四个磁盘,首先在本机上演示一下,在本机上下载,有条件的话可以在Linux虚拟机上自行下载(后续项目肯定要在虚拟机上下载)下载地址:MinIO
CMD进入有minio.exe的目录,运行下边的命令:
minio.exe server D:\data1 D:\data2 D:\data3 D:\data4
(自己的文件地址不要错)
2.2 本机演示
账号和密码默认为
minioadmin、minioadmin
,可以在环境变量中设置通过'MINIO_ROOT_USER' and 'MINIO_ROOT_PASSWORD'
进行设置。
下边输入
http://localhost:9000
进行登录,账号和密码为:minioadmin/minioadmin
登录成功:
下一步创建bucket,桶,它相当于存储文件的目录,可以创建若干的桶
。
输入bucket的名称,点击“CreateBucket”,创建成功
点击“upload”上传文件。
下边去四个目录观察文件的存储情况
我们发现上传的1.mp4文件存储在了四个目录,即四个硬盘上。
下边测试minio的数据恢复过程:
1、首先删除一个目录。 删除目录后仍然可以在web控制台上传文件和下载文件。稍等片刻删除的目录自动恢复。
2、删除两个目录。 删除两个目录也会自动恢复。
3、删除三个目录 。 由于 集合中共有4块硬盘,有大于一半的硬盘损坏数据无法恢复。