叩町

叩町

MinIO单节点部署并配置自动同步

2025-08-20

前置条件

  • 一台 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 权限

  • 时间同步:建议启用 chronysystemd-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 为例。其他架构请参考官方下载页。

  1. 创建系统用户与数据目录

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
  1. 下载并安装 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
  1. 创建环境文件

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
  1. 配置 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
  1. 启动并设为开机自启

sudo systemctl daemon-reload
sudo systemctl enable --now minio
sudo systemctl status minio --no-pager
  1. 访问控制台

  • 控制台地址: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

  1. 下载 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
  1. 配置别名(连接到你的 MinIO)

mc alias set local http://127.0.0.1:9000 admin StrongPassw0rd!
  1. 验证连接

mc admin info local
mc ls local

创建桶与基本操作

  1. 创建桶

mc mb local/my-bucket
  1. 上传/下载对象

# 上传文件或目录
mc cp ./file.txt local/my-bucket/
mc cp -r ./data/ local/my-bucket/data/

# 下载对象
mc cp local/my-bucket/file.txt ./downloaded.txt
  1. 列举、查看、预览

mc ls local/my-bucket
mc tree local/my-bucket
mc stat local/my-bucket/file.txt
  1. 管理桶策略(示例:将桶设为只读公开)

mc anonymous set download local/my-bucket
# 恢复私有
# mc anonymous set private local/my-bucket
  1. 生成预签名 URL(临时下载链接)

# 默认 7 天有效期
mc share download local/my-bucket/file.txt

# 指定有效期
mc share download --expire 2h local/my-bucket/file.txt
  1. 生命周期与版本控制(可选)

# 开启版本控制
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 做目录/桶持续同步

  1. 本地目录 → MinIO 桶(持续监听)

mc mirror --watch --overwrite --remove ./local-dir/ local/my-bucket/
  • --watch:实时监听变更

  • --overwrite:目标存在则覆盖

  • --remove:源删除会同步删除目标

  1. MinIO 桶 → 本地目录(持续监听)

mc mirror --watch local/my-bucket/ ./local-dir/
  1. 双向效果(用两个终端各跑一个方向,或写成 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 复制为例。

  1. 在目标端配置 alias

mc alias set remote http://REMOTE_HOST:9000 admin StrongPassw0rdRemote!
  1. 在双方创建目标桶(如无)

mc mb local/my-bucket
mc mb remote/my-bucket
  1. 配置复制策略

# 允许在目标端写入复制对象(必要权限)
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
  1. 查看与测试

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 定时单向同步(离线/批处理)

  1. 编写脚本

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
  1. 加入 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.crtprivate.key

    • 更新后重启服务:systemctl restart minio

  • 存储规划:

    • 数据目录独立磁盘或阵列,开启文件系统级快照(如 ZFS/btrfs 或 LVM snapshot)。

    • 调整 LimitNOFILE 增大句柄数避免大并发瓶颈。

  • 监控与告警:

    • mc admin prometheus generate 对接 Prometheus + Grafana。

    • mc admin tracemc admin top 排查热点与延迟。

  • 备份:

    • 即便是对象存储,也需要第二副本或版本控制配合生命周期策略。


参考与进一步阅读

  • 1