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

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

目录

MinIO Cluster On Linux

1. 准备虚拟机节点

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

2.1. 添加新磁盘

2.2. 检查系统中已识别的磁盘

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

2.4. 格式化新磁盘

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

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

2.7. 自动挂载数据目录

2.8. 检查数据目录是否已挂载

3. 启动前的检查

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

3.2. 检查MinIO的配置文件

3.3. 修改MinIO服务配置

3.4. 重新加载服务配置

3.5. 检查防火墙是否关闭

4. 启动 MinIO 集群

5. 验证集群状态

6. 验证高可用性

7. 其他配置

7.1. 防火墙配置

7.2. 监控和日志

8. 总结


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 和主机名映射

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

image.gif

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

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"

image.gif

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

hostnamectl set-hostname Node201  # 在 Node201 上执行
hostnamectl set-hostname Node202  # 在 Node202 上执行
hostnamectl set-hostname Node203  # 在 Node203 上执行
hostnamectl set-hostname Node204  # 在 Node204 上执行

image.gif

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

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

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

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

2.1. 添加新磁盘

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

image.gif 编辑

2.2. 检查系统中已识别的磁盘

lsblk

image.gif

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

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

image.gif 编辑

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

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

df -h /mnt/data

image.gif

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

image.gif 编辑

2.4. 格式化新磁盘

创建分区

fdisk /dev/sdb

image.gif

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

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

完成磁盘分区

image.gif 编辑

格式化分区为ext4系统

mkfs.ext4 /dev/sdb1

image.gif

image.gif 编辑

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

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

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

#如果还未创建数据目录首先创建
mkdir /mnt/data
mount /dev/sdb1 /mnt/data
df -h /mnt/data

image.gif

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

image.gif 编辑

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

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

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

# 查看挂载后的目录权限和所有者
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

image.gif

image.gif 编辑

2.7. 自动挂载数据目录

获取新分区/dev/sdb1的UUID

blkid /dev/sdb1

image.gif

image.gif 编辑

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

vim /etc/fstab
#将挂载目录所有者设为minio-user用户,将组设为minio-user组,权限为775文件为664
UUID=your-disk-uuid /mnt/data ext4 defaults 0 0

image.gif

2.8. 检查数据目录是否已挂载

df -h /mnt/data
#如果未挂载在新分区,那么手动挂载一下
mount /dev/sdb1 /mnt/data

image.gif

image.gif 编辑

3. 启动前的检查

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

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

cat /etc/hosts
#在各节点上相互ping测试连通性
ping node201
ping node202
ping node203
ping node204

image.gif

image.gif 编辑

3.2. 检查MinIO的配置文件

cat /etc/default/minio

image.gif

image.gif 编辑

3.3. 修改MinIO服务配置

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

rm /usr/lib/systemd/system/minio.service
vim /usr/lib/systemd/system/minio.service

image.gif

[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})

image.gif

3.4. 重新加载服务配置

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

systemctl daemon-reload

image.gif

3.5. 检查防火墙是否关闭

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

systemctl stop firewalld
systemctl disable firewalld

image.gif

image.gif 编辑

4. 启动 MinIO 集群

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

systemctl stop minio
systemctl start minio
systemctl enable minio
#查看详细日志
journalctl -u minio -b

image.gif

5. 验证集群状态

访问 MinIO Web 控制台:

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

检查集群健康状态:

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

image.gif 编辑

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

  • 安装 mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/

image.gif

  • 配置集群别名:
mc alias set minio2 http://192.168.132.129:9000 minioadmin minioadmin

image.gif

image.gif 编辑

  • 查看集群信息:
mc admin info minio2

image.gif

image.gif 编辑

6. 验证高可用性

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

  1. 安装mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
#验证是否安装成功
mc --version

image.gif

image.gif 编辑

  1. 为某个节点配置别名(方便管理多个集群,并显著提高安全性,不用每次都将用户名、密码、访问地址写在命令行中)
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

image.gif

  1. 验证别名配置情况
mc admin info minio3

image.gif

image.gif 编辑

  1. 创建Bucket并上传文件

创建一个Bucket

mc mb minio1/test-bucket

image.gif

上传一个文件到test-bucket

echo "This is a test file111." > test-file111.txt
mc cp test-file111.txt minio1/test-bucket/

image.gif

image.gif 编辑

列出test-bucket中的文件

mc ls minio1/test-bucket

image.gif

image.gif 编辑

  1. 模拟节点故障

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

[root@minio2 ~]# sudo systemctl stop minio

image.gif

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

mc admin info minio3
mc ls minio1/test-bucket

image.gif

image.gif 编辑

  1. 验证数据一致性

恢复节点

[root@minio2 ~]# sudo systemctl start minio

image.gif

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

mc admin info minio3
mc cp minio1/test-bucket/test-file222.txt ./downloaded-file222.txt
cat downloaded-file222.txt

image.gif

image.gif 编辑

  1. 总结

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

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

7. 其他配置

7.1. 防火墙配置

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

sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

image.gif

7.2. 监控和日志

  • 查看 MinIO 日志:
sudo journalctl -u minio.service -f

image.gif

8. 总结

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

作者联系方式vx:2743642415

目录
相关文章
|
7天前
|
消息中间件 存储 Kafka
一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
本文详细介绍了分布式消息中间件RocketMQ的核心概念、部署方式及使用方法。RocketMQ由阿里研发并开源,具有高性能、高可靠性和分布式特性,广泛应用于金融、互联网等领域。文章从环境搭建到消息类型的实战(普通消息、延迟消息、顺序消息和事务消息)进行了全面解析,并对比了三种消费者类型(PushConsumer、SimpleConsumer和PullConsumer)的特点与适用场景。最后总结了使用RocketMQ时的关键注意事项,如Topic和Tag的设计、监控告警的重要性以及性能与可靠性的平衡。通过学习本文,读者可掌握RocketMQ的使用精髓并灵活应用于实际项目中。
215 6
 一文带你从入门到实战全面掌握RocketMQ核心概念、架构部署、实践应用和高级特性
|
2月前
|
存储 运维 Serverless
千万级数据秒级响应!碧桂园基于 EMR Serverless StarRocks 升级存算分离架构实践
碧桂园服务通过引入 EMR Serverless StarRocks 存算分离架构,解决了海量数据处理中的资源利用率低、并发能力不足等问题,显著降低了硬件和运维成本。实时查询性能提升8倍,查询出错率减少30倍,集群数据 SLA 达99.99%。此次技术升级不仅优化了用户体验,还结合AI打造了“一看”和“—问”智能场景助力精准决策与风险预测。
246 69
|
2月前
|
存储 人工智能 开发框架
MCP 实践:基于 MCP 架构实现知识库答疑系统
文章探讨了AI Agent的发展趋势,并通过一个实际案例展示了如何基于MCP(Model Context Protocol)开发一个支持私有知识库的问答系统。
MCP 实践:基于 MCP 架构实现知识库答疑系统
|
1月前
|
缓存 算法 网络协议
IP代理技术原理深度解析:从基础架构到应用实践
IP代理是网络通信中的关键技术,通过构建中间层实现请求转发与信息过滤。其核心价值体现在身份伪装、访问控制和性能优化三个方面。文章详细解析了HTTP与SOCKS协议的工作机制,探讨了代理服务器从传统单线程到分布式集群的技术演进,并分析了在网络爬虫、跨境电商及企业安全等场景的应用。同时,面对协议识别、性能瓶颈和隐私合规等挑战,提出了多种解决方案。未来,IP代理将融合边缘计算、AI驱动优化及量子安全加密等趋势,持续发展为支撑现代互联网的重要基础设施。
97 2
|
23天前
|
人工智能 监控 前端开发
基于 Next.js 的书法字体生成工具架构设计与 SSR 优化实践
本项目是一款书法字体生成工具,采用 Next.js 14(App Router)与 Tailwind CSS 构建前端,阿里云 Serverless 部署后端。通过混合渲染策略(SSG/SSR/CSR)、Web Worker 异步计算及 CDN 字体分片加载优化性能。服务端借助阿里云函数计算处理计算密集型任务,将平均耗时从 1200ms 降至 280ms,支持 1000+ QPS。动态路由与 ARMS 监控提升工程化水平,未来计划引入 WebGPU 和 AI 字体风格迁移技术,进一步优化用户体验。
|
6月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
7月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
160 3
|
2月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
188 12
|
7月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
6月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
494 70
从单体到微服务:如何借助 Spring Cloud 实现架构转型