Minio分布式集群如何实现替换一个节点

 更新时间:2025年05月29日 09:07:00   作者:学亮编程手记  
这篇文章主要介绍了Minio分布式集群如何实现替换一个节点问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在 MinIO 的分布式集群中,如果一个节点宕机,你可以通过 替换节点(Node Replacement) 来恢复集群的健康状态,同时确保数据完整性。

以下是完整的操作步骤:

前提条件

  1. 集群状态:假设你的 MinIO 集群有 4 个节点(minio{1...4}),挂载路径为 /data,其中 minio4 宕机,需要替换为新节点 minio4-new
  2. MinIO 版本:确保新节点使用与集群相同的 MinIO 版本。
  3. 数据目录结构:新节点的磁盘布局必须与旧节点一致(如 /data 路径相同)。
  4. DNS / Hosts 文件:确保新节点的主机名(minio4-new)能被其他节点解析(或直接使用 IP)。

步骤 1:检查当前集群状态

在任意健康节点上执行:

mc admin info myminio/

输出示例:

●  192.168.1.1:9000  ONLINE   # minio1
●  192.168.1.2:9000  ONLINE   # minio2
●  192.168.1.3:9000  ONLINE   # minio3
○  192.168.1.4:9000  OFFLINE  # minio4 (宕机)

确认 minio4 已离线,且集群仍可读写(剩余节点数 ≥ 纠删码允许的最小节点数)。

步骤 2:准备新节点

在新节点 minio4-new 上:

安装 MinIO(版本必须与集群一致):

wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/

创建数据目录(必须与旧节点相同):

mkdir -p /data

步骤 3:更新集群配置

在任一健康节点(如 minio1)上,生成 config.json 备份:

mc admin config export myminio/ > config.json

编辑 config.json,将旧节点 minio4 的地址替换为新节点 minio4-new 的地址:

{
  "args": {
    "servers": [
      "http://192.168.1.1:9000/data",  # minio1
      "http://192.168.1.2:9000/data",  # minio2
      "http://192.168.1.3:9000/data",  # minio3
      "http://192.168.1.5:9000/data"   # minio4-new (新节点)
    ]
  }
}

应用新配置:

mc admin config import myminio/ < config.json

步骤 4:重启集群

重启所有节点(确保配置生效):

sudo systemctl restart minio

验证集群状态

mc admin info myminio/

输出应显示 minio4-new 正在同步数据:

●  192.168.1.5:9000  HEALING  # minio4-new (正在恢复)

步骤 5:触发数据修复

MinIO 会自动启动 后台修复(Healing),但你可以手动触发:

mc admin heal -r myminio/

检查修复进度:

mc admin heal info myminio/

等待所有分片同步完成,确保 minio4-new 状态变为 ONLINE

验证数据完整性

检查桶列表

mc ls myminio/

校验文件

mc diff myminio/old-bucket myminio/new-bucket

使用 mc admin heal 确保无残留错误

关键注意事项

  1. 纠删码保护:只要宕机节点数 ≤ 奇偶校验分片数(如 4 节点 EC:2 可容忍 2 节点故障),数据不会丢失。
  2. 同步期间性能:修复过程可能增加集群负载,建议在低峰期操作。
  3. 监控:使用 mc admin infomc admin heal 持续监控状态。

总结

  • 替换节点:修改集群配置,加入新节点,重启集群。
  • 数据修复:MinIO 会自动修复丢失的分片,确保数据完整性。
  • 验证:检查集群状态和文件一致性。

这样,你的 MinIO 集群将恢复完整冗余,并保持数据可读写!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot2入门自动配置原理及源码分析

    SpringBoot2入门自动配置原理及源码分析

    这篇文章主要为大家介绍了SpringBoot2入门自动配置原理及源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • IDEA关于.properties资源文件的编码调整问题

    IDEA关于.properties资源文件的编码调整问题

    这篇文章主要介绍了IDEA关于.properties资源文件的编码调整问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • java实现简易点菜器

    java实现简易点菜器

    这篇文章主要为大家详细介绍了java实现简易点菜器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • Spring boot自定义http反馈状态码详解

    Spring boot自定义http反馈状态码详解

    这篇文章主要给大家介绍了Spring boot自定义http反馈状态码的相关资料,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Spring Batch远程分区的本地Jar包模式的代码详解

    Spring Batch远程分区的本地Jar包模式的代码详解

    这篇文章主要介绍了Spring Batch远程分区的本地Jar包模式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法

    文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法

    这篇文章主要介绍了文件路径正确,报java.io.FileNotFoundException异常的原因及解决办法的相关资料,需要的朋友可以参考下
    2016-04-04
  • Java实现FutureTask的示例详解

    Java实现FutureTask的示例详解

    在并发编程当中我们最常见的需求就是启动一个线程执行一个函数去完成我们的需求,而在这种需求当中,我们需要函数有返回值。Java给我们提供了这种机制,去实现这一个效果:FutureTask。本文为大家准备了Java实现FutureTask的示例代码,需要的可以参考一下
    2022-08-08
  • Spring IOC与DI核心重点分析

    Spring IOC与DI核心重点分析

    IOC也是Spring的核心之一了,之前学的时候是采用xml配置文件的方式去实现的,后来其中也多少穿插了几个注解,但是没有说完全采用注解实现。那么这篇文章就和大家分享一下,全部采用注解来实现IOC + DI
    2022-10-10
  • JAVA项目常用异常处理汇总

    JAVA项目常用异常处理汇总

    这篇文章主要介绍了JAVA项目常用异常处理汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • java读取json文件的2种方式例子

    java读取json文件的2种方式例子

    这篇文章主要给大家介绍了关于java读取json文件的2种方式,在开发过程中有时会遇到需要读取.json文件的需求,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07

最新评论