MinIO单节点部署并配置自动同步
编辑前置条件
一台 Linux 服务器(推荐:Ubuntu 20.04+ / Debian 11+ / CentOS 7+/ Rocky/AlmaLinux 8+)
至少 2 GB 内存,10 GB 可用磁盘空间
已开放端口:
9000(S3 API)
9001(MinIO Console 控制台)
已安装工具:curl、tar、systemd(大多数发行版默认具备)
拥有 root 或 sudo 权限
时间同步:建议启用
chrony
或systemd-timesyncd
示例环境变量(根据你的环境替换):
实例主机名或 IP:example.com 或 10.0.0.10
数据目录:/data/minio
二进制目录:/usr/local/bin
服务用户:minio
访问凭据:
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=StrongPassw0rd!
安装 MinIO(单节点单盘)
以下以 Linux x86_64 为例。其他架构请参考官方下载页。
创建系统用户与数据目录
sudo useradd -r -s /sbin/nologin minio || true
sudo mkdir -p /data/minio
sudo chown -R minio:minio /data/minio
sudo chmod -R 750 /data/minio
下载并安装 MinIO Server
curl -L https://dl.min.io/server/minio/release/linux-amd64/minio \
-o /usr/local/bin/minio
sudo chmod +x /usr/local/bin/minio
创建环境文件
sudo mkdir -p /etc/minio
sudo tee /etc/minio/minio.env >/dev/null <<'EOF'
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=StrongPassw0rd!
MINIO_VOLUMES="/data/minio"
MINIO_OPTS="--address :9000 --console-address :9001"
EOF
sudo chown -R minio:minio /etc/minio
sudo chmod 640 /etc/minio/minio.env
配置 systemd 服务
sudo tee /etc/systemd/system/minio.service >/dev/null <<'EOF'
[Unit]
Description=MinIO Object Storage
Documentation=https://min.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
User=minio
Group=minio
EnvironmentFile=/etc/minio/minio.env
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
Restart=always
LimitNOFILE=65536
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
EOF
启动并设为开机自启
sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo systemctl status minio --no-pager
访问控制台
控制台地址:http://<服务器IP或域名>:9001
使用
MINIO_ROOT_USER
/MINIO_ROOT_PASSWORD
登录
可选:放行防火墙端口(以 ufw 举例)
sudo ufw allow 9000/tcp
sudo ufw allow 9001/tcp
sudo ufw reload
安装 MinIO 客户端 mc
下载 mc
curl -L https://dl.min.io/client/mc/release/linux-amd64/mc \
-o /usr/local/bin/mc
sudo chmod +x /usr/local/bin/mc
配置别名(连接到你的 MinIO)
mc alias set local http://127.0.0.1:9000 admin StrongPassw0rd!
验证连接
mc admin info local
mc ls local
创建桶与基本操作
创建桶
mc mb local/my-bucket
上传/下载对象
# 上传文件或目录
mc cp ./file.txt local/my-bucket/
mc cp -r ./data/ local/my-bucket/data/
# 下载对象
mc cp local/my-bucket/file.txt ./downloaded.txt
列举、查看、预览
mc ls local/my-bucket
mc tree local/my-bucket
mc stat local/my-bucket/file.txt
管理桶策略(示例:将桶设为只读公开)
mc anonymous set download local/my-bucket
# 恢复私有
# mc anonymous set private local/my-bucket
生成预签名 URL(临时下载链接)
# 默认 7 天有效期
mc share download local/my-bucket/file.txt
# 指定有效期
mc share download --expire 2h local/my-bucket/file.txt
生命周期与版本控制(可选)
# 开启版本控制
mc version enable local/my-bucket
# 创建生命周期:30 天后过期带有 tmp/ 前缀的对象
mc ilm add --expiry-days 30 --prefix "tmp/" local/my-bucket
mc ilm ls local/my-bucket
配置自动同步
MinIO 提供多种同步与复制方式,常见需求包括:
本地目录与桶之间的单向或双向持续同步
MinIO 与另一个 MinIO 或 S3 兼容存储之间的异步复制
定时任务批量同步
下面给出三种实用方案。
方案 A:使用 mc mirror
做目录/桶持续同步
本地目录 → MinIO 桶(持续监听)
mc mirror --watch --overwrite --remove ./local-dir/ local/my-bucket/
--watch
:实时监听变更
--overwrite
:目标存在则覆盖
--remove
:源删除会同步删除目标
MinIO 桶 → 本地目录(持续监听)
mc mirror --watch local/my-bucket/ ./local-dir/
双向效果(用两个终端各跑一个方向,或写成 systemd 服务)
将命令封装为 systemd 服务示例:
sudo tee /etc/systemd/system/minio-mirror.service >/dev/null <<'EOF'
[Unit]
Description=Mirror local directory to MinIO bucket
After=network-online.target
Wants=network-online.target
[Service]
ExecStart=/usr/local/bin/mc mirror --watch --overwrite --remove /srv/data/ local/my-bucket/
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now minio-mirror
方案 B:桶到桶的异步复制(Site Replication / Bucket Replication)
适合两个 MinIO 站点之间复制。以 bucket-level 复制为例。
在目标端配置 alias
mc alias set remote http://REMOTE_HOST:9000 admin StrongPassw0rdRemote!
在双方创建目标桶(如无)
mc mb local/my-bucket
mc mb remote/my-bucket
配置复制策略
# 允许在目标端写入复制对象(必要权限)
mc admin policy attach remote readwrite --user admin
# 配置从 local -> remote 的复制
mc replicate add \
--remote-bucket my-bucket \
--remote-service remote \
--replicate "delete,metadata,version" \
local/my-bucket
查看与测试
mc replicate ls local/my-bucket
mc cp ./file.txt local/my-bucket/
# 观察 remote/my-bucket 是否出现该对象
mc ls remote/my-bucket
注意:
若开启版本控制才能复制版本历史:
mc version enable local/my-bucket remote/my-bucket
生产建议启用 TLS,并使用服务账户而非 root 用户
方案 C:用 cron 定时单向同步(离线/批处理)
编写脚本
sudo tee /usr/local/bin/sync-to-minio.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
SRC_DIR="/srv/backup/"
DST="local/backup-bucket/"
/usr/local/bin/mc mirror --overwrite --remove "$SRC_DIR" "$DST"
EOF
sudo chmod +x /usr/local/bin/sync-to-minio.sh
加入 crontab(每晚 2 点执行)
crontab -e
# 添加:
0 2 * * * /usr/local/bin/sync-to-minio.sh >> /var/log/sync-to-minio.log 2>&1
常见问题与优化建议
生产环境请使用分布式 MinIO(4+ 盘/节点,启用纠删码),单节点单盘仅适合测试或低风险业务。
凭据管理:
使用环境变量或
mc admin user svcacct add
创建服务账户,赋予最小权限。结合 Vault/KMS 对密钥、加密密钥进行集中管理。
TLS/HTTPS:
将证书放置于
/home/minio/.minio/certs
或/etc/minio/certs
(依据运行用户),包含public.crt
与private.key
。更新后重启服务:
systemctl restart minio
存储规划:
数据目录独立磁盘或阵列,开启文件系统级快照(如 ZFS/btrfs 或 LVM snapshot)。
调整
LimitNOFILE
增大句柄数避免大并发瓶颈。
监控与告警:
mc admin prometheus generate
对接 Prometheus + Grafana。
mc admin trace
、mc admin top
排查热点与延迟。
备份:
即便是对象存储,也需要第二副本或版本控制配合生命周期策略。
参考与进一步阅读
- 1
-
分享