一、方案概述
本方案旨在提供一套最小成本实现高可用(High Availability, HA)的本地机房部署架构,适用于中小规模充电运营平台。
通过双节点 + VIP漂移 + 主从复制的设计,实现以下目标:
- 核心服务无单点故障(Nginx / MySQL / Redis)
- 服务故障自动切换(秒级)
- 数据安全(主从复制)
- 架构简洁,部署成本低
- 支持横向扩展(微服务架构)
架构核心思想
- 入口高可用:Nginx + Keepalived(VIP漂移)
- 数据高可用:MySQL主从 + Redis主从
- 服务高可用:微服务双节点部署
- 控制面稳定:Nacos + XXL-JOB 双节点
- 存储与消息解耦:Minio + RabbitMQ
二、基础环境说明
2.1 网络环境与IP规划
| 类型 | IP |
|---|---|
| 外网IP | 101.10.172.118(示例) |
| 服务器1(主) | 192.168.1.6 |
| 服务器2(备) | 192.168.1.7 |
| NGINX-VIP | 192.168.1.100 |
| MYSQL-VIP | 192.168.1.101 |
| REDIS-VIP | 192.168.1.102 |
说明:
VIP(虚拟IP)由 Keepalived 管理,实现主备切换时业务无感知。
2.2 端口规划
公网开放端口(业务入口)
| 端口 | 说明 |
|---|---|
| 443 | HTTPS 接入 |
| 20511 | 云快充 1.5/1.6/1.7 |
| 20512 | 云快充 2.1 |
| 20515-20519 | OCPP / WSS 等扩展协议 |
内部或受限端口
| 端口 | 服务 |
|---|---|
| 18081 | XXL-JOB |
| 15672 | RabbitMQ |
| 8848 | Nacos |
| 3306 | MySQL |
| 6379 | Redis |
| 9091 | Minio |
| 22 | SSH(建议修改) |
2.3 部署组件清单
| 分类 | 组件 |
|---|---|
| 高可用组件 | Keepalived + VIP |
| 数据层 | MySQL 主从 |
| 缓存层 | Redis 主从 |
| 注册中心 | Nacos(单机) |
| 消息队列 | RabbitMQ(单机) |
| 对象存储 | Minio(单机) |
| 网关层 | Nginx 双节点 |
| 调度系统 | XXL-JOB 双节点 |
| 业务层 | ruoyi-* / omind-* 微服务 |
2.4 部署方式
采用 Docker 容器化部署:
服务器1(主节点)
- MySQL 主
- Redis 主
- Nginx 主
- Keepalived
- Nacos
- XXL-JOB 节点1
- 全量微服务
服务器2(备节点)
- MySQL 从
- Redis 从
- Nginx 备
- Keepalived
- RabbitMQ
- Minio
- XXL-JOB 节点2
- 全量微服务
2.5 服务器配置建议
| 项目 | 配置 |
|---|---|
| 数量 | 2 台 |
| CPU | 16 核 |
| 内存 | 32GB / 64GB |
| 硬盘 | 1TB SSD |
| 网络 | 千兆内网 |
| 系统 | Ubuntu 24.04 |
三、高可用架构设计说明
3.1 Keepalived + VIP 机制
通过 Keepalived 实现 VIP 漂移:
- 主节点正常 → 持有 VIP
- 主节点故障 → VIP 漂移到备节点
- 客户端无感知切换
监控维度:
- Nginx 进程
- MySQL 可用性
- Redis 可用性
3.2 MySQL 高可用
- 架构:一主一从
- 同步方式:Binlog 复制
- VIP:192.168.1.101
特点:
- 主库写,从库读(可扩展读写分离)
- 主库故障 → VIP切换 + 手动/自动提升从库
3.3 Redis 高可用
- 架构:主从复制
- 从节点通过
--slaveof自动同步 - VIP 提供统一访问入口
3.4 Nginx 高可用
- 双节点部署
- VIP 对外提供统一入口
- 支持:
- 四层 TCP 转发(充电协议)
- 七层 HTTP 转发(平台业务)
3.5 微服务高可用
- 所有服务双节点部署
- 注册到 Nacos
- 通过网关统一调度
优势:
- 单节点故障不影响整体服务
- 支持动态扩容
3.6 消息与存储
| 服务 | 部署方式 | 说明 |
|---|---|---|
| RabbitMQ | 单机(在备节点) | 削峰填谷 |
| Minio | 单机(在备节点) | 文件存储 |
最小化方案中为单点,可按需升级为集群
四、部署步骤说明
4.1 Docker 环境准备
安装 Docker
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=$(dpkg --print-architecture)] http://mirrors.cloud.aliyuncs.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
启动 Docker
sudo systemctl start docker
sudo systemctl enable docker
五、核心部署说明
5.1 服务器1(主节点)
部署内容
- MySQL 主
- Redis 主
- Nginx 主
- Keepalived
- Nacos
- XXL-JOB
- 微服务全集群
(具体 docker-compose 已提供,可直接使用)
5.2 服务器2(备节点)
部署内容
- MySQL 从
- Redis 从
- Nginx 备
- Keepalived
- RabbitMQ
- Minio
- XXL-JOB
- 微服务全集群
六、关键配置说明
6.1 MySQL 主从配置
主库:
CREATE USER 'mysql_slave'@'%';
ALTER USER 'mysql_slave'@'%' IDENTIFIED BY 'omind2023';
GRANT REPLICATION SLAVE ON *.* TO 'mysql_slave'@'%';
FLUSH PRIVILEGES;
从库:
CHANGE MASTER TO MASTER_HOST='192.168.1.6', ...;
START SLAVE;
6.2 Keepalived 健康检查
- Nginx:进程检测
- MySQL:SQL检测
- Redis:PING检测
实现故障自动切换。
6.3 Redis 主从
从节点启动参数:
redis-server --slaveof 192.168.1.6 6379
七、方案特点总结
优点
- 成本低(仅2台服务器)
- 架构简单,易维护
- 核心组件高可用
- 支持平滑扩展
局限性
- RabbitMQ / Minio 为单点
- MySQL 未实现自动选主(需人工或引入 MHA)
- 不适用于超大规模场景
八、扩展建议(生产增强)
如需进一步提升可靠性,可演进为:
- MySQL → MGR / InnoDB Cluster
- Redis → Sentinel / Cluster
- RabbitMQ → 集群模式
- Minio → 分布式模式
- Nacos → 集群模式
- 引入 Kubernetes(K8s)
九、总结
本方案在最小资源投入下实现了关键链路高可用,适用于:
- 中小型充电运营平台
- 私有化部署客户
- 初期业务快速上线
核心价值在于:
用最少的机器,实现"不中断服务"的能力