大家好!今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群。
MinIO 对象存储是什么?
对象是二进制数据,例如图像、音频文件、电子表格甚至二进制可执行代码。对象的大小可以从几 B 到几 TB 不等。像 MinIO 这样的对象存储平台提供了专用工具和功能,使用标准的 S3 兼容 API 存储、列出和检索对象。
MinIO 对象存储使用存储桶来组织对象。存储桶类似于文件系统中的文件夹或目录,其中每个存储桶可以容纳任意数量的对象。MinIO 存储桶提供与 AWS S3 存储桶相同的功能。
MinIO 的纠删码
MinIO 支持分布式部署,支持服务和数据的高可用,核心就是 MinIO 的纠删码功能。
MinIO 实现了纠删码功能,将其作为提供数据冗余和可用性的核心组件。假设 MinIO 将一个对象分为 K 个数据分片,纠删码可根据 K 个数据分片生成 M 个校验分片,MinIO 需要最少 K 个任何类型的分片来恢复原对象。意味着总共 K+M 个分片中可以允许 M 个分片失效。
如下图举个栗子:我们将一个对象分为 12 个数据分片(Data shard),然后生成 4 个校验分片(Parity shard),总共有 16 个分片,分别存储在单个驱动中,此方式可以容忍 4 个驱动的失效,并且有 0.75(12/16)的存储效率。(此为 EC:4,EC 为 Erasure Coding,4 为校验分片的数量)
为了更好跟三副本方式进行比较,我们假设现有 2 个数据分片和 2 个校验分片,比较结果如下:
方式 | 容忍失效分片(副本)数 | 存储效率 |
---|---|---|
纠删码(EC:2) | 2 | 1/2 |
三副本 | 2 | 1/3 |
通过比较可以看出纠删码可以提高存储效率,减少存储资源的使用(补充:当数据分片数等于校验分片数时,MinIO 中为了避免出现脑裂问题,写入数据时需要大多数分片,即 3 个分片,详情可查看:MinIO 可用性和弹性)。
MinIO 中可以调整 校验分片/总分片 的比例,比例范围为为 0 - 1/2。比例越大,数据可用性越高(可容忍失效分片数),同时存储效率越低。
快速部署高可用 MinIO 的教程
模板部署的 MinIO 采用了 4 节点和 EC:2 的方式。能保证单节点宕机不影响读写服务,双节点挂机不影响读服务,且存储效率为 1/2。
- 点击链接 https://cloud.sealos.top/?openapp=system-fastdeploy%3FtemplateName%3Dminio
- 输入账号密码和存储大小。(注:账号密码至少需要8位,存储大小部署后无法修改)
- 点击 Deploy Application,MinIO 启动!
- 点击 Confirm,跳转查看详情。
- 点击链接即可访问 MinIO Console 界面。
- 输入账号密码,开始使用 MinIO。简单创建一个 bucket 存储桶,然后上传 install.sh 文件。
至此,我们已经成功部署一个强大的对象存储应用了。可以开始愉快的存储对象啦!
MinIO on Kubernetes
抽象的介绍一下 MinIO 在 K8S 中的架构:
- Pod:作为 MinIO 实例运行的基础单元,每个 Pod 部署一个 MinIO 容器实例。
- StatefulSet:用于管理 4 个 MinIO Pod 副本,保证副本数量和顺序,为每个 Pod 提供稳定的网络标识(如 DNS 名字)和存储标识(PV 卷)。
- Service(Headless):为 StatefulSet 内的 MinIO Pod 提供内部服务发现,其他 Pod 可以通过固定的 DNS 名字访问每个 MinIO 实例。
- Service(ClusterIP):对外提供 MinIO Console 服务的访问端口和目标端口映射。
- Ingress:配置外网入口域名和路径映射规则,可以通过域名访问 Minio Console。
参考资料
- https://min.io/docs/minio/kubernetes/upstream/operations/concepts/erasure-coding.html
- https://min.io/docs/minio/kubernetes/upstream/operations/concepts/availability-and-resiliency.html#minio-availability-resiliency
- https://cloud.tencent.com/developer/article/1829995