#!/bin/bash # MinIO主从同步脚本(定时同步版本) # 版本: 1.0 # 描述: 定时从主节点(67)同步数据到从节点(68) # 使用场景: 如果不想使用watch模式,可以使用此脚本配合crontab定时同步 set -e # 配置参数 MASTER_IP="172.16.0.67" SLAVE_IP="172.16.0.68" MASTER_PORT="9000" SLAVE_PORT="9000" MINIO_USER="minioadmin" MINIO_PASSWORD="minioadmin@123456" # 日志文件 SYNC_LOG="/var/log/minio-sync-cron.log" # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$SYNC_LOG" } log "=========================================" log "开始MinIO主从同步(定时同步)" log "=========================================" # 检查MinIO客户端 if ! command -v mc &> /dev/null; then log "错误: MinIO客户端未安装,请先运行 setup-minio-replication.sh" exit 1 fi # 配置别名 mc alias set minio-master "http://${MASTER_IP}:${MASTER_PORT}" "$MINIO_USER" "$MINIO_PASSWORD" 2>/dev/null mc alias set minio-slave "http://${SLAVE_IP}:${SLAVE_PORT}" "$MINIO_USER" "$MINIO_PASSWORD" 2>/dev/null # 检查主节点连接 if ! mc ls minio-master &> /dev/null; then log "错误: 无法连接到主节点 ($MASTER_IP:$MASTER_PORT)" exit 1 fi # 检查从节点连接 if ! mc ls minio-slave &> /dev/null; then log "错误: 无法连接到从节点 ($SLAVE_IP:$SLAVE_PORT)" exit 1 fi log "连接检查通过,开始同步..." # 执行同步 # --remove: 删除目标中不存在于源的文件 # --overwrite: 覆盖已存在的文件 # --quiet: 减少输出 log "执行同步命令: mc mirror --remove --overwrite minio-master/ minio-slave/" SYNC_START_TIME=$(date +%s) if mc mirror --remove --overwrite minio-master/ minio-slave/ >> "$SYNC_LOG" 2>&1; then SYNC_END_TIME=$(date +%s) SYNC_DURATION=$((SYNC_END_TIME - SYNC_START_TIME)) log "✓ 同步成功完成,耗时: ${SYNC_DURATION}秒" # 显示同步统计 log "同步统计:" mc du minio-master/ | tee -a "$SYNC_LOG" mc du minio-slave/ | tee -a "$SYNC_LOG" exit 0 else SYNC_END_TIME=$(date +%s) SYNC_DURATION=$((SYNC_END_TIME - SYNC_START_TIME)) log "✗ 同步失败,耗时: ${SYNC_DURATION}秒" log "请查看日志: $SYNC_LOG" exit 1 fi