Files
2025-11-27 00:02:01 +08:00

83 lines
2.2 KiB
Bash

#!/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