Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践

Linux多节点多硬盘部署MinIO:分布式MinIO集群部署指南搭建高可用架构实践

作者头像
摘星.
发布于 2025-05-20 06:04:26
发布于 2025-05-20 06:04:26
67801
代码可运行
举报
文章被收录于专栏:博客专享博客专享
运行总次数:1
代码可运行

MinIO Cluster On Linux

通过MinIO在Linux上的安装与部署-CSDN博客我们可以得到一个单节点的MinIO服务,我们基于已有的服务,通过复制虚拟机的方式快速扩展为 MinIO 集群。以下是详细步骤:

1. 准备虚拟机节点

首先准备一台刚刚下载好minio安装包还未进行任何操作的的虚拟机进行克隆(操作详情请参考:Linux多节点网络配置_linux ifcfg-ens33 uuid-CSDN博客)

这里统一规划好主机名和配置文件

节点名称

IP地址

操作系统

数据目录

备注

Node201

192.168.33.201

CentOS_7_2009

/mnt/data

初始机

Node202

192.168.33.202

CentOS_7_2009

/mnt/data

高可用节点

Node203

192.168.33.203

CentOS_7_2009

/mnt/data

高可用节点

Node204

192.168.33.204

CentOS_7_2009

/mnt/data

高可用节点

Node205

192.168.33.205

CentOS_7_2009

--

Nginx集群转发点

Nginx代理MinIO集群参考:Nginx代理MinIO集群-CSDN博客

在初始机上统一编辑下列文件

编辑 /etc/hosts 文件,添加所有节点的 IP 和主机名映射

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/hosts

# 添加各个节点和主机名的映射
192.168.33.201 Node201
192.168.33.202 Node202
192.168.33.203 Node203
192.168.33.204 Node204

编辑 /etc/default/minio 文件,更新 MINIO_VOLUMES 配置,指定所有节点的存储路径:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/default/minio

# 更新MINIO_VOLUMES 配置
MINIO_ROOT_USER="minioadmin"
MINIO_ROOT_PASSWORD="minioadmin"
MINIO_VOLUMES="http://node201/mnt/data http://node202/mnt/data http://node203/mnt/data http://node204/mnt/data"
MINIO_OPTS="--address :9000 --console-address :9001"

为每台虚拟机设置唯一的主机名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hostnamectl set-hostname Node201  # 在 Node201 上执行
hostnamectl set-hostname Node202  # 在 Node202 上执行
hostnamectl set-hostname Node203  # 在 Node203 上执行
hostnamectl set-hostname Node204  # 在 Node204 上执行

2. 挂载数据目录到独立磁盘

MinIO 集群节点必须挂载到独立磁盘中,MinIO的纠删码模式要求每个节点的数据目录必须挂载到 独立的物理磁盘(或独立的虚拟磁盘卷),原因如下:

  1. 数据冗余:纠删码依赖跨节点和跨驱动器的数据分布,确保数据高可用性。
  2. 避免单点故障:若多个目录挂载到同一磁盘,磁盘故障会导致所有数据丢失,违背冗余设计。
  3. 性能优化:独立磁盘提供更高 I/O 吞吐量。

这里在准备好的虚拟机节点上一个一个操作,不能统一操作之后直接克隆,这样不符合MinIO的纠删码模式,从而导致启动不成功。

2.1. 添加新磁盘

如下图,根据提示可以添加一块新的磁盘

2.2. 检查系统中已识别的磁盘
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lsblk

/dev/sda系统磁盘及其子分区属于系统根分区

/dev/sdb属于新添加的磁盘

2.3. 检查MinIO数据目录所在分区

检查MinIO数据目录/mnt/data的所在的分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df -h /mnt/data

可以看到当前目录是属于系统根分区的

2.4. 格式化新磁盘

创建分区

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fdisk /dev/sdb

在fdisk交互界面,输入以下命令:

  • n:创建新分区。
  • p:选择主分区。
  • 1:分区编号为 1。
  • Enter:使用默认的起始扇区。
  • Enter:使用默认的结束扇区。
  • w:保存并退出。

完成磁盘分区

格式化分区为ext4系统

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkfs.ext4 /dev/sdb1

ext4 是 Linux 系统中广泛使用的一种文件系统,它具备高可靠性、高性能以及支持大文件和大分区等优点。

2.5. 挂载数据目录到新磁盘

挂载/mnt/data到新分区,查看挂载情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#如果还未创建数据目录首先创建
mkdir /mnt/data

mount /dev/sdb1 /mnt/data
df -h /mnt/data

可以看到/mnt/data已经挂载到新分区

2.6. 修改数据目录的所有者/组/权限

默认情况下,挂载瞬间:当磁盘(如 /dev/sdb1)挂载到目录(如 /mnt/data)时,该目录的权限会立即被覆盖,变为磁盘文件系统根目录的权限(默认通常是 root:root

需要我们手动修改磁盘文件系统本身的权限,确保/mnt/data的权限是minio-user:minio-user 755,这样改动后我们的数据目录的权限就时持久的了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看挂载后的目录权限和所有者
ls -ld /mnt/data

mkdir -p /mnt/data
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown -R minio-user:minio-user /mnt/data
chmod -R 755 /mnt/data

# 查看设置权限后的目录权限和所有者
ls -ld /mnt/data
2.7. 自动挂载数据目录

获取新分区/dev/sdb1的UUID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
blkid /dev/sdb1

编辑/etc/fstab文件,在其末尾添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/fstab
#将挂载目录所有者设为minio-user用户,将组设为minio-user组,权限为775文件为664
UUID=your-disk-uuid /mnt/data ext4 defaults 0 0
2.8. 检查数据目录是否已挂载
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df -h /mnt/data
#如果未挂载在新分区,那么手动挂载一下
mount /dev/sdb1 /mnt/data

3. 启动前的检查

3.1. 检查各节点之间的网络连通性

检查/etc/hosts文件,是否包含了所有节点的IP和主机名映射,相互ping通

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /etc/hosts
#在各节点上相互ping测试连通性
ping node201
ping node202
ping node203
ping node204
3.2. 检查MinIO的配置文件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cat /etc/default/minio
3.3. 修改MinIO服务配置

参照下方官方的服务配置模版修改,最简单暴力的方式是直接删除文件再重新创建

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
rm /usr/lib/systemd/system/minio.service
vim /usr/lib/systemd/system/minio.service
代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
[Unit]
Description=MinIO
Documentation=https://minio.org.cn/docs/minio/linux/index.html
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio

[Service]
WorkingDirectory=/usr/local

User=minio-user
Group=minio-user
ProtectProc=invisible

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES

# MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
# This may improve systemctl setups where other services use `After=minio.server`
# Uncomment the line to enable the functionality
# Type=notify

# Let systemd restart this service always
Restart=always

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Specifies the maximum number of threads this process can create
TasksMax=infinity

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=infinity
SendSIGKILL=no

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})
3.4. 重新加载服务配置

检查完毕之后,在每个节点上重新加载配置,确保所有的配置生效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl daemon-reload
3.5. 检查防火墙是否关闭

如果出现下方无法访问节点之间的9000端口问题,那么就是防火墙阻挡了节点之间的端口访问,需要手动关闭

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl stop firewalld
systemctl disable firewalld

4. 启动 MinIO 集群

在每台虚拟机上重新启动 MinIO 服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl stop minio
systemctl start minio
systemctl enable minio
#查看详细日志
journalctl -u minio -b

5. 验证集群状态

访问 MinIO Web 控制台:

  • 打开浏览器,访问 http://<任意节点IP>:9000
  • 使用 minioadminminioadmin 登录。

检查集群健康状态:

  • 进入 Monitoring,检查集群健康状态。

使用 MinIO 客户端(mc)验证集群:

  • 安装 mc
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
  • 配置集群别名:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc alias set minio2 http://192.168.132.129:9000 minioadmin minioadmin
  • 查看集群信息:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc admin info minio2

6. 验证高可用性

这里将会使用mc测试MinIO集群的高可用性

  1. 安装mc
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
#验证是否安装成功
mc --version
  1. 为某个节点配置别名(方便管理多个集群,并显著提高安全性,不用每次都将用户名、密码、访问地址写在命令行中)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc alias set minio1 http://192.168.132.128:9000 minioadmin minioadmin
mc alias set minio2 http://192.168.132.129:9000 minioadmin minioadmin
mc alias set minio3 http://192.168.132.130:9000 minioadmin minioadmin
  1. 验证别名配置情况
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc admin info minio3
  1. 创建Bucket并上传文件

创建一个Bucket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc mb minio1/test-bucket

上传一个文件到test-bucket

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo "This is a test file111." > test-file111.txt
mc cp test-file111.txt minio1/test-bucket/

列出test-bucket中的文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc ls minio1/test-bucket
  1. 模拟节点故障

关闭某一节点(例如:minio2)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@minio2 ~]# sudo systemctl stop minio

检测MinIO集群状态,并访问MinIO集群

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc admin info minio3
mc ls minio1/test-bucket
  1. 验证数据一致性

恢复节点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@minio2 ~]# sudo systemctl start minio

下载之前上传的文件,验证内容是否正确

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mc admin info minio3
mc cp minio1/test-bucket/test-file222.txt ./downloaded-file222.txt
cat downloaded-file222.txt
  1. 总结

通过以上步骤,已经成功测试了 MinIO 集群的高可用性。以下是一些关键点:

  • 高可用性:即使某个节点故障,MinIO 仍然可以通过其他节点提供服务。
  • 数据一致性:MinIO 会自动同步数据,确保所有节点上的数据一致。
  • 读写操作:在集群正常运行的情况下,可以正常上传、下载和列出文件。

7. 其他配置

7.1. 防火墙配置

如果启用了防火墙,开放 MinIO 的端口(默认 9000):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
7.2. 监控和日志
  • 查看 MinIO 日志:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo journalctl -u minio.service -f

8. 总结

通过以上步骤,已成功基于已有的 MinIO 服务,扩展为一个 MinIO 集群。该集群具有高可用性和容错性,适合生产环境使用。如果有任何问题,请检查日志或参考 MinIO 官方文档

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
20张图手把手教你搭建并优化云原生模式下的多节点Minio分布式文件系统
作者:冰河 星球:http://m6z.cn/6aeFbs 文章汇总:https://binghe.gitcode.host/md/all/all.html
冰河
2023/12/26
1.2K0
20张图手把手教你搭建并优化云原生模式下的多节点Minio分布式文件系统
分布式文件系统 Minio
Minio 是一个基于 Apache License v2.0 开源协议的对象存储服务。它兼容 AWS S3 云存储服务接口,非常适合存储大容量非结构化的数据,如图片、视频、日志文件、备份数据等,而一个对象文件可以是任意大小,从几 kb 到最大 5T 不等。
陳斯托洛夫斯記
2024/08/07
1.7K0
云原生 | 从零开始,Minio 高性能分布式对象存储快速入手指南
描述: 对象存储(Object Storage)是一种存储数据的计算机体系结构,它以对象的形式存储和管理数据。与传统的文件系统和块存储不同,对象存储将数据作为对象存储在分布式的存储集群中,每个对象都有一个唯一的标识符(通常是一个URL),并且可以通过这个标识符来访问和检索数据。
全栈工程师修炼指南
2023/10/31
10.3K1
云原生 | 从零开始,Minio 高性能分布式对象存储快速入手指南
Linux单节点单硬盘部署MinIO:安装部署MinIO对象存储服务实战指南
以下是通过 yum 方式在 Linux 上安装和部署 MinIO 的详细步骤。我们将使用 MinIO 官方提供的 RPM 包进行安装。
摘星.
2025/05/20
6290
Linux单节点单硬盘部署MinIO:安装部署MinIO对象存储服务实战指南
minio安装及集群部署
MINIO系列之二:部署MINIO4节点分布式服务并用nginx做Web负载均衡_哔哩哔哩_bilibili
用户8447427
2023/10/18
3.4K0
docker搭建minio集群
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
从大数据到人工智能
2022/05/27
2.7K0
docker搭建minio集群
在BlogCore中,上传附件到MinIO分布式文件服务器
在上篇文章中,我们说到了Seaweedfs,通过原理,安装以及使用,从0到1的了解了这个老牌的分布式文件存储服务,那无独有偶,这篇咱们说说另一个高性能的分布式文件服务器——MinIO,http://docs.minio.org.cn/。
老张的哲学
2023/08/23
6980
在BlogCore中,上传附件到MinIO分布式文件服务器
分布式minio搭建指南
分布式Minio可以让你将多块硬盘(甚至在不同的机器上)组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式Minio避免了单点故障。
从大数据到人工智能
2022/01/19
2.2K0
《Nginx反向代理MinIO集群全实战:负载均衡配置、SELinux安全策略与生产环境调优指南》
虽然MinIO集群内置了负载均衡和高可用,但是用Nginx代理MinIO集群还有其他的好处:
摘星.
2025/05/20
3490
《Nginx反向代理MinIO集群全实战:负载均衡配置、SELinux安全策略与生产环境调优指南》
对象存储:基于docker-compose 快速部署 MinIO
一、概述二、MinIO 与 Ceph 对比1)架构设计对比2)数据一致性对比3)部署和管理对比4)生态系统和兼容性对比三、前期准备1)部署 docker2)部署 docker-compose四、创建网络五、MinIO 编排部署1)下载 MinIO 安装包2)配置3)启动脚本 bootstrap.sh4)构建镜像 Dockerfile5)编排 docker-compose.yaml6)开始部署7)简单测试验证8)web 访问
Freedom123
2024/03/29
2.5K0
开源分布式对象存储-MinIO 顶
Minio可能在国内知道和用的人不是很多,我第一次接触Minio是也是当时我们需要使用Spinnaker集群来管理和维护内部的Kubernetes集群,而Spinnaker的中的持久化存储就使用的是Minio Spinnaker集群搭建。
BGBiao
2020/02/18
4.5K3
开源分布式对象存储-MinIO
                                                                            顶
ceph分布式存储-增加/删除 OSD
要增加一个 OSD,要依次创建数据目录、把硬盘挂载到数据目录、把 OSD 加入集群、然后把它加入 CRUSH Map。
Lucien168
2020/07/20
5.4K0
分布式存储glusterfs原理,部署及k8s, Heketi集成
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上。目前意义上的分布式文件系统大多都是由多个节点计算机构成,结构上是典型的客户机/服务器模式。流行的模式是当客户机需要存储数据时,服务器指引其将数据分散的存储到多个存储节点上,以提供更快的速度,更大的容量及更好的冗余特性;
iginkgo18
2021/10/22
5.2K3
基于docker的minio集群部署
数据库设置自动挂载,挂载点/work/work/minio-cluster/data/export(n)
堕落飞鸟
2022/02/24
2.7K0
minio节点扩展_多节点部署定时任务
gitee:https://gitee.com/pythonloser/springboot-minio/tree/master
全栈程序员站长
2022/11/08
2.9K0
使用 [MinIO] 搭建 S3 兼容的云存储服务
MinIO 是一个高性能的、S3 协议兼容的对象存储服务器,适合自建文件云存储,支持多用户、多桶、分布式部署。
一粒花椒
2025/03/25
8330
磁盘高可用解决方案(DBA).md
官方网站: Q:什么是Drbd? 答:分布式复制块设备(Drbd,Dirtributed Replicated Block Device)是基于软件的,无共享,复制的存储解决方案以及在块设备在不同高可用服务器对之间同步和镜像数据软件,解决磁盘单点故障(般情况下只支持2个节点),通过它可用实现在网络中两台服务器之间进行块设备级别的实时或异步镜像或者同步复制,类似rsync+inotify架构项目软件:
全栈工程师修炼指南
2022/09/28
8200
磁盘高可用解决方案(DBA).md
磁盘高可用解决方案(DBA).md
官方网站: Q:什么是Drbd? 答:分布式复制块设备(Drbd,Dirtributed Replicated Block Device)是基于软件的,无共享,复制的存储解决方案以及在块设备在不同高可用服务器对之间同步和镜像数据软件,解决磁盘单点故障(般情况下只支持2个节点),通过它可用实现在网络中两台服务器之间进行块设备级别的实时或异步镜像或者同步复制,类似rsync+inotify架构项目软件:
全栈工程师修炼指南
2020/10/23
1.4K0
磁盘高可用解决方案(DBA).md
外包精通--0成本学习IT运维--MinIO对象存储单机部署至K8s
使用外包精通--0成本学习IT运维kubespray--master高可用方案部署的k8s测试环境
Godev
2024/04/25
4310
外包精通--0成本学习IT运维--MinIO对象存储单机部署至K8s
Gitlab+Drbd高可用方案(主备模式)
直接在清华大学镜像站下载:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/
DevOps云学堂
2019/10/18
8.1K0
Gitlab+Drbd高可用方案(主备模式)
推荐阅读
相关推荐
20张图手把手教你搭建并优化云原生模式下的多节点Minio分布式文件系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档