Files
hzdyjs/docs/部署文档/生产环境双机部署方案.md
T
2025-11-27 00:02:01 +08:00

979 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 生产环境双机部署方案
## 📋 方案概述
### 现状
- **机器1**: 172.16.0.67(已完整部署)
- **机器2**: 172.16.0.68(待部署)
- **应用栈**: 移动端前端、Web前端、后端服务、Nginx、Redis、MySQL、MinIO
### 设计目标
1. **高可用性**: 单机故障不影响服务可用性
2. **负载均衡**: 合理分配两台机器的负载
3. **数据一致性**: 确保数据同步和一致性
4. **可扩展性**: 支持后续扩展和升级
5. **运维便利**: 便于监控、维护和故障排查
---
## 🏗️ 架构设计方案
### 方案一:主备模式(推荐用于初期)
```
┌─────────────────────────────────────────────────────────┐
│ 用户请求 │
└──────────────────────┬──────────────────────────────────┘
│
▼
┌──────────────────────┐
│ Nginx (67/68) │
│ 负载均衡/主备 │
└──────────┬───────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 后端服务 │ │ 后端服务 │ │ 后端服务 │
│ 67:8080 │ │ 67:8081 │ │ 68:8080 │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└──────────────┼──────────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MySQL │ │ Redis │ │ MinIO │
│ 67(主) │ │ 67(主) │ │ 67(主) │
│ 68(从) │ │ 68(从) │ │ 68(从) │
└─────────────┘ └─────────────┘ └─────────────┘
```
### 方案二:双活模式(推荐用于高负载场景)
```
┌─────────────────────────────────────────────────────────┐
│ 用户请求 │
└──────────────────────┬──────────────────────────────────┘
│
▼
┌──────────────────────┐
│ Nginx (67/68) │
│ 双机负载均衡 │
└──────────┬───────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 后端服务 │ │ 后端服务 │ │ 后端服务 │
│ 67:8080 │ │ 67:8081 │ │ 68:8080 │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└──────────────┼──────────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MySQL │ │ Redis │ │ MinIO │
│ 67(主) │ │ 67(主) │ │ 67+68集群 │
│ 68(从) │ │ 68(从) │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
```
---
## 📊 资源分配方案
### 机器1 (172.16.0.67) - 主节点
| 服务 | 端口 | 说明 |
|------|------|------|
| **前端服务** | | |
| Web前端 | 80 | Nginx静态资源 |
| 移动端前端 | 80 | Nginx静态资源 |
| **后端服务** | | |
| 后端实例1 | 8080 | 主服务实例 |
| 后端实例2 | 8081 | 备用实例(可选) |
| **中间件** | | |
| MySQL | 3306 | 主库 |
| Redis | 6379 | 主节点 |
| MinIO | 9000/9001 | 主节点 |
| **负载均衡** | | |
| Nginx | 80/443 | 主负载均衡器 |
### 机器2 (172.16.0.68) - 备节点/负载节点
| 服务 | 端口 | 说明 |
|------|------|------|
| **前端服务** | | |
| Web前端 | 80 | Nginx静态资源(同步) |
| 移动端前端 | 80 | Nginx静态资源(同步) |
| **后端服务** | | |
| 后端实例1 | 8080 | 负载均衡实例 |
| 后端实例2 | 8081 | 负载均衡实例(可选) |
| **中间件** | | |
| MySQL | 3306 | 从库(主从复制) |
| Redis | 6379 | 从节点(主从复制) |
| MinIO | 9000/9001 | 从节点/集群节点 |
| **负载均衡** | | |
| Nginx | 80/443 | 备用负载均衡器 |
---
## 🔧 详细部署配置
### 1. MySQL主从复制配置
#### 1.1 主库配置(67)
```ini
# /etc/mysql/my.cnf
[mysqld]
# 基础主从配置
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
binlog-do-db = hzdyjs_xg
expire_logs_days = 7
max_binlog_size = 500M
# 性能优化配置(减少主从复制对主库性能影响)
# 方案A:性能优先(推荐,性能影响约1-2%)
sync_binlog = 0 # 由操作系统控制刷盘,性能最优
binlog_cache_size = 2M # 增大binlog缓存
max_binlog_cache_size = 512M
# 方案B:平衡方案(性能影响约2-3%)
# sync_binlog = 100 # 每100个事务刷盘一次
# binlog_cache_size = 2M
# 方案C:安全优先(性能影响约4-6%)
# sync_binlog = 1 # 每次事务都刷盘,最安全但性能下降
# binlog_cache_size = 1M
```
> **💡 性能影响说明**:MySQL主从复制对主库性能影响通常为1-5%,具体取决于配置和负载。详细分析请参考:[MySQL主从复制性能影响分析.md](./MySQL主从复制性能影响分析.md)
#### 1.2 从库配置(68)
```ini
# /etc/mysql/my.cnf
[mysqld]
server-id = 2
relay-log = mysql-relay-bin
read-only = 1
replicate-do-db = hzdyjs_xg
```
#### 1.3 从库数据初始化(重要!)
**⚠️ 关键步骤**:在配置主从复制之前,必须先初始化从库数据,确保从库有和主库一致的数据。
**方法一:使用自动化脚本(推荐)**
```bash
# 步骤1:在主库(67)执行数据导出
cd 部署脚本/
chmod +x init-mysql-slave-data.sh
./init-mysql-slave-data.sh
# 步骤2:在从库(68)执行数据导入
# 脚本会自动从主库复制备份文件到从库
./init-mysql-slave-data.sh
```
**方法二:手动执行**
```bash
# 步骤1:在主库(67)锁定表并导出数据
mysql -u root -p -e "FLUSH TABLES WITH READ LOCK;"
mysql -u root -p -e "SET GLOBAL read_only = ON;"
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
--master-data=2 \
hzdyjs_xg > /tmp/hzdyjs_xg_backup.sql
mysql -u root -p -e "UNLOCK TABLES;"
mysql -u root -p -e "SET GLOBAL read_only = OFF;"
# 记录主库binlog位置
mysql -u root -p -e "SHOW MASTER STATUS;" > /tmp/master_status.txt
# 步骤2:复制备份文件到从库
scp /tmp/hzdyjs_xg_backup.sql root@172.16.0.68:/tmp/
scp /tmp/master_status.txt root@172.16.0.68:/tmp/
# 步骤3:在从库(68)导入数据
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS hzdyjs_xg CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
mysql -u root -p hzdyjs_xg < /tmp/hzdyjs_xg_backup.sql
```
> **💡 重要提示**:
> - 从库必须先有和主库一致的数据,才能配置主从复制
> - 使用`--master-data=2`参数可以在备份文件中自动包含binlog位置信息
> - 如果从库已有数据,需要先清空或重建数据库
> - **⚠️ 系统数据库说明**:系统自带的数据库(`information_schema`、`mysql`、`performance_schema`、`sys`)**不需要**复制,原因如下:
> - `information_schema`:MySQL自动管理的元数据,只读,每个实例独立
> - `mysql`:系统数据库,包含用户和权限信息,但主从复制配置中已使用`binlog-do-db = hzdyjs_xg`,只复制业务数据库
> - `performance_schema`:性能监控数据库,每个实例独立,不需要复制
> - `sys`:基于performance_schema的视图,每个实例独立,不需要复制
> - **结论**:只需要复制业务数据库`hzdyjs_xg`,系统数据库由MySQL自动管理,保持默认状态即可
#### 1.4 主从复制设置
```sql
-- 在主库(67)执行
CREATE USER 'repl'@'172.16.0.68' IDENTIFIED BY 'Repl@123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.16.0.68';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
-- 在从库(68)执行(使用主库的binlog位置)
CHANGE MASTER TO
MASTER_HOST='172.16.0.67',
MASTER_USER='repl',
MASTER_PASSWORD='Repl@123456',
MASTER_LOG_FILE='mysql-bin.000001', -- 从 SHOW MASTER STATUS 获取
MASTER_LOG_POS=154; -- 从 SHOW MASTER STATUS 获取
START SLAVE;
SHOW SLAVE STATUS\G;
```
### 2. Redis主从复制配置
#### 2.1 主节点配置(67)
```conf
# /etc/redis/redis.conf
bind 0.0.0.0
port 6379
requirepass Hzdyjs@123456
masterauth Hzdyjs@123456
```
#### 2.2 从节点配置(68)
```conf
# /etc/redis/redis.conf
bind 0.0.0.0
port 6379
requirepass Hzdyjs@123456
replicaof 172.16.0.67 6379
masterauth Hzdyjs@123456
```
#### 2.3 验证主从复制
```bash
# 在主节点写入
redis-cli -a Hzdyjs@123456 set test_key "test_value"
# 在从节点读取
redis-cli -a Hzdyjs@123456 get test_key
```
### 3. MinIO集群/主从配置
#### 方案A:MinIO集群模式(推荐)
```yaml
# docker-compose-minio-cluster.yml
version: '3.8'
services:
minio1:
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
container_name: minio1
command: server --address ":9000" --console-address ":9001" http://minio{1...2}/data
environment:
MINIO_ROOT_USER: ruoyi
MINIO_ROOT_PASSWORD: ruoyi123
volumes:
- /docker/minio/data1:/data
ports:
- "9000:9000"
- "9001:9001"
networks:
- minio-cluster
minio2:
image: minio/minio:RELEASE.2025-04-22T22-12-26Z
container_name: minio2
command: server --address ":9000" --console-address ":9001" http://minio{1...2}/data
environment:
MINIO_ROOT_USER: ruoyi
MINIO_ROOT_PASSWORD: ruoyi123
volumes:
- /docker/minio/data2:/data
ports:
- "9002:9000"
- "9003:9001"
networks:
- minio-cluster
networks:
minio-cluster:
driver: bridge
```
#### 方案B:MinIO主从同步(简单方案)
使用 `mc mirror` 命令定期同步:
```bash
# 在68机器上配置定时同步
mc alias set minio67 http://172.16.0.67:9000 ruoyi ruoyi123
mc alias set minio68 http://172.16.0.68:9000 ruoyi ruoyi123
# 定时同步脚本
#!/bin/bash
mc mirror --watch minio67/ruoyi minio68/ruoyi
```
### 4. Nginx负载均衡配置
#### 4.1 主负载均衡器(67)
```nginx
# /etc/nginx/nginx.conf
upstream backend_servers {
# 机器67的后端实例
server 127.0.0.1:8080 weight=2 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081 weight=1 max_fails=3 fail_timeout=30s;
# 机器68的后端实例
server 172.16.0.68:8080 weight=2 max_fails=3 fail_timeout=30s;
server 172.16.0.68:8081 weight=1 max_fails=3 fail_timeout=30s;
# 健康检查
keepalive 32;
}
server {
listen 80;
server_name your-domain.com;
# Web前端
location / {
root /root/hzdyjsweb9091/dist;
try_files $uri $uri/ /index.html;
expires 1y;
add_header Cache-Control "public, immutable";
}
# 移动端前端
location /mobile {
alias /root/mobile/dist;
try_files $uri $uri/ /mobile/index.html;
expires 1y;
add_header Cache-Control "public, immutable";
}
# API代理
location /prod-api/ {
proxy_pass http://backend_servers/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时设置
proxy_connect_timeout 30s;
proxy_send_timeout 30s;
proxy_read_timeout 30s;
}
}
```
#### 4.2 备用负载均衡器(68)
配置与67相同,作为备用。可通过Keepalived实现VIP自动切换。
### 5. Keepalived高可用配置(可选)
#### 5.1 安装Keepalived
```bash
# CentOS/RHEL
yum install -y keepalived
# Ubuntu/Debian
apt-get install -y keepalived
```
#### 5.2 主节点配置(67)
```conf
# /etc/keepalived/keepalived.conf
global_defs {
router_id nginx_master
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -2
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass KeepAlive@123
}
virtual_ipaddress {
172.16.0.100/24
}
track_script {
chk_nginx
}
}
```
#### 5.3 备节点配置(68)
```conf
# /etc/keepalived/keepalived.conf
global_defs {
router_id nginx_backup
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 2
weight -2
fall 3
rise 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass KeepAlive@123
}
virtual_ipaddress {
172.16.0.100/24
}
track_script {
chk_nginx
}
}
```
#### 5.4 Nginx健康检查脚本
```bash
#!/bin/bash
# /etc/keepalived/check_nginx.sh
if ! pgrep -x nginx > /dev/null; then
systemctl start nginx
sleep 2
if ! pgrep -x nginx > /dev/null; then
exit 1
fi
fi
exit 0
```
---
## 🚀 部署步骤
### 阶段一:机器2基础环境搭建
```bash
# 1. 安装基础软件
yum install -y nginx mysql redis docker docker-compose
# 2. 创建目录结构
mkdir -p /root/hzdyjsweb9091/dist
mkdir -p /root/mobile/dist
mkdir -p /docker/{mysql,redis,minio}/{data,config,logs}
# 3. 配置防火墙
firewall-cmd --permanent --add-port={80,443,8080,8081,3306,6379,9000,9001}/tcp
firewall-cmd --reload
```
### 阶段二:数据库主从配置
**⚠️ 重要**:必须先初始化从库数据,再配置主从复制!
```bash
# 步骤1:从库数据初始化(在主库67执行)
cd 部署脚本/
chmod +x init-mysql-slave-data.sh
./init-mysql-slave-data.sh
# 步骤2:从库数据导入(在从库68执行)
./init-mysql-slave-data.sh
# 步骤3:配置主从复制(在主库67执行)
chmod +x setup-mysql-replication.sh
./setup-mysql-replication.sh
# 步骤4:配置从库复制(在从库68执行)
./setup-mysql-replication.sh
# 输入主库的 MASTER_LOG_FILE 和 MASTER_LOG_POS(从步骤1的输出获取)
```
### 阶段三:Redis主从配置
```bash
# 1. 在67机器导出Redis数据(如需要)
redis-cli -a Hzdyjs@123456 --rdb /tmp/redis_backup.rdb
# 2. 在68机器配置Redis从节点(参考上述配置)
```
### 阶段四:MinIO配置
```bash
# 方案A:MinIO集群
docker-compose -f docker-compose-minio-cluster.yml up -d
# 方案B:MinIO主从同步
# 配置定时同步脚本
```
### 阶段五:后端服务部署
```bash
# 1. 复制JAR包到68机器
scp ruoyi-admin.jar root@172.16.0.68:/root/
# 2. 修改配置文件
# application-prod.yml 中修改数据库和Redis地址
# 3. 启动服务
java -jar -Dspring.profiles.active=prod ruoyi-admin.jar --server.port=8080
```
### 阶段六:前端部署
```bash
# 1. 构建前端
cd web && npm run build:prod
cd ../mobile && npm run build:prod
# 2. 同步到68机器
rsync -avz web/dist/ root@172.16.0.68:/root/hzdyjsweb9091/dist/
rsync -avz mobile/dist/ root@172.16.0.68:/root/mobile/dist/
```
### 阶段七:Nginx配置
```bash
# 1. 复制Nginx配置到68机器
scp nginx.conf root@172.16.0.68:/etc/nginx/nginx.conf
# 2. 测试配置
nginx -t
# 3. 启动Nginx
systemctl start nginx
systemctl enable nginx
```
---
## ⚡ 性能优化
### 1. MySQL主从复制性能优化
#### 1.1 性能影响分析
**核心结论**:MySQL主从复制对主库性能的影响通常很小,约在 **1-5%** 之间。
| 场景 | 性能影响 | 说明 |
|------|---------|------|
| 低负载场景 | 1-2% | 写入量小,影响可忽略 |
| 中等负载场景 | 2-4% | 正常业务负载,影响轻微 |
| 高负载场景 | 4-8% | 大量写入操作,影响稍明显 |
**详细分析文档**:📄 [MySQL主从复制性能影响分析.md](./MySQL主从复制性能影响分析.md)
#### 1.2 优化配置方案
**推荐配置(性能优先)**:
```ini
# /etc/my.cnf 主库配置
[mysqld]
# 性能优化配置
sync_binlog = 0 # 由操作系统控制刷盘,性能最优(性能影响约1-2%)
binlog_cache_size = 2M # 增大binlog缓存
max_binlog_cache_size = 512M
max_binlog_size = 500M # 增大binlog文件大小
```
**性能提升**:
- 使用`sync_binlog=0`可提升约3-5%
- 增大binlog缓存可减少磁盘I/O
- 使用SSD存储binlog可提升50-80%
#### 1.3 性能监控
```sql
-- 查看binlog写入性能
SHOW STATUS LIKE 'Binlog_cache%';
-- 查看主从复制延迟
SHOW SLAVE STATUS\G
-- 关注:Seconds_Behind_Master(应 < 1秒)
-- 查看binlog文件大小
SHOW BINARY LOGS;
```
### 2. Redis主从复制性能优化
#### 2.1 性能影响分析
Redis主从复制对主节点性能影响极小(< 1%),因为:
- Redis主从复制是异步的
- 主节点只需要将命令发送给从节点
- 网络传输开销很小
#### 2.2 优化配置
```conf
# /etc/redis/redis.conf 主节点配置
# 优化网络传输
tcp-backlog = 511
tcp-keepalive = 300
# 优化内存
maxmemory-policy = allkeys-lru
```
### 3. Nginx负载均衡性能优化
#### 3.1 连接池优化
```nginx
# nginx.conf
upstream backend_servers {
# 使用keepalive连接池
keepalive 32;
keepalive_requests 100;
keepalive_timeout 60s;
# 负载均衡算法
least_conn; # 最少连接数(推荐)
# ip_hash; # IP哈希(会话保持)
# fair; # 响应时间(需要第三方模块)
}
```
#### 3.2 缓存优化
```nginx
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
# API响应缓存(可选)
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m max_size=1g inactive=60m;
```
### 4. 系统资源优化
#### 4.1 内核参数优化
```bash
# /etc/sysctl.conf
# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 内存优化
vm.swappiness = 10
vm.overcommit_memory = 1
# 应用配置
sysctl -p
```
#### 4.2 文件描述符优化
```bash
# /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
```
### 5. 数据库查询优化
#### 5.1 读写分离
```yaml
# application-prod.yml
spring:
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
url: jdbc:mysql://172.16.0.67:3306/hzdyjs_xg
# 写操作使用主库
slave:
url: jdbc:mysql://172.16.0.68:3306/hzdyjs_xg
# 读操作使用从库
```
**性能提升**:
- 读操作分流到从库,减轻主库压力
- 主库专注于写操作,性能提升约20-30%
#### 5.2 连接池优化
```yaml
# application-prod.yml
spring:
datasource:
druid:
initial-size: 10
min-idle: 10
max-active: 50
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
```
### 6. 性能测试和基准
#### 6.1 压力测试
```bash
# 使用Apache Bench测试
ab -n 10000 -c 100 http://your-domain.com/prod-api/
# 使用wrk测试
wrk -t4 -c100 -d30s http://your-domain.com/prod-api/
```
#### 6.2 性能基准
| 指标 | 目标值 | 说明 |
|------|--------|------|
| API响应时间 | < 200ms | 95%请求 |
| 数据库查询时间 | < 50ms | 平均查询时间 |
| 主从复制延迟 | < 1s | Seconds_Behind_Master |
| CPU使用率 | < 70% | 正常负载 |
| 内存使用率 | < 80% | 正常负载 |
---
## 📈 监控和运维
### 1. 健康检查脚本
```bash
#!/bin/bash
# health_check.sh
# 检查MySQL主从状态
mysql -u root -p -e "SHOW SLAVE STATUS\G" | grep -i "slave_io_running\|slave_sql_running"
# 检查Redis主从状态
redis-cli -a Hzdyjs@123456 INFO replication
# 检查后端服务
curl -f http://127.0.0.1:8080/health || echo "Backend service down"
# 检查Nginx
systemctl is-active nginx || echo "Nginx down"
```
### 2. 日志收集
```bash
# 统一日志目录
/var/log/app/
├── nginx/
│ ├── access.log
│ └── error.log
├── backend/
│ ├── ruoyi-admin-8080.log
│ └── ruoyi-admin-8081.log
└── mysql/
├── error.log
└── slow-query.log
```
### 3. 监控指标
- **系统指标**: CPU、内存、磁盘、网络
- **应用指标**: 请求量、响应时间、错误率
- **数据库指标**: 连接数、慢查询、主从延迟
- **Redis指标**: 内存使用、命中率、主从状态
---
## 🔄 故障转移方案
### 1. 自动故障检测
```bash
#!/bin/bash
# failover_check.sh
# 检查主节点健康状态
if ! curl -f http://172.16.0.67:8080/health; then
echo "主节点故障,切换到备节点"
# 执行切换逻辑
# 1. 更新DNS/负载均衡配置
# 2. 提升从库为主库
# 3. 启动备节点服务
fi
```
### 2. 手动故障转移流程
1. **检测故障**: 确认主节点不可用
2. **停止主节点服务**: 防止数据冲突
3. **提升从库**: MySQL从库提升为主库
4. **切换Redis**: Redis从节点提升为主节点
5. **更新配置**: 修改应用配置指向新主节点
6. **启动服务**: 在备节点启动所有服务
7. **验证功能**: 验证服务正常
---
## ⚠️ 注意事项
### 1. 数据一致性
- MySQL主从复制可能存在延迟,关键操作建议在主库执行
- Redis主从复制为异步,注意数据一致性
- MinIO集群模式确保数据一致性,主从同步可能存在延迟
### 2. 网络配置
- 确保两台机器网络互通
- 配置防火墙规则允许必要端口
- 建议使用内网IP通信,提高安全性
### 3. 资源规划
- 根据实际负载调整实例数量
- 监控资源使用情况,及时扩容
- 预留足够的磁盘空间用于日志和备份
### 4. 安全配置
- 修改默认密码
- 配置SSL证书
- 限制数据库和Redis的访问IP
- 定期更新系统和软件
### 5. 备份策略
- **数据库**: 每日全量备份 + 实时binlog备份
- **文件存储**: MinIO定期同步/备份
- **配置文件**: Git版本控制
- **应用日志**: 定期归档和清理
---
## 📋 部署检查清单
### 部署前检查
- [ ] 两台机器网络互通
- [ ] 防火墙规则配置完成
- [ ] 基础软件安装完成
- [ ] 目录结构创建完成
- [ ] 配置文件准备完成
### 部署后验证
- [ ] MySQL主从复制正常
- [ ] Redis主从复制正常
- [ ] MinIO集群/同步正常
- [ ] 后端服务启动正常
- [ ] Nginx负载均衡正常
- [ ] 前端访问正常
- [ ] API接口测试通过
- [ ] 健康检查脚本正常
- [ ] 监控告警配置完成
---
## 🔧 常用运维命令
### MySQL主从管理
```bash
# 查看主从状态
mysql -u root -p -e "SHOW SLAVE STATUS\G"
# 停止从库复制
mysql -u root -p -e "STOP SLAVE;"
# 启动从库复制
mysql -u root -p -e "START SLAVE;"
# 重置从库
mysql -u root -p -e "RESET SLAVE;"
```
### Redis主从管理
```bash
# 查看主从信息
redis-cli -a Hzdyjs@123456 INFO replication
# 手动切换主从
redis-cli -a Hzdyjs@123456 SLAVEOF NO ONE
```
### 服务管理
```bash
# 查看后端服务状态
ps aux | grep ruoyi-admin
# 重启后端服务
systemctl restart ruoyi-admin
# 查看Nginx状态
systemctl status nginx
# 重载Nginx配置
nginx -s reload
```
---
## 📞 技术支持
如遇到部署问题,请检查:
1. 系统日志和应用日志
2. 网络连通性
3. 防火墙和安全组设置
4. 数据库连接状态
5. 资源使用情况(CPU、内存、磁盘)
---
**📝 文档版本**: v1.0
**🔄 最后更新**: 2025-01-27
**👨‍💻 维护人员**: 开发团队