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

7.9 KiB
Raw Permalink Blame History

生产环境双机部署方案 - 快速指南

📁 文件结构

生产环境双机部署方案/
├── README.md                          # 本文件
├── 部署脚本/
│   ├── init-machine2.sh               # 机器2初始化脚本
│   ├── init-mysql-slave-data.sh       # MySQL从库数据初始化(重要!)
│   ├── setup-mysql-replication.sh     # MySQL主从复制配置
│   ├── setup-redis-replication.sh     # Redis主从复制配置
│   ├── setup-minio-replication.sh     # MinIO主从同步配置(新增)
│   ├── minio-sync-cron.sh             # MinIO定时同步脚本(新增)
│   └── health-check.sh                # 健康检查脚本
└── 配置文件/
    ├── nginx-load-balance.conf        # Nginx负载均衡配置
    ├── docker-compose-minio-cluster.yml  # MinIO集群配置
    ├── 67 机器的minio-start.sh        # 67机器MinIO启动脚本
    └── 68 机器的minio-start.sh        # 68机器MinIO启动脚本

🚀 快速部署步骤

第一步:机器2初始化

# 在机器2 (172.16.0.68) 上执行
chmod +x 部署脚本/init-machine2.sh
./部署脚本/init-machine2.sh

第二步:初始化从库数据(重要!)

⚠️ 必须先初始化从库数据,再配置主从复制!

# 步骤1:在主库(67)导出数据
cd 部署脚本/
chmod +x init-mysql-slave-data.sh
./init-mysql-slave-data.sh

# 步骤2:在从库(68)导入数据
./init-mysql-slave-data.sh

第三步:配置MySQL主从复制

💡 系统数据库说明:系统自带的数据库(information_schema、mysql、performance_schema、sys)不需要复制,每个MySQL实例的系统数据库都是独立管理的。详细说明请参考:MySQL系统数据库说明.md

# 步骤1:在主库(67)配置主库
chmod +x 部署脚本/setup-mysql-replication.sh
./部署脚本/setup-mysql-replication.sh
# 记录输出的 MASTER_LOG_FILE 和 MASTER_LOG_POS

# 步骤2:在从库(68)配置从库
./部署脚本/setup-mysql-replication.sh
# 输入步骤1记录的 MASTER_LOG_FILE 和 MASTER_LOG_POS

第四步:配置Redis主从复制

# 在机器1 (172.16.0.67) 上执行
chmod +x 部署脚本/setup-redis-replication.sh
./部署脚本/setup-redis-replication.sh

# 在机器2 (172.16.0.68) 上执行
chmod +x 部署脚本/setup-redis-replication.sh
./部署脚本/setup-redis-replication.sh

第五步:配置Nginx负载均衡

# 在两台机器上分别执行
cp 配置文件/nginx-load-balance.conf /etc/nginx/nginx.conf
nginx -t
systemctl reload nginx

第六步:配置MinIO主从同步(可选)

💡 MinIO 高可用说明:MinIO 不需要传统的主从配置,而是使用集群模式或主从同步。详细配置请参考:

# 方案A:基于现有启动脚本的主从同步(推荐)
# 在68机器上执行配置脚本
cd 部署脚本/
chmod +x setup-minio-replication.sh
./setup-minio-replication.sh

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

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

# 方案B:MinIO集群模式(Docker部署)
# 在两台机器上分别执行
docker-compose -f 配置文件/docker-compose-minio-cluster.yml up -d

第七步:健康检查

# 定期执行健康检查
chmod +x 部署脚本/health-check.sh
./部署脚本/health-check.sh

# 可以配置crontab定时执行
# 0 */6 * * * /path/to/health-check.sh >> /var/log/health-check.log 2>&1

📋 配置说明

密码配置

所有脚本中的默认密码:

  • MySQL root密码: Hzdyjs@Root@123456
  • Redis密码: Hzdyjs@123456
  • MySQL复制用户密码: Repl@123456
  • MinIO用户名/密码: ruoyi/ruoyi123

⚠️ 生产环境请务必修改这些密码!

IP地址配置

  • 机器1: 172.16.0.67
  • 机器2: 172.16.0.68
  • 虚拟IP (Keepalived): 172.16.0.100 (可选)

端口规划

服务 端口 说明
Nginx 80/443 Web服务
后端服务 8080/8081 应用服务
MySQL 3306 数据库
Redis 6379 缓存
MinIO 9000/9001 对象存储

🔧 常用命令

MySQL主从管理

# 查看主从状态
mysql -u root -p -e "SHOW SLAVE STATUS\G"

# 停止/启动从库复制
mysql -u root -p -e "STOP SLAVE;"
mysql -u root -p -e "START SLAVE;"

Redis主从管理

# 查看主从信息
redis-cli -a Hzdyjs@123456 INFO replication

# 手动切换主从
redis-cli -a Hzdyjs@123456 SLAVEOF NO ONE

服务管理

# 查看服务状态
systemctl status nginx
systemctl status mysqld
systemctl status redis

# 查看后端服务
ps aux | grep ruoyi-admin
netstat -tlnp | grep 8080

⚠️ 注意事项

  1. 执行脚本前请仔细阅读脚本内容
  2. 生产环境务必修改所有默认密码
  3. 确保两台机器网络互通
  4. 配置防火墙规则允许必要端口
  5. 定期执行健康检查
  6. 做好数据备份

📞 故障排查

MySQL主从复制失败

# 检查从库状态
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -i error

# 常见问题:
# 1. 网络不通 - 检查防火墙和网络
# 2. 密码错误 - 检查复制用户密码
# 3. 日志位置错误 - 重新配置MASTER_LOG_FILE和MASTER_LOG_POS

Redis主从复制失败

# 检查从库状态
redis-cli -a Hzdyjs@123456 INFO replication

# 常见问题:
# 1. 密码不匹配 - 检查masterauth配置
# 2. 网络不通 - 检查防火墙
# 3. 主库未设置密码 - 主库必须设置requirepass

后端服务无法访问

# 检查服务是否运行
ps aux | grep ruoyi-admin

# 检查端口是否监听
netstat -tlnp | grep 8080

# 检查日志
tail -f /root/app/logs/ruoyi-admin.log

# 检查健康端点
curl http://127.0.0.1:8080/health

📚 相关文档

⚡ 性能优化说明

MySQL主从复制性能影响

核心结论:MySQL主从复制对主库性能影响通常为 1-5%,通过优化可降至 1-2%。

快速优化方案:

  • ✅ 使用ROW格式binlog(已配置)
  • ✅ 设置sync_binlog=0(性能优先,已配置)
  • ✅ 增大binlog缓存(已配置)

详细分析:请查看 MySQL主从复制性能影响分析.md


📝 文档版本: v1.0
🔄 最后更新: 2025-01-27