使用MC工具同步MinIO

使用MC工具同步MinIO

通过docker部署的相关服务

一、确定服务器ip

  • Node A:11.16.212.196
  • Node B:11.16.212.197

二、确保两台服务器已安装 MinIO 并运行

docker ps

三、部署mc工具(两台都要)

1.下载mc工具:

MinIO Downloads

2.上传MC

#到根目录

cd /

#进到opt文件夹

cd opt

#创建文件夹

mkdir deploy

# 把下载的文件上传到deploy文件夹下

# 请将下方命令中的 "mc.RELEASE.2025-08-13T08-35-41Z" 替换为您实际的文件名

mv /opt/deploy/mc.RELEASE.2025-08-13T08-35-41Z /opt/deploy/mc

# 赋予执行权限

chmod +x /opt/deploy/mc

# 创建软链接到系统路径,方便全局调用

sudo ln -s /opt/deploy/mc /usr/local/bin/mc

#验证安装

mc --version

# 正常应输出版本信息,例如: mc version RELEASE.2025-08-13T08:35:41Z

四、配置mc别名(按节点分别配置)

Node A (11.16.212.196)

# 设置本地别名为自己的IP,远程别名为对端IP

mc alias set local http://11.16.212.196:9000 minioadmin minioadmin

mc alias set remote http://11.16.212.197:9000 minioadmin minioadmin

Node B (11.16.212.197)

# 设置本地别名为自己的IP,远程别名为对端IP

mc alias set local http://11.16.212.197:9000 minioadmin minioadmin

mc alias set remote http://11.16.212.196:9000 minioadmin minioadmin

验证别名

# 列出本地的桶
/opt/deploy/mc ls local/

# 列出远端的桶
/opt/deploy/mc ls remote/

遇见问题:出现了别名混淆的问题,执行完上面命令使用下面命令检查是否有重复(都要执行)

mc ls local # 应该能列出本地的buckets

mc ls remote # 应该能列出服务器的buckets

验证是否有local_minio和remote_minio

删除旧别名

/usr/local/bin/mc alias remove local_minio
/usr/local/bin/mc alias remove remote_minio

五、创建同步脚本

两台服务器均执行:

cat << 'SCRIPT' > /opt/deploy/sync.sh #!/bin/bash set -e MC="/opt/deploy/mc" LOG_FILE="/var/log/minio_sync.log" # 文件锁,防止并发 exec 200>/tmp/minio_sync.lock if ! flock -n 200; then exit 0 fi echo "[$(date '+%F %T')] 开始同步 local → remote ..." >> "$LOG_FILE" BUCKETS=$(${MC} ls local/ 2>/dev/null | awk '{print $5}' | sed 's#/##') if [ -z "$BUCKETS" ]; then echo "[$(date '+%F %T')] 没有桶需要同步" >> "$LOG_FILE" exit 0 fi for bucket in $BUCKETS; do ${MC} ls remote/$bucket >/dev/null 2>&1 || ${MC} mb remote/$bucket ${MC} mirror --overwrite --preserve local/$bucket remote/$bucket >> "$LOG_FILE" 2>&1 done echo "[$(date '+%F %T')] 同步完成" >> "$LOG_FILE" SCRIPT

脚本说明

特性说明
无需 VIP 检测两台各自直接往对方推送,实现双向同步
文件锁防止 cron 多次触发导致并发冲突
自动建桶远端缺少桶时自动创建
全量 mirror--overwrite覆盖同名对象,--preserve保留时间戳
日志输出到/var/log/minio_sync.log

#赋予权限

chmod +x /opt/deploy/sync.sh

确认 mc 路径(关键!)

which mc

# 如果输出不是 /usr/local/bin/mc,请立即修正:

# sed -i 's|MC_PATH="/usr/local/bin/mc"|MC_PATH="你的实际路径"|' /opt/deploy/sync.sh

六、手动运行与验证

两台服务器都要执行:

#执行脚本

/opt/deploy/sync.sh

# 查看日志
tail -f /var/log/minio_sync.log

执行完成后查看两边的照片是否同步

七、配置定时任务

两台服务器均执行:

crontab -e

添加进去

#定时任务

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
*/5 * * * * /opt/deploy/sync.sh >/dev/null 2>&1

保存退出(:wq

验证:

crontab -l

输入配置信息