分布式部署MINIO主要是多机多磁盘照应MINIO。
高性能:作为高性能对象存储,在标准硬件条件下它能达到55GB/s的读、35GG/s的写速率
可扩容:不同MinIO集群可以组成联邦,并形成一个全局的命名空间,并跨越多个数据中心
云原生:容器化、基于K8S的编排、多租户支持
Amazon S3兼容:Minio使用Amazon S3 v2 / v4 API。可以使用Minio SDK,Minio Client,AWS SDK和AWS CLI访问Minio服务器。
可对接后端存储: 除了Minio自己的文件系统,还支持DAS、 JBODs、NAS、Google云存储和Azure Blob存储。
SDK支持: 基于Minio轻量的特点,它得到类似Java、Python或Go等语言的sdk支持
Lambda计算: Minio服务器通过其兼容AWS SNS / SQS的事件通知服务触发Lambda功能。支持的目标是消息队列,如Kafka,NATS,AMQP,MQTT,Webhooks以及
Elasticsearch,Redis,Postgres和MySQL等数据库。
有操作页面
功能简单: 这一设计原则让MinIO不容易出错、更快启动
支持纠删码:MinIO使用纠删码、Checksum来防止硬件错误和静默数据污染。在最高冗余度配置下,即使丢失1/2的磁盘也能恢复数据
为了了解它的构造
和原理,我将进行几次部署和测试,以下展示过程。
经过多次实验,MINIO分布式部署也是需要基于单机部署。
分布式搭建的流程和单节点基本一样,Minio服务基于命令行传入的参数自动切换成单机模式还是分布式模式。
分布式Minio单租户存在最少4个盘最多16个盘的限制(受限于纠删码)。这种限制确保了Minio的简洁,同时仍拥有伸缩性。如果你需要搭建一个多租户环境,你可以轻松的使用编排工具(Kubernetes)来管理多个Minio实例。
经过文档和网络资料,分布式部署需要同意管理员用户和密码。并且设置磁盘地址(可访问),要求是磁盘内没有任何数据或者文件。
以下是我的单机部署代码:
set MINIO_ACCESS_KEY=minioadmin
set MINIO_SECRET_KEY=minioadmin
minio.exe server http://localhost/D:MINIO/DATA1 http://localhost/D:MINIO/DATA2
http://localhost/D:MINIO/DATA3 http://localhost/D:MINIO/DATA4
解释下,单机部署的挂接了4块磁盘,把D盘MINIO文件夹下添加了4个子文件夹,每个文件夹当作一个磁盘挂接到MINIO的服务器上去,对于MINIO来说就是拿到了4个磁盘,可以进行纠删码对照,服务方可正常启动。
运行完了以后,我们按照之前单磁服务器的方法,创建一个Bucket,上传文件,去查看磁盘储存情况。
首先,这是我上传的文件信息:
可以看到大小425KB左右。
接下来去查看服务器磁盘的存储情况:
每个磁盘里都有这个testbk的文件,每个文件夹下面都有一个关于我上传的文件的同名子文件夹。
子文件夹中,存在一个坐标文件和一个Part数据,数据的样式为下图:
我们可以看到这个part.1文件大小是213KB,大概是我们上传的文件的一半,所以可以猜测一下分布式部署的原理,以及他的纠错和恢复功能,哪怕是磁盘丢失一半的数据,也是可以恢复出文件的,这样会更加安全。
有了单机分布式部署的经验,多机实现起来就比较简单了。
首先我们还是在一台机器上设置好MINIO的服务以及文件夹。
我们先运行起来一个服务器,设置如下:
set MINIO_ACCESS_KEY=minioadmin
set MINIO_SECRET_KEY=minioadmin
minio.exe server http://localhost/D:MINIO/DATA1 http://localhost/D:MINIO/DATA2
http://10.23.215.87/D:MINIO/DATA1 http://10.23.215.87/D:MINIO/DATA2
运行以后没有报错,但是出现了以下画面:
我们需要在另外一台服务器上使用相同的配置来运行。
这里直接跳过相同的操作步骤,来看看结果:
两台服务器的结果是一样的,只是IP地址不同,分别是两台服务器的IP。
我们来实验一下:
IP1:
IP2:
可以看到两个IP都是可以访问的,那么登录进去看看。
上传一个微信程序试试,看看服务器的存储情况:
接下来是结果:
我们可以看到结果是一样的,无论用哪个IP地址登录,存储是一样的,这说明服务器之间MINIO是实时通信的,这样对于我们来说,分布式存储不仅提供了更加方便,而且是更加安全的选择,无论是文件的存储还是文件的安全,有一定的保障。
运行分布式MinIO的所有节点都需要具有相同的访问密钥和密钥才能连接节点。为此,在执行MinIO服务器命令之前,必须在所有节点上将访问密钥和密钥作为环境变量MINIO_ACCESS_KEY和MINIO_SECRET_KEY导出。
运行分布式MinIO的所有节点都需要处于同构环境中,即相同的操作系统,相同数量的磁盘和相同的互连。
如果需要设置域,则应定义并导出MINIO_DOMAIN环境变量,域名,详见
MinIO分布式模式需要新目录。如果需要,可以与其他应用程序共享驱动器。您可以使用minio独有的子目录来完成此操作。例如,如果已在/ export下挂载卷,则将/ export / data作为参数传递给MinIO服务器。
运行分布式MinIO实例的服务器应该相隔不到3秒。您可以使用NTP作为最佳实践,以确保跨服务器的一致时间。
截至目前,在Windows上运行Distributed MinIO是实验性的。请谨慎行事。