当前位置: 首页 > news >正文

MinIO 分布式高可用部署

1. 概述

MinIO 是一个高性能、Kubernetes 原生的对象存储系统,兼容 Amazon S3 API。分布式部署模式下,MinIO 利用纠删码(Erasure Coding)技术将数据分片存储于多个节点、多块磁盘上,实现数据的高可用和自愈能力。即使丢失半数磁盘(N/2),数据仍可读取;写入需要至少 N/2+1 个磁盘在线。

2. 部署环境规划

2.1 硬件与节点要求

  • 节点数量:至少 4 个节点(建议 4-16 节点,偶数个节点利于纠删码配置)。

  • 磁盘数量:每个节点至少 2 块独立数据盘(生产环境建议 SSD/NVMe),所有节点的磁盘总数应为偶数(便于数据块与校验块对等分布)。

  • 网络:节点间 10GbE 以上网络,低延迟。

  • 操作系统:Linux(CentOS 7+/Ubuntu 18.04+),内核 4.x+。

2.2 软件版本

  • MinIO Server:RELEASE.2025-09-07T16-13-09Z(示例版本)

  • MinIO Client (mc):最新版

  • Nginx:1.20+

  • Keepalived:2.0+(用于负载均衡器高可用)

2.3 网络与主机名规划

假设 4 个存储节点:

 
节点名IP 地址数据盘挂载点
ubuntu02 192.168.0.62 /mnt/miniodata01, /mnt/miniodata02
ubuntu03 192.168.0.63 /mnt/miniodata01, /mnt/miniodata02
ubuntu04 192.168.0.64 /mnt/miniodata01, /mnt/miniodata02
ubuntu05 192.168.0.65 /mnt/miniodata01, /mnt/miniodata02

负载均衡器节点(2 台):

 
节点名IP 地址角色
ubuntu06 192.168.0.66 Nginx + Keepalived (MASTER)
ubuntu07 192.168.0.67 Nginx + Keepalived (BACKUP)

VIP(虚拟 IP):192.168.0.60

3. 基础环境配置(所有存储节点执行)

3.1 设置主机名与 hosts 解析

# 每台分别设置主机名,例如 ubuntu02
hostnamectl set-hostname ubuntu02# 编辑 /etc/hosts,添加所有存储节点和负载均衡器的映射
cat >> /etc/hosts <<EOF
192.168.0.62 ubuntu02
192.168.0.63 ubuntu03
192.168.0.64 ubuntu04
192.168.0.65 ubuntu05
192.168.0.66 ubuntu06
192.168.0.67 ubuntu07
EOF

3.2 时间同步(NTP)

# Ubuntu
apt install -y chrony
systemctl enable --now chronyd
timedatectl status# CentOS
yum install -y chrony
systemctl enable --now chronyd
chronyc sources -v

3.3 磁盘准备

若使用 LVM 管理磁盘:

pvcreate /dev/sdb 
vgextend ubuntu-vg /dev/sdb lvcreate -n miniodata1 -L 5G ubuntu-vg 
lvcreate -n miniodata2 -L 5G ubuntu-vg mkfs.ext4 /dev/ubuntu-vg/miniodata1 
mkfs.ext4 /dev/ubuntu-vg/miniodata2
mkdir /mnt/miniodata01 /mnt/miniodata02
vi /etc/fstab /dev/ubuntu-vg/miniodata1 /mnt/miniodata01 ext4 defaults 0 1 /dev/ubuntu-vg/miniodata2 /mnt/miniodata02 ext4 defaults 0 1systemctl daemon-reload mount -a

4. MinIO 软件安装与配置(所有存储节点执行)

4.1 下载 MinIO 二进制

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

4.2 创建专用用户

groupadd -r minio-user
useradd -M -r -g minio-user -s /sbin/nologin minio-user

4.3 创建数据目录并授权

chown -R minio-user:minio-user /mnt/miniodata01 /mnt/miniodata02

4.4 配置环境变量文件 /etc/default/minio

cat > /etc/default/minio <<EOF
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=you_passwd
MINIO_VOLUMES="http://ubuntu02/mnt/miniodata01 http://ubuntu02/mnt/miniodata02 http://ubuntu03/mnt/miniodata01 http://ubuntu03/mnt/miniodata02 http://ubuntu04/mnt/miniodata01 http://ubuntu04/mnt/miniodata02 http://ubuntu05/mnt/miniodata01 http://ubuntu05/mnt/miniodata02"
MINIO_OPTS="--address :9000 --console-address :9001"
EOF

注意:MINIO_VOLUMES 中的主机名必须与 /etc/hosts 解析一致,所有节点配置需完全相同。也可以将主机名换成IP

4.5 创建 systemd 服务文件 /etc/systemd/system/minio.service

[Unit]
Description=MinIO
Documentation=https://docs.min.io
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 "ERROR: MINIO_VOLUMES is not set" >&2; exit 1; fi'
ExecStart=/usr/local/bin/minio server $MINIO_VOLUMES $MINIO_OPTS
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=65536
TimeoutStopSec=infinity
SendSIGKILL=no[Install]
WantedBy=multi-user.target

4.6 启动 MinIO 服务

systemctl daemon-reload
systemctl enable minio --now
systemctl status minio
journalctl -u minio -f

5. 验证集群状态

5.1 使用 mc 客户端

在任意节点安装 mc:

wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
mv mc /usr/local/bin/# 配置别名,如在ubuntu02操作
mc alias set myminio http://ubuntu02:9000 admin feiTTYDV6YY# 查看集群信息
mc admin info myminio

5.2 Web 控制台访问

浏览器打开任一节点 http://<node-ip>:9001,使用 admin/you_passwd登录。

6. 与 Kubernetes 集成(外部服务接入)

若 Kubernetes 集群需要使用外部 MinIO,通过 Service + Endpoints 方式接入。

6.1 创建 YAML 文件 external-minio.yaml

apiVersion: v1
kind: Service
metadata:name: external-minionamespace: default
spec:ports:- protocol: TCPport: 9000targetPort: 9000
---
apiVersion: v1
kind: Endpoints
metadata:name: external-minionamespace: default
subsets:- addresses:- ip: 192.168.0.62- ip: 192.168.0.63- ip: 192.168.0.64- ip: 192.168.0.65ports:- port: 9000
---
apiVersion: v1
kind: Secret
metadata:name: minio-secret
type: Opaque
data:access-key: YWRtaW4=          # base64 of 'admin'secret-key: ZmVpVFRZRFY2WVk=  # base64 of 'you_passwd'

6.2 应用配置

kubectl apply -f external-minio.yaml

K8s 内部应用可通过 external-minio.default.svc.cluster.local:9000 访问 MinIO。

7. 配置 Nginx 负载均衡与高可用

7.1 Nginx 安装(两台负载均衡器)

# Ubuntu
apt install -y nginx# CentOS
yum install -y nginx

7.2 Nginx 配置

创建 /etc/nginx/conf.d/minio-proxy.conf,内容如下:

upstream minio_api {least_conn;server ubuntu02:9000 max_fails=3 fail_timeout=30s;server ubuntu03:9000 max_fails=3 fail_timeout=30s;server ubuntu04:9000 max_fails=3 fail_timeout=30s;server ubuntu05:9000 max_fails=3 fail_timeout=30s;
}upstream minio_console {ip_hash;server ubuntu02:9001 max_fails=3 fail_timeout=30s;server ubuntu03:9001 max_fails=3 fail_timeout=30s;server ubuntu04:9001 max_fails=3 fail_timeout=30s;server ubuntu05:9001 max_fails=3 fail_timeout=30s;
}server {listen 9000;server_name _;client_max_body_size 0;proxy_buffering off;proxy_request_buffering off;location / {proxy_pass http://minio_api;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_http_version 1.1;proxy_set_header Connection "";proxy_connect_timeout 300;proxy_send_timeout 300;proxy_read_timeout 300;}
}server {listen 9001;server_name _;client_max_body_size 0;proxy_buffering off;proxy_request_buffering off;location / {proxy_pass http://minio_console;proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_connect_timeout 300;proxy_send_timeout 300;proxy_read_timeout 300;}
}

7.3 检查并重载 Nginx

nginx -t
systemctl reload nginx   # 或 systemctl restart nginx

7.4 Keepalived 安装与配置(实现 VIP 高可用)

两台负载均衡器安装 keepalived:

# Ubuntu
apt install -y keepalived# CentOS
yum install -y keepalived

主节点(ubuntu06)配置 /etc/keepalived/keepalived.conf

vrrp_instance VI_1 {state MASTERinterface eth0          # 根据实际网卡修改virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.0.60/24 dev eth0}
}

备节点(ubuntu07)配置

vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.0.60/24 dev eth0}
}

启动 keepalived:

systemctl enable keepalived --now

验证 VIP 是否已绑定:

ip addr show eth0

7.5 最终访问入口

S3 API:http://192.168.0.60:9000Web 控制台:http://192.168.0.60:9001

8. 日常管理与监控

8.1 常用 mc 命令

# 查看集群信息
mc admin info myminio# 创建 bucket
mc mb myminio/mybucket# 设置 bucket 公开读
mc anonymous set download myminio/mybucket# 列出所有 bucket
mc ls myminio# 上传文件
mc cp localfile myminio/mybucket/# 生成临时下载链接(有效期7天)
mc share download myminio/mybucket/object# 添加用户
mc admin user add myminio newuser newpassword# 为用户添加读写策略
mc admin policy attach myminio readwrite --user=newuser

8.2 日志查看

journalctl -u minio -f

8.4 定期健康检查

建议编写脚本定时执行 mc admin info,发现离线节点及时告警。

http://www.jsqmd.com/news/482415/

相关文章:

  • 征程 6P codec decoder sample
  • UV 下载与安装指南
  • Linux全网备份项目与NFS存储服务实战全攻略
  • 16 Nginx服务的信号控制
  • Linux Rsync备份服务实战全攻略
  • AI Coding 从“抽盲盒”到“开火箭”:SDD+TDD 开发模式实战揭秘
  • Problems(大纲)
  • React15 - React Redux组件模式性能对比
  • 3月15日(进阶6)
  • AI 不会先杀死 SaaS,但会先杀死 SaaS 的旧玩法
  • 最强生图模型NanoBanana 2,一手深度测- 附教程
  • Agentic LLM工作流在钻井日报分析中的应用
  • C# switch case 的极限教程
  • Kali Linux渗透测试与网络攻防实验靶场
  • TODO:Swagger基本使用
  • tmux中文变横线问题
  • 深入理解 HashMap 扩容流程:从 1.7 到 1.8 的演进与细节解析
  • React15 - react-redux 中bindActionCreators的作用
  • Sqlite“无法加载 DLL“e_sqlite3”: 找不到指定的模块”解决方法
  • React15 - React-Redux 在React 15中的使用和工作原理
  • VSCode + Copilot:打造你的超级开发环境
  • React15- React-Redux 在React 15中的使用和工作原理
  • Redux - React-Redux 在React 15中的使用和工作原理
  • 提示工程中的“虚假宣传”问题:架构师的道德与法务责任
  • Redux - react-redux 的工作原理和使用
  • 让 AI 成为你的鸿蒙开发助手:harmonyos-build-deploy Skill 完全实战指南
  • 彼得林奇如何分析公司的用户增长质量
  • 结构变异检测技术:从read-pair、split-read到组装方法的综合策略
  • 数据库主从复制方案
  • 幂等实现方案