MinIO 4 节点集群部署实战:RPM 安装 + mc 工具攻略(网站托管、自动备份)
一、MinIO 是什么?能解决什么问题?
MinIO 是一个高性能、开源的 S3 兼容对象存储系统,适用于私有云和混合云环境。
它能帮你解决这些实际问题:
场景 | MinIO 的用途 |
---|---|
🖼️ 托管图片/视频 | 替代 Nginx 静态服务,支持海量文件 |
🌐 部署前端项目 | 托管 Vue/React 打包后的 dist/ 文件 |
💾 数据备份归档 | 备份数据库、日志、虚拟机镜像 |
🔐 安全共享文件 | 生成临时下载链接,避免暴露服务器 |
📊 大数据/ML 存储 | 作为数据湖(Data Lake)底层存储 |
✅ 一句话:MinIO = 私有版的 AWS S3
二、架构设计:4 节点分布式集群(生产推荐)
+-------------+ +-------------+ +-------------+ +-------------+
| minio-01 |<--->| minio-02 |<--->| minio-03 |<--->| minio-04 |
| 192.168.130.61 | | 192.168.130.62 | | 192.168.130.65 | | 192.168.130.66 |
| /data/minio | | /data/minio | | /data/minio | | /data/minio |
+-------------+ +-------------+ +-------------+ +-------------+\ | | /\ | | /\ | | /\ | | /+---------------------------------------+| MinIO 分布式集群(4节点) || 纠删码:4+4 → 可容忍 4 节点故障 |+---------------------------------------+↓[S3 API / Web Console]
📌 纠删码原理:每份数据切为 4 个数据块 + 4 个校验块,任意 4 个块可恢复原始数据。
三、实战 1:部署 MinIO 分布式集群(4 节点)
✅ 环境准备
主机 | IP 地址 | 角色 |
---|---|---|
minio-01 | 192.168.130.61 | MinIO 节点 |
minio-02 | 192.168.130.62 | MinIO 节点 |
minio-03 | 192.168.130.65 | MinIO 节点 |
minio-04 | 192.168.130.66 | MinIO 节点 |
步骤 1:安装 MinIO(所有节点)
#创建目录
mkdir /opt/minio
# 下载 MinIO 服务端rpm包
https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20250207232109.0.0-1.x86_64.rpm#安装
rpm -ivh minio-20250207232109.0.0-1.x86_64.rpm# 验证安装
minio --version
- 也可使用 二进制包,二进制更灵活。
# 下载 MinIO 服务端
wget https://dl.min.io/server/minio/release/linux-amd64/minio# 添加执行权限并移动到系统路径
chmod +x minio
mv minio /usr/local/bin/# 验证安装
minio --version
本次使用的rpm安装方式
步骤 2:创建独立挂载点(关键!)
# 创建存储目录
sudo mkdir -p /data/minio# 推荐:挂载独立磁盘(示例)
# sudo mkfs.xfs /dev/sdb
# sudo mount /dev/sdb /data/minio
# echo "/dev/sdb /data/minio xfs defaults 0 0" >> /etc/fstab
⚠️ MinIO 要求存储路径必须是独立挂载点,否则拒绝启动。
步骤 3:设置访问凭证(所有节点)
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=StrongPass123!
建议写入
/etc/environment
或 systemd 环境文件。
步骤 4:启动集群(所有节点执行相同命令)
minio server \http://192.168.130.61/data/minio \http://192.168.130.62/data/minio \http://192.168.130.65/data/minio \http://192.168.130.66/data/minio \--console-address :9001
9000
:S3 API 端口9001
:Web 控制台端口
步骤 5:访问 Web 控制台
浏览器打开:
http://192.168.130.61:9001
登录:admin
/ StrongPass123!
四、实战 2:配置 systemd 开机自启(生产必备)
创建服务文件
sudo tee /etc/systemd/system/minio.service << 'EOF'
[Unit]
Description=MinIO Object Storage Server
After=network.target[Service]
User=root
Group=root
EnvironmentFile=/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS
Restart=always
RestartSec=3
LimitNOFILE=1048576
LimitNPROC=1048576
TimeoutStopSec=20s[Install]
WantedBy=multi-user.target
EOF
创建环境变量文件
sudo mkdir -p /etc/default
sudo tee /etc/default/minio << 'EOF'
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=StrongPass123!MINIO_OPTS="http://192.168.130.61/data/minio \http://192.168.130.62/data/minio \http://192.168.130.65/data/minio \http://192.168.130.66/data/minio \--console-address :9001"
EOF# 保护密码文件
sudo chmod 600 /etc/default/minio
启用服务
sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio
sudo systemctl status minio # 应显示 active (running)
五、实战 3:使用 mc
管理 MinIO(核心工具)
1.安装 MinIO Client
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
2.配置别名
mc alias set myminio http://192.168.130.61:9000 admin StrongPass123!
3.查看集群状态
mc admin info myminio
4.创建桶并上传文件目录
# 创建桶
mc mb myminio/uploads# 上传文件
mc cp ./test.txt myminio/uploads/# 上传目录
#上传目录必须加--recursive或者-r
mc cp -r ./data/ myminio/uploads/# 列出对象
mc ls myminio/uploads/
5. 桶管理
# 创建桶
mc mb myminio/my-bucket# 列出所有桶
mc ls myminio# 删除空桶
mc rb myminio/my-bucket# 强制删除非空桶
mc rb --force myminio/my-bucket
6. 对象操作
# 上传文件
mc cp local-file.txt myminio/my-bucket/# 下载文件
mc cp myminio/my-bucket/local-file.txt ./# 列出对象
mc ls myminio/my-bucket# 删除对象
mc rm myminio/my-bucket/local-file.txt
7. 目录操作
# 递归上传目录
mc cp --recursive ./my-folder/ myminio/my-bucket/my-folder/# 递归下载目录
mc cp --recursive myminio/my-bucket/my-folder/ ./downloads/# 递归删除目录
mc rm --recursive --force myminio/my-bucket/my-folder/
六、实战 4:托管静态网站
场景:部署一个前端项目
# 1. 创建桶
mc mb myminio/website# 2. 上传文件
echo "hello" >html/index.html
mc cp --recursive ./html/ myminio/website/# 3. 设置公开可读
mc anonymous set public myminio/website# 4. 启用网站模式
mc website set myminio/website --index index.html --error index.html# 5. 访问网站
[root@minio-01 minio]# curl http://192.168.130.61:9000/website/index.html
hello
支持 HTML、CSS、JS、图片自动加载
七、实战 5:自动化备份数据库(如 MySQL)
场景:每天凌晨备份 MySQL 并上传到 MinIO
#!/bin/bash
# backup-mysql.shDATE=$(date +%Y-%m-%d)
DB_NAME="myapp"
BACKUP_DIR="/backup/mysql"
BUCKET="backup-db"# 1. 创建备份目录
mkdir -p $BACKUP_DIR# 2. 导出数据库
mysqldump -u root -p'mysqlpass' $DB_NAME | gzip > $BACKUP_DIR/${DB_NAME}_$DATE.sql.gz# 3. 上传到 MinIO
mc cp $BACKUP_DIR/${DB_NAME}_$DATE.sql.gz myminio/$BUCKET/# 4. 清理 7 天前的本地备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -deleteecho "MySQL 已备份至 MinIO: myminio/$BUCKET/${DB_NAME}_$DATE.sql.gz"
添加到定时任务
# 每天凌晨1点执行
echo "0 1 * * * /path/to/backup-mysql.sh >> /var/log/backup.log 2>&1" | sudo tee -a /etc/crontab
八、实战 6:用户权限管理(多租户)
场景:为开发团队创建只读账号
# 1. 创建用户
mc admin user add myminio devuser DevPass123!# 2. 绑定只读策略
mc admin policy attach myminio readonly --user devuser# 3. 验证权限
mc admin user info myminio devuser
开发人员只能查看,不能删除数据。
九、生产最佳实践(必看!)
项目 | 建议 |
---|---|
节点数量 | 至少 4 节点(4+4 纠删码) |
磁盘 | SSD + XFS + 独立挂载 |
HTTPS | 用 Nginx 反向代理 + Let’s Encrypt |
备份 | mc mirror 到异地 MinIO 或 AWS S3 |
监控 | Prometheus + Grafana 接入 /minio/v2/metrics/cluster |
升级 | mc admin update myminio 在线升级 |
总结:MinIO 的 5 大核心能力
能力 | 如何实现 |
---|---|
对象存储 | mc cp , mc ls , mc rm |
静态网站托管 | mc website set + anonymous set public |
权限控制 | admin user add , policy attach |
数据备份 | mc mirror , mc sync , crontab |
安全访问 | share download , STS , TLS |
附:命令速查表(打印可用)
功能 | 命令 |
---|---|
上传目录 | mc cp -r ./dir myminio/bucket/ |
下载文件 | mc cp myminio/file ./local/ |
创建用户 | mc admin user add myminio user pass |
临时链接 | mc share download myminio/file --expire=1h |
镜像备份 | mc mirror /data myminio/backup |
查看状态 | mc admin info myminio |
💡 MinIO 不只是存储,更是云原生基础设施的基石。