
提示本文原创作品良心制作干货为主简洁清晰一看就会文章目录前言一、验证Minio可用性1.1 创建桶1.2 创建key1.3 python api访问minio二、Minio客户端 MC2.1 安装mc2.2 mc简单命令三、Minio故障恢复3.1 新节点准备3.2 创建逻辑卷3.3 安装minio3.4 修改负载均衡地址3.5 重启minio四、Minio扩容4.1 minio部署方式4.2 为什么不能直接扩容 LVM4.3 minio标准扩容方式五、Minio备份还原5.1 安装rclone5.2 数据备份5.3 数据还原六、Minio监控前言我的实验环境https://blog.csdn.net/m0_63756214/article/details/164024724?spm1001.2014.3001.5501架构特点前端双 HAProxy 消除单点故障后端 4 节点 MinIO 分布式存储全链路高可用主机名IP角色说明haproxy-keepalived1192.168.13.141负载均衡主节点HAProxy KeepalivedMASTER 状态持有 VIP转发 9000/9001 到后端 MinIOhaproxy-keepalived2192.168.13.142负载均衡备节点HAProxy KeepalivedBACKUP 状态主节点故障时自动接管 VIPminio1192.168.13.143存储节点 1MinIO Server分布式集群节点4 块数据盘minio2192.168.13.144存储节点 2MinIO Server分布式集群节点4 块数据盘minio3192.168.13.145存储节点 3MinIO Server分布式集群节点4 块数据盘minio4192.168.13.146存储节点 4MinIO Server分布式集群节点4 块数据盘一、验证Minio可用性1.1 创建桶1.2 创建key由于这两个key只会显示一次需要保存这两个key1.3 python api访问minio这里我准备一台独立设备安装 Python 环境编写测试脚本验证 MinIO 桶创建、文件上传、文件下载功能是否正常全部验证通过后就可以将 MinIO 集群正式交付开发使用rootubuntu:~# apt update apt -y install python3-piprootubuntu:~# sudo -H pip3 install -U pip # Ubuntu18.04系统需要执行pip 升级到最新版本rootubuntu:~# python3 -m pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/rootubuntu:~# pip3 install minio # ubuntu24.04需要加参数--break-system-packages## 连接 MinIO → 自动建名为mybucket桶 → 上传 /var/log/syslog → 再把它下载回来是一个完整的上传 下载验证测试脚本rootubuntu:~# vim test.py#!/usr/bin/python3import os from minio import Minio from minio.error import S3Error# from minio.error import (ResponseError, BucketAlreadyOwnedByYou, BucketAlreadyExists)# 初始化MinIO客户端minio_client Minio( endpoint192.168.13.100:9000,access_keyKGg7KOFRdlqH3NXuL9CT,secret_keyZap11uOARH8fx0qxMWjz8XtzNsZKsgFqbpcpB2lJ,secureFalse# 如果使用SSL请将此项设置为True) bucket_name mybucket object_name example-object.txt local_file_path /var/log/syslogtry:# 检查存储桶是否存在如果不存在则创建if not minio_client.bucket_exists(bucket_name):minio_client.make_bucket(bucket_name) print(fBucket {bucket_name} created successfully.)else:print(fBucket {bucket_name} already exists.)# 上传文件到存储桶minio_client.fput_object(bucket_name,object_name,local_file_path) print(fSuccessfully uploaded {local_file_path} to {object_name}.)except ResponseError as e:print(fAn error occurred:{e})# 下载存储桶中的对象downloaded_file_path example-object.txttry:minio_client.fget_object(bucket_name,object_name,downloaded_file_path) print(fSuccessfully downloaded {object_name} to {downloaded_file_path}.)except ResponseError as e:print(fAn error occurred while downloading {object_name}:{e}) rootubuntu:~# python3 test.py可以看到桶创建成功并且上传下载文件正常二、Minio客户端 MCmc 是minio的命令行客户端工具相当于 AWS 的aws s3命令用来管理和操作miniohttps://dl.min.io/client/mc/release/linux-amd64/2.1 安装mc这里我下载的是最新版的mcrootubuntu:~# wget https://dl.min.io/client/mc/release/linux-amd64/mcrootubuntu:~# lsmc.linux-amd64.RELEASE.2025-08-13T08-35-41Z example-object.txt test.py rootubuntu:~# mv mc.linux-amd64.RELEASE.2025-08-13T08-35-41Z mcrootubuntu:~# install mc /usr/local/bin/mc2.2 mc简单命令rootubuntu:~# mc --autocompletion # 补全命令# 加一个别名把地址 access_keysecret_key保存为简短名字minio-server以后直接用mc ls minio-server/ 就能操作不用每次输密钥rootubuntu:~# mc alias set minio-server http://192.168.13.100:9000 KGg7KOFRdlqH3NXuL9CT Zap11uOARH8fx0qxMWjz8XtzNsZKsgFqbpcpB2lJrootubuntu:~# mc alias ls# 查看minio目录文件rootubuntu:~# mc ls minio-server/[2026-08-26 13:33:31 CST]0B mybucket/[2026-08-26 13:11:03 CST]0B test-20260826/ rootubuntu:~# mc ls minio-server/mybucket[2026-08-26 13:33:31 CST]424KiB STANDARD example-object.txt# 上传文件rootubuntu:~# lsexample-object.txt mc test.py rootubuntu:~# mc cp test.py minio-server/mybucket# 上传目录rootubuntu:~# mc cp --recursive /etc/ minio-server/test-20260826/# 创建桶rootubuntu:~# mc mb minio-server/bucket01可以看到上传下载文件创建桶都成功了# 拷贝minio文件到本机rootubuntu:~# mc cp minio-server/mybucket/example-object.txt /tmprootubuntu:~# ls /tmpexample-object.txt# 查看minio服务端集群状态信息rootubuntu:~# mc admin info minio-servermc的命令还有很多感兴趣的可以自行了解三、Minio故障恢复MinIO 具备节点故障自愈能力服务异常停掉后可重新启动minio服务就能直接恢复运行若节点操作系统损坏需重新安装则可在系统重装完成后恢复服务现在我们模拟 MinIO 集群中单节点磁盘彻底损坏的故障场景该节点 MinIO 服务无法正常启动虽然单节点故障不影响 MinIO 集群正常使用但应及时修复避免长期处于降级状态。若为服务异常重启该节点 MinIO 服务后集群即可自动恢复若为系统损坏则需更换新设备重新部署 MinIO 并加入集群准备一台与前三个 MinIO 节点配置完全一致的新节点新节点ip 192.168.13.139修改 HAProxy 负载均衡中的后端节点地址更新各节点/etc/hosts中的主机名映射重启各节点服务3.1 新节点准备rootubuntu:~# hostnamectl set-hostname minio4rootminio4:~# ntpdate ntp.aliyun.com# minio1~4都要改成一样的rootminio4:~# vim /etc/hosts192.168.13.143 minio1 192.168.13.144 minio2 192.168.13.145 minio3 192.168.13.139 minio4# 准备四个磁盘创建逻辑卷和我前三台的操作步骤一样rootminio4:~# lsblk3.2 创建逻辑卷# 创建pvrootminio4:~# pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde# 创建vgrootminio4:~# vgcreate vg_minio /dev/sdb /dev/sdc /dev/sdd /dev/sderootminio4:~# vgdisplay vg_minio# 创建lvrootminio4:~# lvcreate -l 250 -n minio-lv1 vg_miniorootminio4:~# lvcreate -l 250 -n minio-lv2 vg_miniorootminio4:~# lvcreate -l 250 -n minio-lv3 vg_miniorootminio4:~# lvcreate -l 250 -n minio-lv4 vg_minio# 格式化rootminio4:~# mkfs.xfs /dev/vg_minio/minio-lv1rootminio4:~# mkfs.xfs /dev/vg_minio/minio-lv2rootminio4:~# mkfs.xfs /dev/vg_minio/minio-lv3rootminio4:~# mkfs.xfs /dev/vg_minio/minio-lv4# 创建挂在目录并挂载rootminio4:~# mkdir -p /mnt/disk{1,2,3,4}rootminio4:~# useradd -r -s /sbin/nologin minio-userrootminio4:~# chown -R minio-user:minio-user /mnt/disk*rootminio4:~# vim /etc/fstab/dev/vg_minio/minio-lv1 /mnt/disk1 xfs defaults 0 0 /dev/vg_minio/minio-lv2 /mnt/disk2 xfs defaults 0 0 /dev/vg_minio/minio-lv3 /mnt/disk3 xfs defaults 0 0 /dev/vg_minio/minio-lv4 /mnt/disk4 xfs defaults 0 0 rootminio4:~# mount -arootminio4:~# df -Th3.3 安装minio# 复制安装包配置文件到minio4rootminio1:~# scp minio root192.168.13.139:/rootrootminio1:~# scp /etc/default/minio root192.168.13.139:/tmprootminio1:~# scp /lib/systemd/system/minio.service root192.168.13.139:/tmprootminio4:~# lsminio rootminio4:~# install minio /usr/local/bin/rootminio4:~# mv /tmp/minio /etc/default/miniorootminio4:~# mv /tmp/minio.service /lib/systemd/system/minio.servicerootminio4:~# id minio-useruid999(minio-user) gid999(minio-user) groups999(minio-user) rootminio4:~# ll /mnt/total 8 drwxr-xr-x 6 root root 4096 Aug 26 15:58 ./ drwxr-xr-x 24 root root 4096 Apr 7 16:15 ../ drwxr-xr-x 6 minio-user minio-user 77 Aug 26 16:15 disk1/ drwxr-xr-x 6 minio-user minio-user 77 Aug 26 16:15 disk2/ drwxr-xr-x 6 minio-user minio-user 77 Aug 26 16:15 disk3/ drwxr-xr-x 6 minio-user minio-user 77 Aug 26 16:15 disk4/3.4 修改负载均衡地址# 两个haproxy都要改roothaproxy-keepalived1:~# vim /etc/haproxy/haproxy.cfg改完重启haproxy,keepalived都重启一下3.5 重启miniorootminio4:~# systemctl daemon-reloadrootminio4:~# systemctl enable --now minio.service # minio1~3可以都重启一下# 查看minio4的挂在目录可以看到数据自动被同步过来了rootminio4:~# ls /mnt/disk1/bucket01 mybucket test-20260826rootminio4:~# ls /mnt/disk2/bucket01 mybucket test-20260826rootminio4:~# ls /mnt/disk3/bucket01 mybucket test-20260826rootminio4:~# ls /mnt/disk4/bucket01 mybucket test-20260826登录minio可以看到集群已经恢复数据会自动同步四、Minio扩容4.1 minio部署方式MinIO集群常见有两种底层存储部署方式LVM逻辑卷部署基于LVM逻辑卷作为MinIO的数据盘将LV格式化为XFS后挂载提供给MinIO使用。该方案运维灵活性高方便在线扩容磁盘空间但不属于MinIO官方推荐方案额外的LVM层会带来一定性能与可靠性开销JBOD裸盘部署官方推荐对物理磁盘直接使用MBR/GPT进行磁盘分区分区格式化为XFS文件系统创建挂载点并完成挂载直接将分区作为独立磁盘交付MinIO使用。JBOD模式规避额外存储管理层发挥MinIO纠删码原生能力是官方优先推荐的部署形态JBOD模式下每一块盘/分区对MinIO来说都是独立drive而分布式纠删码集群中无论底层是裸盘还是LVM逻辑卷都不支持通过放大单drive容量来扩容ErasureSet只能新增整套磁盘组新建ErasureSet实现集群扩容4.2 为什么不能直接扩容 LVM目前我的minio是基于lvm搭建的MinIO 官方文档明确指出不支持通过逻辑卷扩容、滚动更换硬盘或其他文件系统级的方法来增加存储。MinIO 的容量在集群启动时根据MINIO_VOLUMES中指定的路径确定后续的 LVM 扩容操作不会被识别。你之前的理解是准确的即使df -h显示单盘容量变大了MinIO 控制台显示的总容量也不会变化举例子原来每个 LV 200G16 盘 EC可用容量大概 1600G全部 LV 扩到 500Gdf‑h 看到每盘 500G但是 MinIO 控制台总容量依旧≈1600G只是单盘不容易报磁盘耗尽这是规避磁盘满故障不是业务扩容不能存更多数据4.3 minio标准扩容方式MinIO 标准扩容水平扩展Scale Out即向现有集群添加一个全新的“服务器池Server Pool”基于我4节点 x 4盘的集群以下是标准流程✅规划和准备新硬件确定新池规模新池的节点数应是现有池的整数倍。对于我的集群应准备4台或8台、12台新服务器确保硬件一致性新服务器配置应与现有节点尽量相同尤其是每台服务器的磁盘数量、类型和大小必须一致安装环境在新节点上安装与现有集群完全相同版本的 MinIO。格式化并挂载磁盘生产环境推荐 XFS 文件系统确保挂载点路径统一如/data1,/data2等✅步骤二更新集群配置这是最关键的一步。需要修改 MinIO 的启动参数将新旧两个池都包含进来编辑配置文件在任意一个现有节点上编辑 MinIO 的配置文件如config.yaml或环境变量文件添加新池在pools列表末尾追加新池的配置。例如pools:-args:-http://minio{1...4}/data{1...4}-args:# 增加新增的池-http://minio{5...8}/data{1...4}# 新节点同步配置文件将更新后的配置文件复制到所有节点包括新旧节点并确保文件内容完全一致✅步骤三启动新节点并重载配置启动新节点在新节点minio5~minio8上启动 MinIO 服务重载现有节点配置向所有现有节点minio1~minio4的 MinIO 进程发送SIGHUP信号使其动态加载新配置无需重启版本比较旧则需要重启✅ 步骤四验证与更新负载均衡验证扩容使用mc admin info命令检查集群状态确认所有新节点和磁盘均在线更新负载均衡将新节点minio5~minio8的 IP 添加到 HAProxy 等负载均衡器的后端服务器列表中并重载配置本次扩容步骤已有详细说明不再重复演示代码操作。新增MinIO节点硬件规格需与原有4台节点完全一致注意事项在所有8台节点的/etc/hosts中完成全部节点主机名与IP的域名解析配置保证8台服务器时间同步可直接将原有节点的MinIO安装包拷贝至新节点同时将/etc/default/minio环境变量文件、/lib/systemd/system/minio.service服务文件从老节点同步复制到新节点该节点部署流程与本文第三小节的故障恢复操作基本一致可参照对应章节执行五、Minio备份还原这里我下载一个mc命令方便演示rootubuntu:~# wget https://dl.min.io/client/mc/release/linux-amd64/mcrootubuntu:~# install mc /usr/local/bin/mcrootubuntu:~# mc --autocompletionrootubuntu:~# mc alias set minio-server http://192.168.13.100:9000 KGg7KOFRdlqH3NXuL9CT Zap11uOARH8fx0qxMWjz8XtzNsZKsgFqbpcpB2lJ5.1 安装rclonerclone 是命令行工具专门用来在本地磁盘、对象存储、各类云盘之间做文件迁移、同步、拷贝它支持非常多后端MinIO/S3、阿里云OSS、腾讯COS、华为OBS、百度网盘、OneDrive、Google Drive、本地文件系统、SFTP等结合MinIO运维场景可以实现同步、备份rclone sync单向同步源端有什么目标端就变成什么删除目标多余文件rclone copy只拷贝新增/变更文件不删除目标端文件用来做MinIO数据异地备份、定时备份## 1. 下载rclonerootubuntu:~# apt list rclonerootubuntu:~# apt update apt -y install rclonerootubuntu:~# rclone version## 2. 添加rclon补全命令rootubuntu:~# vim /root/.bashrc # 添加一行source (rclone completion bash) rootubuntu:~# source /root/.bashrc## 3. rclone配置文件rootubuntu:~# mkdir .config/rclonerootubuntu:~# cat ~/.config/rclone/rclone.conf EOF[minio]# rclone远端别名type s3# 后端存储类型provider Minio# 指定S3服务商为MinIOenv_auth false#access_key_id admin#secret_access_key 12345678access_key_id KGg7KOFRdlqH3NXuL9CT# MinIO访问密钥AccessKeysecret_access_key Zap11uOARH8fx0qxMWjz8XtzNsZKsgFqbpcpB2lJ# MinIO密钥SecretKeyregion luqing# 随意填写endpoint http://192.168.13.100:9000# MinIO S3 API访问地址填写VIP/节点IP9000端口EOF## 4. 测试rclone连通minio集群可以看到所有的桶rootubuntu:~# rclone lsd minio:-1 2026-08-26 14:20:12-1 bucket01-1 2026-08-26 13:33:31-1 mybucket-1 2026-08-26 13:11:03-1 test-202608265.2 数据备份## 5. 克隆mybucket桶所有内容到/data/minio-bak//data/minio-bak/会自动创建rootubuntu:~# rclone sync minio:/mybucket /data/minio-bak/ -vProotubuntu:~# ls /data/minio-bak/example-object.txt test.py ubuntu-18.04.6-live-server-amd64.iso## 6. 上传一个新文件到mybucketrootubuntu:~# mc cp /home/ubuntu/nfs-subdir-external-provisioner-4.0.18.tar.gz minio-server/mybucket## 7. 加参数--checksum做增量备份rootubuntu:~# rclone sync minio:/mybucket /data/minio-bak/ -vP --checksumrootubuntu:~# ls /data/minio-bak/example-object.txt nfs-subdir-external-provisioner-4.0.18.tar.gz test.py ubuntu-18.04.6-live-server-amd64.iso5.3 数据还原删掉桶内文件或者桶都可以还原## 8. 查看mybucket桶大小目前是0rootubuntu:~# mc du minio-server/mybucket0B 0 objects mybucket## 9. 将本地/data/minio‑bak/目录同步到mybucket桶rootubuntu:~# rclone copy /data/minio-bak/ minio:/mybucket --transfers8 --update -vProotubuntu:~# mc du minio-server/mybucket975MiB 4 objects mybucket可以看到数据同步成功六、Minio监控minio监控内置支持Prometheus,推荐使用Prometheus和grafana进行监控我已经提前安装好了Prometheus## 1. 创建一个仅用于监控的访问策略rootubuntu:~# vim prometheus-scrape.json{Version:2012-10-17,Statement:[{Effect:Allow,Action:[admin:Prometheus]}]}## 2. 创建专用访问密钥rootubuntu:~# mc admin accesskey create minio-server/ \--name prometheus-scrape \--description Used by Prometheus to scrape metrics \--policy /root/prometheus-scrape.jsonAccess Key:RBZBGSR9AAJZ8OL8YO02Secret Key:bODJxFWhRV6P8Dw3v7zL9xwE8ikBllKlPg8c21TExpiration:NONEName:prometheus-scrapeDescription:Used by Prometheus to scrape metrics## 3. 为这个新密钥创建独立的 mc 别名rootubuntu:~# mc alias set minio-prometheus http://192.168.13.100:9000 RBZBGSR9AAJZ8OL8YO02 bODJxFWhRV6P8Dw3v7zL9xwE8ikBllKlPg8c21T## 4. 生成 Prometheus 抓取配置rootubuntu:~# mc admin prometheus generate minio-prometheusscrape_configs:-job_name:minio-jobbearer_token:eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiUkJaQkdTUjlBQUpaOE9MOFlPMDIiLCJleHAiOjQ5NDE0MTk2Nzl9.rBH_JfIQ2IsuMkFPIChPV1Xz2uNLi1srKj3gMHqi6ifvu9FcIjs5yNjtd_2exvLOGPT-9es5wtKIkBidyPGW7Qmetrics_path:/minio/v2/metrics/clusterscheme:httpstatic_configs:-targets:[192.168.13.100:9000]## 5. 修改搜刮配置scrape_configs:-job_name:minio-clusterbearer_token:eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJwcm9tZXRoZXVzIiwic3ViIjoiUkJaQkdTUjlBQUpaOE9MOFlPMDIiLCJleHAiOjQ5NDE0MTk2Nzl9.rBH_JfIQ2IsuMkFPIChPV1Xz2uNLi1srKj3gMHqi6ifvu9FcIjs5yNjtd_2exvLOGPT-9es5wtKIkBidyPGW7Qmetrics_path:/minio/v2/metrics/clusterscheme:httpstatic_configs:-targets:[192.168.13.100:9000]# 我minio集群的vip登录Prometheus可以看到minio已经被监控可以ui界面查询minio监控指标后续可以在grafana中添加dashboard这里不再演示注文中若有疏漏欢迎大家指正赐教。本文为100%原创转载请务必标注原创作者尊重劳动成果。求赞、求关注、求评论你的支持是我更新的最大动力评论区等你