最后更新于

MinIO如何扩容


使用MinIO作为分布式文件存储时,随着业务发展,扩容成为必然需求。本文将详细介绍MinIO多节点多驱动器部署下的扩容方法。

🏗️ 扩容原理

服务器池概念

MinIO支持通过添加新的服务器池来扩展现有的分布式部署:

  • 池扩展:每个池扩展集群的总可用存储容量
  • 故障域隔离:每个池都是独立的故障域
  • 分布式拓扑:每个MinIO服务器都有完整的拓扑图

重要限制

⚠️ 注意事项:

  • 扩展不提供BC/DR级保护
  • 完全丢失一个池会导致所有池的I/O停止
  • 池内纠删集丢失仲裁会导致数据丢失

💡 建议:使用站点复制提供BC-DR级故障转移支持。

📋 扩容要求

纠删码要求

MinIO要求每个池都满足部署纠删码设置:

  • 新池拓扑必须支持每个纠删集的最少驱动器数
  • 确保新服务器池能够满足部署的预期SLA

无中断扩展

  • 添加新服务器池需要同时重新启动所有节点
  • 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

驱动器配置:

/mnt/disk1/minio    /mnt/disk5/minio
/mnt/disk2/minio    /mnt/disk6/minio
/mnt/disk3/minio    /mnt/disk7/minio
/mnt/disk4/minio    /mnt/disk8/minio

扩容后的VOLUMES配置:

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 服务,请执行以下操作:

systemctl restart minio.service

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

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扩容)