跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Shell / Bash

基于 LVM 部署 MinIO 分布式高可用集群

基于 LVM 逻辑卷部署 MinIO 分布式高可用集群的全过程。主要步骤包括环境准备、LVM 存储卷创建与格式化、MinIO 二进制文件安装、Systemd 服务配置及环境变量设置。此外,还通过 HAProxy 配置反向代理实现负载均衡与健康检查,确保集群的高可用性与数据安全性。

ByteFlow发布于 2026/3/27更新于 2026/10/25108 浏览
基于 LVM 部署 MinIO 分布式高可用集群

一、分布式集群介绍

分布式 MinIO 将在不同的机器上的多块硬盘组成一个对象存储服务。由于硬盘分布在不同的节点上,分布式 MinIO 有更好的性能,同时避免了单点故障。

文章配图

1. 分布式 MinIO 优势

  • 数据保护:分布式 MinIO 采用纠删码来防范多个节点宕机和位衰减 (bit rot)。分布式 MinIO 至少需要 4 个硬盘,使用分布式 MinIO 会自动引入纠删码功能。
  • 高可用:单机 MinIO 服务存在单点故障,相反,如果是一个有 N 块硬盘的分布式 MinIO,只要有 N/2 硬盘在线,数据就是安全的。不过你需要至少有 N/2+1 个硬盘来创建新的对象。例如,一个 16 节点 MinIO 集群,每个节点 16 块硬盘,就算 8 台服务器宕机,这个集群仍然可读的,不过需要 9 台服务器才能写数据。
  • 性能:多个节点负载均衡,提升性能。
  • 一致性:MinIO 在分布式和单机模式下,所有读写操作都严格遵守 read-after-write 一致性模型。

2. 分布式 MinIO 实现条件

  • 在所有节点运行同样的命令启动一个分布式 MinIO 实例,只需要把硬盘位置作为参数传给 minio server 命令即可。
  • 分布式 MinIO 中的所有节点需要有同样的环境变量 MINIO_ACCESS_KEY 和 MINIO_SECRET_KEY,才能建立分布式集群。注意:新版本使用环境变量 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD。
  • 分布式 MinIO 使用的磁盘里必须是干净的,里面没有数据。
  • 分布式 MinIO 里的节点时间差不能超过 3 秒,可以使用 NTP 来保证时间一致。

3. 分布式 MinIO 注意事项

  • MinIO 服务器多块数据磁盘需要使用独立的磁盘,在物理底层要相互独立避免遇到磁盘 IO 竞争,导致 MinIO 性能直线下降,如果性能下降严重,数据量大时甚至会导致集群不可用。
  • MinIO 数据磁盘最大不超过 2T,如果使用 LVM 逻辑卷,逻辑卷大小也不要超过 2T,过大的磁盘或文件系统会导致后期 IO 延迟较高导致 MinIO 性能降低。
  • MinIO 集群共 M 节点每个节点 N 块数据磁盘,磁盘只要存活 M*N/2,MinIO 集群数据就是安全的,在节点数剩余 M/2+1 时节点可以正常读写。
  • 如果使用 LVM 方式扩展集群容量,请在部署阶段 MinIO 数据目录就使用 LVM。
  • 如果需要备份 MinIO 集群数据,请准备存放 MinIO 集群所有对象数据的空间容量。比如:一个 2T/盘4 块/节点8 节点=64T 的集群所有容量的一半存储空间即 32T 服务器,配置内存 CPU 配置不需要太高。
  • 如果网络环境允许请把 MinIO 集群节点配置双网卡,节点通信网络与客户端访问网络分开避免网络瓶颈。
  • 配置反向代理实现 MinIO 的负载均衡,可以使用云服务 SLB 或者 2 台 haproxy/nginx 结合 keepalived 实现高可用。
  • MinIO 系统中不要安装消耗 IO 较高的应用,比如:updatedb 程序,如安装请排除扫描 MinIO 数据目录,否则可以会导致磁盘 IO 延迟过高,会导致 CPU 负载过高,从而降低 MinIO 性能。

二、基于 LVM 部署二进制分布式高可用集群

1. 架构图

文章配图

2. 资源清单

主机名ip操作系统版本备注
LB192.168.48.88openEuler 24.03 (LTS-SP2)负载均衡节点,haproxy
minio1192.168.48.100Ubuntu 22.04.5 LTSminio
minio2192.168.48.101Ubuntu 22.04.5 LTSminio
minio3192.168.48.102Ubuntu 22.04.5 LTSminio

3. 准备四台主机,在所有节点上做好名称解析

root@minio1:~# cat /etc/hosts
127.0.0.1 localhost
192.168.48.100 minio1
192.168.48.101 minio2
192.168.48.102 minio3

4. 创建用户和 LV

在所有 MinIO 节点上准备数据目录和用户,当前环境中有 LV,并且 VG 中有空闲空间,以便基于当前环境创建新 LV 实现 MiniO 存储。

root@minio1:~# lsblk
NAME         MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0          7:0    0 63.9M  1 loop /snap/core20/2318
loop1          7:1    0   87M  1 loop /snap/lxd/29351
loop2          7:2    0 38.8M  1 loop /snap/snapd/21759
sda            8:0    0 300G  0 disk
├─sda1         8:1    0    1M  0 part
├─sda2         8:2    0    2G  0 part /boot
└─sda3         8:3    0 298G  0 part
└─ubuntu--vg-ubuntu--lv 253:0    0 100G  0 lvm /
sr0           11:0    1    2G  0 rom

root@minio1:~# pvs
PV         VG       Fmt Attr PSize   PFree
/dev/sda3  ubuntu-vg lvm2 a-- <298.00g <198.00g

root@minio1:~# vgs
VG        #PV #LV #SN Attr   VSize   VFree
ubuntu-vg   1   1   0 wz--n- <298.00g <198.00g

基于当前 VG 创建 LV

root@minio1:~# lvcreate -n minio -L 50G ubuntu-vg
Logical volume "minio" created.

root@minio1:~# lvs
LV      VG       Attr     LSize   Pool Origin Data% Meta% Move Log Cpy%Sync Convert
minio   ubuntu-vg -wi-a----- 50.00g 
utbuntu-lv ubuntu-vg -wi-ao---- 100.00g

5. 格式化为 ext4 文件系统

root@minio1:~# mkfs.ext4 /dev/ubuntu-vg/minio
root@minio1:~# echo /dev/ubuntu-vg/minio /data/ ext4 defaults 0 0 >> /etc/fstab
root@minio1:~# mkdir /data/
root@minio1:~# mount -a
root@minio1:~# mkdir -p /data/minio{1..4}
root@minio1:~# useradd -r -s /sbin/nologin minio
root@minio1:~# chown -R minio: /data/minio*

6. 在所有 MinIO 节点上下载二进制程序

root@minio1:~# wget https://dl.minio.org.cn/server/minio/release/linux-amd64/archive/minio.RELEASE.2024-11-07T00-52-20Z
root@minio1:~# install minio.RELEASE.2024-11-07T00-52-20Z /usr/local/bin/minio

7. 在所有 MinIO 节点上准备环境变量文件

root@minio1:~# cat > /etc/default/minio << 'EOF'
# MinIO 环境变量配置文件

# MinIO 管理员账号
MINIO_ROOT_USER=minioadmin

# MinIO 管理员密码(生产环境请使用强密码)
MINIO_ROOT_PASSWORD=minioadmin

# MinIO 存储卷配置 - 分布式模式
# 格式:http://节点名:端口/数据目录
# 这里配置了 3 个节点,每个节点 4 个磁盘
MINIO_VOLUMES='http://minio{1...3}:9000/data/minio{1...4}'

# MinIO 启动选项
# --console-address :9001 指定 Web 控制台端口
MINIO_OPTS='--console-address :9001'

# Prometheus 认证类型
MINIO_PROMETHEUS_AUTH_TYPE="public"
EOF

8. MinIO 节点创建 service 文件

cat > /lib/systemd/system/minio.service << 'EOF'
[Unit]
Description=MinIO Distributed Storage
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target

[Service]
WorkingDirectory=/usr/local
User=minio
Group=minio
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
Restart=always
RestartSec=5
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-1000

[Install]
WantedBy=multi-user.target
EOF

9. 启动 MinIO

所有节点配置完成后,启动 MinIO

root@minio1:~# systemctl daemon-reload
root@minio1:~# systemctl enable --now minio.service
Created symlink /etc/systemd/system/multi-user.target.wants/minio.service → /lib/systemd/system/minio.service.

root@minio1:~# systemctl status minio.service
● minio.service - MinIO Distributed Storage
     Loaded: loaded (/lib/systemd/system/minio.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2026-03-01 23:13:49 UTC; 18s ago
       Docs: https://docs.min.io
   Process: 1511 ExecStartPre=/bin/bash -c if [ -z "${MINIO_VOLUMES}" ]; then echo "Var>
     Main PID: 1520 (minio)
       Tasks: 13
       Memory: 71.8M
         CPU: 613ms
       CGroup: /system.slice/minio.service
               └─1520 /usr/local/bin/minio server --console-address :9001 http://minio{1..> 

Mar 01 23:13:56 minio1 minio[1520]: MinIO Object Storage Server
Mar 01 23:13:56 minio1 minio[1520]: Copyright: 2015-2026 MinIO, Inc.
Mar 01 23:13:56 minio1 minio[1520]: License: GNU AGPLv3 - https://www.gnu.org/licenses/a>
Mar 01 23:13:56 minio1 minio[1520]: Version: RELEASE.2024-11-07T00-52-20Z (go1.23.3 linu>
Mar 01 23:13:56 minio1 minio[1520]: API: http://192.168.48.100:9000 http://127.0.0.1:90>
Mar 01 23:13:56 minio1 minio[1520]: WebUI: http://192.168.48.100:9001 http://127.0.0.1:9>
Mar 01 23:13:56 minio1 minio[1520]: Docs: https://docs.min.io
Mar 01 23:13:56 minio1 minio[1520]: ---------------------------
Mar 01 23:13:56 minio1 minio[1520]: WARN: Detected default credentials 'minioadmin:minio>
Mar 01 23:13:56 minio1 minio[1520]: INFO: IAM load(startup) finished. (duration: 5.37050>

# 查看端口
root@minio1:~# ss -ntlp |grep minio
LISTEN 0     4096       127.0.0.1:9000     0.0.0.0:*   users:(("minio",pid=1520,fd=8))
LISTEN 0     4096           [::1]:9000         [::]:*   users:(("minio",pid=1520,fd=10))
LISTEN 0     4096             *:9001           *:*   users:(("minio",pid=1520,fd=29))
LISTEN 0     4096             *:9000           *:*   users:(("minio",pid=1520,fd=9))

10. 配置反向代理

在负载均衡节点配置反向代理,通过 Haproxy 实现 MinIO 的反向代理,确认防火墙关闭或者放行了相应端口。

apt install -y haproxy
cat > /etc/haproxy/haproxy.cfg << 'EOF'
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /var/lib/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon
# 默认 SSL 配置
# ssl-default-bind-ciphers PROFILE=SYSTEM
# ssl-default-server-ciphers PROFILE=SYSTEM
defaults log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000
# HAProxy 监控页面
listen stats bind 0.0.0.0:9999 mode http log global stats enable stats uri /haproxy-status stats auth admin:123456 stats refresh 30s stats show-node stats admin if LOCALHOST
# MinIO API 负载均衡
listen minio bind 192.168.48.88:9000 mode http log global option httplog option forwardfor option httpchk http-check send meth GET uri /minio/health/live ver HTTP/1.1 hdr Host minio.local http-check expect status 200 balance roundrobin timeout connect 5s timeout server 30s timeout client 30s server minio1 192.168.48.100:9000 check inter 3000 fall 2 rise 5 server minio2 192.168.48.101:9000 check inter 3000 fall 2 rise 5 server minio3 192.168.48.102:9000 check inter 3000 fall 2 rise 5
# MinIO Console 负载均衡
listen minio_console bind 192.168.48.88:9001 mode http log global option httplog option forwardfor option httpchk GET /login balance roundrobin timeout connect 5s timeout server 30s timeout client 30s server minio1-console 192.168.48.100:9001 check inter 3000 fall 2 rise 5 server minio2-console 192.168.48.101:9001 check inter 3000 fall 2 rise 5 server minio3-console 192.168.48.102:9001 check inter 3000 fall 2 rise 5
EOF
systemctl daemon-reload || systemctl enable haproxy --now
systemctl status haproxy

11. 访问 MinIO 和 HAProxy 状态页

MinIO:

http://192.168.48.88:9001/login

  • 账号:minioadmin
  • 密码:minioadmin

文章配图

HAProxy:

http://192.168.48.88:9999/haproxy-status

  • 账号:admin
  • 密码:123456

文章配图

目录

  1. 一、分布式集群介绍
  2. 1. 分布式 MinIO 优势
  3. 2. 分布式 MinIO 实现条件
  4. 3. 分布式 MinIO 注意事项
  5. 二、基于 LVM 部署二进制分布式高可用集群
  6. 1. 架构图
  7. 2. 资源清单
  8. 3. 准备四台主机,在所有节点上做好名称解析
  9. 4. 创建用户和 LV
  10. 5. 格式化为 ext4 文件系统
  11. 6. 在所有 MinIO 节点上下载二进制程序
  12. 7. 在所有 MinIO 节点上准备环境变量文件
  13. MinIO 环境变量配置文件
  14. MinIO 管理员账号
  15. MinIO 管理员密码(生产环境请使用强密码)
  16. MinIO 存储卷配置 - 分布式模式
  17. 格式:http://节点名:端口/数据目录
  18. 这里配置了 3 个节点,每个节点 4 个磁盘
  19. MinIO 启动选项
  20. --console-address :9001 指定 Web 控制台端口
  21. Prometheus 认证类型
  22. 8. MinIO 节点创建 service 文件
  23. 9. 启动 MinIO
  24. 查看端口
  25. 10. 配置反向代理
  26. 默认 SSL 配置
  27. ssl-default-bind-ciphers PROFILE=SYSTEM
  28. ssl-default-server-ciphers PROFILE=SYSTEM
  29. HAProxy 监控页面
  30. MinIO API 负载均衡
  31. MinIO Console 负载均衡
  32. 11. 访问 MinIO 和 HAProxy 状态页

更多推荐文章

查看全部
  • 2025 年开源图生图模型盘点:Kandinsky 5.0、Qwen-Image 与 Z-Image
  • Linux 内核链表分析与实现原理
  • Linux 文件描述符与重定向实战:从原理到 minishell 实现
  • CNN 经典架构演进与 PyTorch 实战指南
  • 基于大型语言模型的智能 Agent:发展历程、架构与 Langchain 实现
  • Antigravity 配置指南:打造类 VS Code 的 AI IDE
  • Linux 系统安装、故障排除、权限管理与安全配置指南
  • Stable Diffusion 完整训练与推理流程详解(附伪代码)
  • VSCode 中 Node.js 调试 JS 代码报错 3221225477 的解决方案
  • 2025 广西网安竞赛 AWD Web 部分赛后复盘与漏洞分析
  • 基于飞算 JavaAI 的在线图书借阅平台设计与实现
  • HTML+CSS+JavaScript 前端基础知识体系梳理
  • STM32H743 与 STM32F407 串口通信配置与优化实践
  • Seedance 2.0 双分支扩散变换器架构解析与工程实现
  • AI 辅助 9·1 软件安装:环境检测与问题修复方案
  • SLAM Toolbox 机器人定位与建图实践
  • C++ 面向对象编程核心:深入解析继承机制
  • C++显性契约与隐性规则:类型转换
  • 程序员面试复盘:72 次面试经历与 Android Java 高频面试题
  • Vue 实例劫持解除 Web 编辑器粘贴限制

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online