要将已有数据的MinIO节点与新加入的三个节点组成集群,需遵循MinIO的对等扩容原则,确保节点和磁盘数量符合纠删码要求,并注意数据平衡与集群一致性。以下是具体步骤和关键细节:
一、扩容前提条件
-
节点与磁盘数量匹配
- MinIO要求扩容时新增的节点数和磁盘数必须与原集群保持对等。例如,原集群为1节点4磁盘,则需新增3节点(共4节点),且每个节点挂载相同数量的磁盘(如4磁盘/节点)。
- 纠删码要求:每个纠删组至少需
4
至16
块磁盘,新增节点需满足原集群的纠删码配置(如EC:4
表示4数据块+4校验块)。
-
环境一致性
- 网络:所有节点需双向通信,使用相同端口(默认
9000
),建议通过负载均衡(如Nginx)代理请求。 - 主机名与磁盘顺序:节点主机名需连续(如
minio1
到minio4
),磁盘挂载路径需按顺序命名(如/mnt/disk{1...4}
)。
- 网络:所有节点需双向通信,使用相同端口(默认
二、扩容操作步骤
1. 准备新节点
- 在每个新节点安装MinIO,确保版本与原集群一致。
- 挂载磁盘并格式化(推荐XFS),例如:
mkfs.xfs /dev/sdb -L DISK1 mkdir -p /mnt/disk1 echo "LABEL=DISK1 /mnt/disk1 xfs defaults,noatime 0 2" >> /etc/fstab mount -a
2. 启动集群(包含新旧节点)
- 使用统一启动命令,列出所有节点(含原有节点和新节点)的地址和磁盘路径:
export MINIO_ROOT_USER=admin export MINIO_ROOT_PASSWORD=admin123 minio server http://minio{1...4}/mnt/disk{1...4} --console-address ":9001"
- 关键点:
- 所有节点需同时启动,避免滚动重启导致数据不一致。
- 若原节点已单独运行,需先停止服务,再与新节点一起启动。
3. 验证集群状态
- 使用
mc admin info
检查节点和磁盘状态:mc alias set mycluster http://minio1:9000 admin admin123 mc admin info mycluster
- 确认所有节点显示为
Online
,且数据分布均衡。
三、数据平衡与访问机制
-
数据分布策略
- MinIO不会立即迁移旧数据到新节点,而是将新旧节点划分为不同区域。新上传的对象按各区域可用空间比例分配,区域内通过哈希算法选择纠删组存储。
- 旧数据仍保留在原节点,可通过手动迁移或等待自然均衡(新写入触发)。
-
客户端访问
- 客户端可连接任意节点(去中心化架构),建议通过DNS轮询或负载均衡分散请求。
四、注意事项
-
原子性操作
- 扩容需所有节点同时重启,避免部分节点更新导致元数据冲突。
-
硬件同构性
- 新节点磁盘类型、网络带宽应尽量与原节点一致,避免性能瓶颈。
-
备份与监控
- 扩容前备份原数据,扩容后监控磁盘使用率和节点健康状态。
-
纠删码限制
- 集群总节点数不宜超过
32
个,否则强一致性维护会影响性能。
- 集群总节点数不宜超过
五、替代方案:联邦扩容
若无法满足对等扩容条件(如仅需增加少量节点),可考虑联邦扩容:
- 引入
etcd
集群,将原节点与新节点作为独立集群加入联邦。 - 各集群维护自身数据,联邦提供统一命名空间。
- 配置示例:
export MINIO_ETCD_ENDPOINTS="http://etcd1:2379,http://etcd2:2379" minio server http://minio{1...4}/mnt/disk{1...4} --console-address ":9001"
总结
- 推荐对等扩容:确保节点/磁盘数对等,操作简单且兼容性高。
- 联邦扩容:适用于异构集群或无限扩展需求,但需额外维护
etcd
。 - 数据迁移:扩容后旧数据不会自动迁移,需通过工具(如
mc mirror
)或等待新写入均衡。