# 基于现有启动脚本的MinIO主从配置指南 ## 📋 配置说明 本指南基于您现有的两个MinIO启动脚本: - **67机器**: `67 机器的minio-start.sh` (主节点) - **68机器**: `68 机器的minio-start.sh` (从节点) **配置目标**: 67为主节点,68为从节点,实现数据主从同步。 --- ## 🎯 配置方案 ### 方案选择 **推荐使用**: **实时同步模式(watch模式)** - ✅ **实时同步**: 主节点数据变化立即同步到从节点 - ✅ **自动运行**: systemd服务管理,自动重启 - ✅ **日志完整**: 详细的同步日志记录 **备选方案**: **定时同步模式(cron模式)** - ⚠️ **延迟同步**: 按固定时间间隔同步(如每5分钟) - ✅ **资源占用低**: 不需要常驻进程 - ⚠️ **数据延迟**: 存在同步延迟 --- ## 🚀 配置步骤 ### 第一步:确保两台机器MinIO服务正常运行 #### 在67机器(主节点)上: ```bash # 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机器(从节点)上: ```bash # 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机器(从节点)**上执行! ```bash # 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`) --- ### 第三步:执行初始同步 **初始同步**:将主节点现有数据全部同步到从节点(一次性操作) ```bash # 在68机器上执行 mc mirror --remove --overwrite minio-master/ minio-slave/ ``` **说明**: - `--remove`: 删除从节点中不存在于主节点的文件 - `--overwrite`: 覆盖已存在的文件 - 同步时间取决于数据量大小 **查看同步进度**: ```bash # 实时查看同步日志 tail -f /var/log/minio-sync.log ``` --- ### 第四步:启动实时同步服务 ```bash # 1. 启动同步服务 systemctl start minio-sync # 2. 设置开机自启 systemctl enable minio-sync # 3. 查看服务状态 systemctl status minio-sync ``` **服务说明**: - 使用 `watch` 模式,实时监控主节点变化 - 自动重启,确保服务持续运行 - 日志记录到 `/var/log/minio-sync.log` 和 `journalctl` --- ### 第五步:验证同步功能 #### 测试1:在主节点上传文件 ```bash # 在67机器上 echo "test file" > test-sync.txt mc cp test-sync.txt minio-master/ruoyi/ ``` #### 测试2:检查从节点是否有文件 ```bash # 在68机器上(等待几秒后) mc ls minio-slave/ruoyi/ | grep test-sync.txt ``` #### 测试3:查看同步日志 ```bash # 在68机器上 tail -f /var/log/minio-sync.log # 或 journalctl -u minio-sync -f ``` **预期结果**: - 主节点上传文件后,几秒内从节点可以看到文件 - 同步日志显示同步操作记录 --- ## 🔧 服务管理命令 ### 同步服务管理 ```bash # 启动服务 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模式),可以使用定时同步: ### 配置定时同步 ```bash # 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. 检查服务状态 ```bash # 在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. 测试文件同步 ```bash # 在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. 测试删除同步 ```bash # 在67机器上删除文件 mc rm minio-master/ruoyi/sync-test-*.txt # 在68机器上检查(等待5-10秒) mc ls minio-slave/ruoyi/ | grep sync-test # 应该找不到 ``` #### 4. 测试目录同步 ```bash # 在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端口可访问 - ✅ **防火墙配置**: 开放必要端口 ```bash # 测试网络连通性 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:同步服务无法启动 ```bash # 检查服务状态 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:无法连接到主节点 ```bash # 检查网络连通性 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:同步延迟大 ```bash # 检查网络延迟 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:数据不一致 ```bash # 手动触发同步 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 ``` --- ## 📚 相关文档 - [MinIO高可用配置指南.md](./MinIO高可用配置指南.md) - MinIO高可用方案对比 - [生产环境双机部署方案.md](../生产环境双机部署方案.md) - 完整部署方案 - [部署脚本/setup-minio-replication.sh](./部署脚本/setup-minio-replication.sh) - 自动配置脚本 - [部署脚本/minio-sync-cron.sh](./部署脚本/minio-sync-cron.sh) - 定时同步脚本 --- ## 🎯 快速参考 ### 配置命令汇总 ```bash # 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 ``` ### 验证命令 ```bash # 测试同步 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为从)