使用MinIO作为分布式文件存储,当业务发展到一定程度时,就会遇到扩容的问题。本文将介绍使用MinIO多节点多驱动器方式部署下的扩容方法。

MinIO 支持通过添加新的服务器池来扩展现有的分布式部署。 每个池扩展群集的总可用存储容量。

扩展不提供业务连续性/灾难恢复 (BC/DR) 级保护。 虽然每个池都是一组独立的服务器,具有不同的可用性纠删集,但完全丢失一个池会导致 MinIO 停止部署中所有池的 I/O。 同样,在一个存储池中丢失仲裁的擦除集表示存储在该集中的对象的数据丢失,而不考虑其他擦除集或存储池的数量。

若要为单池或多池 MinIO 部署提供 BC-DR 级故障转移和恢复支持,请使用站点复制

此页上的过程使用其他服务器池扩展现有的分布式 MinIO 部署。

分布式 MinIO 部署由 4 个或更多驱动器/卷组成,由 一个或多个 minio 服务器进程,其中进程管理池化 计算和存储资源到单个聚合对象存储资源中。 每个 MinIO 服务器都有分布式拓扑的完整图片,因此 应用程序可以连接到部署中的任何节点并执行 S3 操作。

MinIO 支持通过添加新的服务器池来扩展现有的分布式部署。每个池扩展总数 集群的可用存储容量,同时保持集群的整体可用性。每个池都是它的 自己的故障域,其中丢失该池中的一个或多个驱动器或节点 不会影响部署中其他池的可用性。

用于纠删码奇偶校验的最小驱动器

MinIO 要求每个池都满足部署纠删码设置。具体而言,新的池拓扑必须 每个纠删集支持最少的驱动器,其中 是 的标准奇偶校验存储类 部署。此要求可确保新服务器池能够满足 部署的预期 SLA。2 x EC:NEC:N

您可以使用 MinIO 纠删码计算器检查新存储池的纠删码条带大小 (k+m)。如果最高 列出的值至少为 ,池支持部署的 擦除奇偶校验设置。2 x EC:N

无中断扩展

添加新服务器池需要重新启动 大约在同一时间部署。

MinIO 强烈建议同时重新启动所有节点。最小IO操作 是原子的并且严格一致。因此,重新启动过程是 不会中断应用程序和日常操作。

不要执行“滚动”(例如一次一个节点)重新启动。

扩容配置

扩容前:

4台,每台4个驱动器

MINIO_VOLUMES=“https://minio{1…4}.example.net:9000/mnt/disk{1…4}/minio”

扩容后:

假设扩容新增8台(每台8个盘)

minio5.example.com minio9.example.com

minio6.example.com minio10.example.com

minio7.example.com minio11.example.com

minio8.example.com minio12.example.com

每台8个驱动器

/mnt/disk1/minio /mnt/disk5/minio

/mnt/disk2/minio /mnt/disk6/minio

/mnt/disk3/minio /mnt/disk7/minio

/mnt/disk4/minio /mnt/disk8/minio

MINIO_VOLUMES=“https://minio{1…4}.example.net:9000/mnt/disk{1…4}/minio https://minio{5…12}.example.net:9000/mnt/disk{1…8}/minio”

启动执行扩容

使用扩展配置重新启动 MinIO 部署

在部署中的每个节点上同时发出以下命令 要重新启动 MinIO 服务,请执行以下操作:

1
systemctl restart minio.service

使用以下命令确认服务处于联机状态且正常运行:

1
2
sudo systemctl status minio.service
journalctl -f -u minio.service

扩容方法的种类

集群扩容方法可分为两类:水平扩容垂直扩容

垂直扩容则指提升各节点自身的性能,例如增加节点的磁盘存储空间。直接采用垂直扩容方式扩容MinIO集群的节点磁盘空间,会为集群运行带来若干问题,官方也并不推荐

水平扩容,一般指通过增加节点数扩展系统性能;水平扩容包括:对等扩容和联邦扩容。

因此本文主要介绍MinIO的水平扩容方式中的对等扩容。

对等扩容

首先,MinIO的极简设计理念使得MinIO分布式集群并不支持向集群中添加单个节点并进行自动调节的扩容方式,这是因为加入单个节点后所引发的数据均衡以及纠删组划分等问题会为整个集群带来复杂的调度和处理过程,并不利于维护。因此,MinIO提供了一种对等扩容的方式,即要求增加的节点数和磁盘数均需与原集群保持对等。

例如原集群包含2个节点2块磁盘,则在扩容时必须同样增加2个节点2块磁盘(或为其倍数),以便系统维持相同的数据冗余SLA,从而极大地降低扩容的复杂性;

如上例,在扩容后,MinIO集群并不会对全部的4个节点进行完全的数据均衡,而是将原本的2个节点视作一个区域,新加入的2节点视作另一区域;

当有新对象上传时,集群将依据各区域的可用空间比例确定存放区域,在各区域内仍旧通过哈希算法确定对应的纠删组进行最终的存放。此外,集群进行一次对等扩容后,还可依据扩容规则继续进行对等扩容,但出于安全性考虑,集群的最大节点数一般不得超过32个。

对等扩容的优点在于配置操作简单易行。

通过一条命令即可完成扩容(注意:推荐使用连续的节点IP,并参照MinIO官网在扩容命令中使用{})。

水平扩容举例:

比如原来为两台每台两盘,可在新增两台每台两盘。

比如原来为4台每台4盘,可在新增4台每台4盘。

比如原来为4台每台4盘,可在新增8台每台8盘。

比如原来为4台每台16盘,可在新增4台每台16盘。

对等扩容的局限性在于

扩容需重启;

扩容存在限制,集群节点数一般不超过32个,这是由于MinIO集群通过分布式锁保证强一致性,若集群节点数过大,维护强一致性将带来性能问题。

其它

下面的写法多硬盘多节点部署是不可扩容的方式,下面是官方示例:

export MINIO_ACCESS_KEY=<ACCESS_KEY>

export MINIO_SECRET_KEY=<SECRET_KEY>

minio server http://192.168.1.11/export1 http://192.168.1.11/export2 \

           [http://192.168.1.11/export3](http://192.168.1.11/export3) [http://192.168.1.11/export4](http://192.168.1.11/export4) \\

           [http://192.168.1.12/export1](http://192.168.1.12/export1) [http://192.168.1.12/export2](http://192.168.1.12/export2) \\

           [http://192.168.1.12/export3](http://192.168.1.12/export3) [http://192.168.1.12/export4](http://192.168.1.12/export4) \\

           [http://192.168.1.13/export1](http://192.168.1.13/export1) [http://192.168.1.13/export2](http://192.168.1.13/export2) \\

           [http://192.168.1.13/export3](http://192.168.1.13/export3) [http://192.168.1.13/export4](http://192.168.1.13/export4) \\

           [http://192.168.1.14/export1](http://192.168.1.14/export1) [http://192.168.1.14/export2](http://192.168.1.14/export2) \\

           [http://192.168.1.14/export3](http://192.168.1.14/export3) [http://192.168.1.14/export4](http://192.168.1.14/export4)

官方参考:

https://min.io/docs/minio/linux/operations/install-deploy-manage/expand-minio-deployment.html#expand-minio-distributed

其它参考:

高性能分布式对象存储——MinIO实战操作(MinIO扩容)