基于现有启动脚本的MinIO主从配置.md 8.9 KB

基于现有启动脚本的MinIO主从配置指南

📋 配置说明

本指南基于您现有的两个MinIO启动脚本:

  • 67机器: 67 机器的minio-start.sh (主节点)
  • 68机器: 68 机器的minio-start.sh (从节点)

配置目标: 67为主节点,68为从节点,实现数据主从同步。


🎯 配置方案

方案选择

推荐使用: 实时同步模式(watch模式)

  • ✅ 实时同步: 主节点数据变化立即同步到从节点
  • ✅ 自动运行: systemd服务管理,自动重启
  • ✅ 日志完整: 详细的同步日志记录

备选方案: 定时同步模式(cron模式)

  • ⚠️ 延迟同步: 按固定时间间隔同步(如每5分钟)
  • ✅ 资源占用低: 不需要常驻进程
  • ⚠️ 数据延迟: 存在同步延迟

🚀 配置步骤

第一步:确保两台机器MinIO服务正常运行

在67机器(主节点)上:

# 1. 启动MinIO服务
chmod +x /path/to/67\ 机器的minio-start.sh
/path/to/67\ 机器的minio-start.sh

# 2. 检查服务状态
ps aux | grep minio
netstat -tlnp | grep 9000

# 3. 测试访问
curl http://127.0.0.1:9000/minio/health/live

在68机器(从节点)上:

# 1. 启动MinIO服务
chmod +x /path/to/68\ 机器的minio-start.sh
/path/to/68\ 机器的minio-start.sh

# 2. 检查服务状态
ps aux | grep minio
netstat -tlnp | grep 9000

# 3. 测试访问
curl http://127.0.0.1:9000/minio/health/live

第二步:在68机器上配置主从同步

⚠️ 重要: 同步脚本必须在68机器(从节点)上执行!

# 1. 进入部署脚本目录
cd /path/to/部署文档/生产环境双机部署方案/部署脚本/

# 2. 赋予执行权限
chmod +x setup-minio-replication.sh

# 3. 执行配置脚本
./setup-minio-replication.sh

配置脚本会自动完成:

  1. ✅ 安装MinIO客户端(mc)
  2. ✅ 测试网络连通性
  3. ✅ 配置MinIO别名(minio-master、minio-slave)
  4. ✅ 创建同步脚本(/opt/minio-sync.sh)
  5. ✅ 创建systemd服务(minio-sync.service)

第三步:执行初始同步

初始同步:将主节点现有数据全部同步到从节点(一次性操作)

# 在68机器上执行
mc mirror --remove --overwrite minio-master/ minio-slave/

说明:

  • --remove: 删除从节点中不存在于主节点的文件
  • --overwrite: 覆盖已存在的文件
  • 同步时间取决于数据量大小

查看同步进度:

# 实时查看同步日志
tail -f /var/log/minio-sync.log

第四步:启动实时同步服务

# 1. 启动同步服务
systemctl start minio-sync

# 2. 设置开机自启
systemctl enable minio-sync

# 3. 查看服务状态
systemctl status minio-sync

服务说明:

  • 使用 watch 模式,实时监控主节点变化
  • 自动重启,确保服务持续运行
  • 日志记录到 /var/log/minio-sync.log 和 journalctl

第五步:验证同步功能

测试1:在主节点上传文件

# 在67机器上
echo "test file" > test-sync.txt
mc cp test-sync.txt minio-master/ruoyi/

测试2:检查从节点是否有文件

# 在68机器上(等待几秒后)
mc ls minio-slave/ruoyi/ | grep test-sync.txt

测试3:查看同步日志

# 在68机器上
tail -f /var/log/minio-sync.log
# 或
journalctl -u minio-sync -f

预期结果:

  • 主节点上传文件后,几秒内从节点可以看到文件
  • 同步日志显示同步操作记录

🔧 服务管理命令

同步服务管理

# 启动服务
systemctl start minio-sync

# 停止服务
systemctl stop minio-sync

# 重启服务
systemctl restart minio-sync

# 查看状态
systemctl status minio-sync

# 查看日志
journalctl -u minio-sync -f
tail -f /var/log/minio-sync.log

# 禁用开机自启
systemctl disable minio-sync

# 启用开机自启
systemctl enable minio-sync

📊 定时同步模式(备选方案)

如果不想使用实时同步(watch模式),可以使用定时同步:

配置定时同步

# 1. 赋予执行权限
chmod +x /path/to/部署脚本/minio-sync-cron.sh

# 2. 添加到crontab(每5分钟同步一次)
(crontab -l 2>/dev/null; echo "*/5 * * * * /path/to/部署脚本/minio-sync-cron.sh >> /var/log/minio-sync-cron.log 2>&1") | crontab -

# 3. 查看crontab
crontab -l

定时同步说明:

  • ⚠️ 数据延迟: 最多延迟5分钟(取决于cron间隔)
  • ✅ 资源占用低: 不需要常驻进程
  • ⚠️ 需要手动切换: 主节点故障时需要手动切换

🔍 验证和测试

完整测试流程

1. 检查服务状态

# 在67机器上(主节点)
ps aux | grep minio
curl http://127.0.0.1:9000/minio/health/live

# 在68机器上(从节点)
ps aux | grep minio
systemctl status minio-sync

2. 测试文件同步

# 在67机器上创建测试文件
echo "sync test $(date)" > /tmp/sync-test-$(date +%s).txt
mc cp /tmp/sync-test-*.txt minio-master/ruoyi/

# 在68机器上检查(等待5-10秒)
mc ls minio-slave/ruoyi/ | grep sync-test

3. 测试删除同步

# 在67机器上删除文件
mc rm minio-master/ruoyi/sync-test-*.txt

# 在68机器上检查(等待5-10秒)
mc ls minio-slave/ruoyi/ | grep sync-test  # 应该找不到

4. 测试目录同步

# 在67机器上创建目录和文件
mc mb minio-master/ruoyi/test-dir
echo "test" > /tmp/test.txt
mc cp /tmp/test.txt minio-master/ruoyi/test-dir/

# 在68机器上检查
mc ls minio-slave/ruoyi/test-dir/

⚠️ 注意事项

1. 网络要求

  • ✅ 网络互通: 67和68机器必须网络互通
  • ✅ 端口开放: 确保9000端口可访问
  • ✅ 防火墙配置: 开放必要端口
# 测试网络连通性
ping 172.16.0.67
ping 172.16.0.68
telnet 172.16.0.67 9000
telnet 172.16.0.68 9000

2. 认证信息

当前配置:

  • 用户名: minioadmin
  • 密码: minioadmin@123456

⚠️ 生产环境建议:

  • 修改为强密码
  • 同步修改两个启动脚本中的密码
  • 同步修改同步脚本中的密码

3. 数据一致性

  • ⚠️ 实时同步: watch模式有秒级延迟
  • ⚠️ 定时同步: cron模式有分钟级延迟
  • ✅ 最终一致性: 数据最终会保持一致

4. 故障切换

主节点故障时:

  1. 从节点数据可能不完整(存在延迟)
  2. 需要手动切换应用连接到从节点
  3. 主节点恢复后,需要重新同步

建议:

  • 使用Nginx负载均衡,自动故障转移
  • 定期检查同步状态
  • 配置监控告警

🔧 故障排查

问题1:同步服务无法启动

# 检查服务状态
systemctl status minio-sync

# 查看详细日志
journalctl -u minio-sync -n 100

# 检查脚本权限
ls -l /opt/minio-sync.sh
chmod +x /opt/minio-sync.sh

# 手动测试脚本
/opt/minio-sync.sh

问题2:无法连接到主节点

# 检查网络连通性
ping 172.16.0.67
telnet 172.16.0.67 9000

# 检查主节点服务
ssh 172.16.0.67 "ps aux | grep minio"
ssh 172.16.0.67 "curl http://127.0.0.1:9000/minio/health/live"

# 检查防火墙
firewall-cmd --list-all | grep 9000

问题3:同步延迟大

# 检查网络延迟
ping -c 10 172.16.0.67

# 检查同步服务状态
systemctl status minio-sync

# 查看同步日志
tail -f /var/log/minio-sync.log

# 检查主节点负载
ssh 172.16.0.67 "top -bn1 | head -20"

问题4:数据不一致

# 手动触发同步
mc mirror --remove --overwrite minio-master/ minio-slave/

# 检查bucket大小
mc du minio-master/
mc du minio-slave/

# 检查文件数量
mc ls minio-master/ruoyi/ | wc -l
mc ls minio-slave/ruoyi/ | wc -l

📚 相关文档


🎯 快速参考

配置命令汇总

# 1. 在68机器上执行配置脚本
cd 部署脚本/
chmod +x setup-minio-replication.sh
./setup-minio-replication.sh

# 2. 执行初始同步
mc mirror --remove --overwrite minio-master/ minio-slave/

# 3. 启动同步服务
systemctl start minio-sync
systemctl enable minio-sync

# 4. 查看服务状态
systemctl status minio-sync
tail -f /var/log/minio-sync.log

验证命令

# 测试同步
echo "test" > test.txt
mc cp test.txt minio-master/ruoyi/
sleep 5
mc ls minio-slave/ruoyi/ | grep test.txt

# 查看同步日志
journalctl -u minio-sync -f

📝 文档版本: v1.0
🔄 最后更新: 2025-01-27
✅ 适用场景: 基于现有启动脚本的MinIO主从配置(67为主,68为从)