Skip to content

集群扩容

官方文档

对等扩容

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

  • 例如原集群包含2个节点2块磁盘,则在扩容时必须同样增加2个节点2块磁盘(或为其倍数),以便系统维持相同的数据冗余SLA,从而极大地降低扩容的复杂性;
  • 如上例,在扩容后,MinIO集群并不会对全部的4个节点进行完全的数据均衡,而是将原本的2个节点视作一个区域新加入的2节点视作另一区域
  • 当有新对象上传时,集群将依据各区域的可用空间比例确定存放区域,在各区域内仍旧通过哈希算法确定对应的纠删组进行最终的存放。此外,集群进行一次对等扩容后,还可依据扩容规则继续进行对等扩容,但出于安全性考虑,集群的最大节点数一般不得超过32个

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

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

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

联邦扩容

MinIO官方提供了另一种扩容机制——联邦扩容,即通过引入etcd,将多个MinIO分布式集群在逻辑上组成一个联邦,对外以一个整体提供服务,并提供统一的命名空间。MinIO联邦集群的架构如下图所示:

在这里插入图片描述

  • 其中,etcd是一个开源的分布式键值存储数据库,在联邦中用于记录存储桶IP地址
  • 联邦内的各个集群其数据存储以及一致性维护仍由各集群自行管理,联邦只是对外提供一个整体逻辑视图。
  • 通过连接到联邦中任一集群的任一节点,可以查询并访问联邦内所有集群的全部数据,由此获得了逻辑上的空间扩大感。
  • 但实际上,对于一个外部应用访问,联邦需依赖etcd定位到存储桶的实际存储节点,再进行数据访问,联邦则对外屏蔽了桶IP查找和定位过程,从而在逻辑上对外形成了一个统一整体。因此,etcd实际上起到了类似路由寻址的效果

MinIO联邦集群的数据访问机制具体如下:

  • 客户端应用向联邦集群发送创建存储桶请求,桶名为bucket1;
  • 联邦会将bucket1实际所在的集群节点IP地址写入etcd中,例如bucket1实际将存储于联邦中的集群1上,而集群1包含2个节点,其节点IP地址分别为192.168.182.112和192.168.182.113,则etcd中将写入如下两条记录:

img

  • 客户端应用向联邦请求上传1个对象至bucket1;

  • 联邦会先查询etcd,定位到bucket1的实际存储节点103和104,再进行相应的上传操作。

相较于对等扩容,联邦扩容的优点在于:

  • 联邦中的各集群不要求节点数和磁盘数的对等;
  • 联邦可以无限扩展,不断加入新集群;
  • 若联邦中某个集群出现故障,该故障将不影响联邦中的其他集群提供服务。其缺点为需要额外引入etcd,且配置过程较为复杂。