物理架构设计
文档编号: SYS-DES-ARCH-PHYSICAL-001
版本: 1.0
创建日期: 2026-03-08
作者: 架构师
状态: ✅ 已审核通过
1. 概述
1.1 目的
本文档定义System平台的物理架构设计,明确系统的部署拓扑、服务器规划、网络架构和基础设施配置,为系统部署实施提供指导。
1.2 范围
本文档涵盖:
- 部署环境规划(开发/测试/生产)
- 服务器规划与配置
- 网络架构设计
- 容器化部署方案
- 高可用架构设计
1.3 参考文档
2. 部署环境规划
2.1 环境划分
System平台规划以下部署环境:
| 环境 | 用途 | 网络区域 | 数据保留策略 |
|---|---|---|---|
| 开发环境 (DEV) | 开发调试 | 内网 | 不保留 |
| 测试环境 (TEST) | 功能/集成测试 | 内网 | 定期清理 |
| 预发布环境 (STAGING) | 生产验证 | DMZ | 保留最近3个月 |
| 生产环境 (PROD) | 正式运行 | DMZ | 长期保留 |
2.2 环境资源配置
2.2.1 开发环境 (DEV)
| 资源类型 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 4C8G | 1 | 所有服务单实例部署 |
| 数据库服务器 | 4C8G | 1 | MySQL单实例 |
| 缓存服务器 | 2C4G | 1 | Redis单实例 |
| 存储 | 100GB | 1 | 共享存储 |
2.2.2 测试环境 (TEST)
| 资源类型 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 4C8G | 2 | 核心服务双实例 |
| 数据库服务器 | 4C8G | 2 | MySQL主从 |
| 缓存服务器 | 2C4G | 2 | Redis主从 |
| 存储 | 200GB | 1 | 共享存储 |
2.2.3 生产环境 (PROD)
| 资源类型 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 8C16G | 4 | 服务多实例部署 |
| 数据库服务器 | 8C16G | 3 | MySQL主从+仲裁 |
| 缓存服务器 | 4C8G | 3 | Redis集群 |
| 搜索服务器 | 4C8G | 3 | ES集群 |
| 存储服务器 | 4C8G | 3 | MinIO集群 |
| 消息服务器 | 4C8G | 3 | Kafka集群 |
| 负载均衡 | - | 2 | Nginx主备 |
3. 生产环境部署架构
3.1 总体部署拓扑
互联网
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ DMZ 区域 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 负载均衡层 (Nginx) │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Nginx主 │◄───────►│ Nginx备 │ │ │
│ │ │ (Master) │ VRRP │ (Backup) │ │ │
│ │ └──────┬──────┘ └─────────────┘ │ │
│ └─────────┼───────────────────────────────────────────────────┘ │
└────────────┼────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 应用服务区域 │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Kubernetes集群 │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Node 1 │ │ Node 2 │ │ Node 3 │ │ │
│ │ │ (Master) │ │ (Worker) │ │ (Worker) │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Gateway │ │ • User │ │ • Auth │ │ │
│ │ │ • Web UI │ │ • Org │ │ • Config │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ │ │ │
│ │ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Node 4 │ │ Node 5 │ │ │
│ │ │ (Worker) │ │ (Worker) │ │ │
│ │ │ │ │ │ │ │
│ │ │ • Audit │ │ • Notify │ │ │
│ │ │ • File │ │ • Message │ │ │
│ │ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 数据存储区域 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MySQL │ │ Redis │ │ ES │ │
│ │ 集群 │ │ 集群 │ │ 集群 │ │
│ │ │ │ │ │ │ │
│ │ • Master │ │ • Node 1 │ │ • Master │ │
│ │ • Slave 1 │ │ • Node 2 │ │ • Data 1 │ │
│ │ • Slave 2 │ │ • Node 3 │ │ • Data 2 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ MinIO │ │ Kafka │ │
│ │ 集群 │ │ 集群 │ │
│ │ │ │ │ │
│ │ • Node 1 │ │ • Broker 1 │ │
│ │ • Node 2 │ │ • Broker 2 │ │
│ │ • Node 3 │ │ • Broker 3 │ │
│ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────┘3.2 服务器规划
3.2.1 负载均衡服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| nginx-01 | 192.168.1.10 | 4C8G | Nginx Master + Keepalived |
| nginx-02 | 192.168.1.11 | 4C8G | Nginx Backup + Keepalived |
虚拟IP: 192.168.1.100 (VIP)
3.2.2 K8s Master节点
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| k8s-master-01 | 192.168.2.10 | 8C16G | kube-apiserver, kube-controller, kube-scheduler, etcd |
| k8s-master-02 | 192.168.2.11 | 8C16G | kube-apiserver, kube-controller, kube-scheduler, etcd |
| k8s-master-03 | 192.168.2.12 | 8C16G | kube-apiserver, kube-controller, kube-scheduler, etcd |
3.2.3 K8s Worker节点
| 服务器 | IP地址 | 配置 | 部署服务 |
|---|---|---|---|
| k8s-worker-01 | 192.168.2.20 | 8C16G | Gateway, Web UI, System服务 |
| k8s-worker-02 | 192.168.2.21 | 8C16G | Config服务, Audit服务 |
| k8s-worker-03 | 192.168.2.22 | 8C16G | File服务, Message服务 |
| k8s-worker-04 | 192.168.2.23 | 8C16G | 弹性扩容预留 |
| k8s-worker-05 | 192.168.2.24 | 8C16G | 弹性扩容预留 |
3.2.4 数据库服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| mysql-master | 192.168.3.10 | 8C16G | MySQL Master |
| mysql-slave-01 | 192.168.3.11 | 8C16G | MySQL Slave 1 |
| mysql-slave-02 | 192.168.3.12 | 8C16G | MySQL Slave 2 |
3.2.5 缓存服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| redis-01 | 192.168.3.20 | 4C8G | Redis Master |
| redis-02 | 192.168.3.21 | 4C8G | Redis Master |
| redis-03 | 192.168.3.22 | 4C8G | Redis Master |
3.2.6 搜索服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| es-master | 192.168.3.30 | 4C8G | ES Master |
| es-data-01 | 192.168.3.31 | 4C8G | ES Data |
| es-data-02 | 192.168.3.32 | 4C8G | ES Data |
3.2.7 存储服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| minio-01 | 192.168.3.40 | 4C8G | MinIO Node |
| minio-02 | 192.168.3.41 | 4C8G | MinIO Node |
| minio-03 | 192.168.3.42 | 4C8G | MinIO Node |
3.2.8 消息服务器
| 服务器 | IP地址 | 配置 | 部署组件 |
|---|---|---|---|
| kafka-01 | 192.168.3.50 | 4C8G | Kafka Broker + Zookeeper |
| kafka-02 | 192.168.3.51 | 4C8G | Kafka Broker + Zookeeper |
| kafka-03 | 192.168.3.52 | 4C8G | Kafka Broker + Zookeeper |
4. 网络架构设计
4.1 网络拓扑
┌─────────────────────────────────────────────────────────────────────┐
│ 互联网 │
└─────────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 企业防火墙 (Firewall) │
│ 端口开放: 80, 443, 22(限IP) │
└─────────────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌───────────────────────┐ ┌───────────────────┐ ┌───────────────────┐
│ DMZ区域 │ │ 内网区域 │ │ 管理区域 │
│ 192.168.1.0/24 │ │ 192.168.2.0/24 │ │ 192.168.4.0/24 │
│ │ │ │ │ │
│ ┌───────────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │
│ │ 负载均衡 │ │ │ │ K8s集群 │ │ │ │ 监控平台 │ │
│ │ 192.168.1.x │ │ │ │192.168.2.x│ │ │ │192.168.4.x│ │
│ └───────────────┘ │ │ └───────────┘ │ │ └───────────┘ │
└───────────────────────┘ └───────────────────┘ └───────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ 数据存储区域 │
│ 192.168.3.0/24 │
│ │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
│ │ MySQL │ │ Redis │ │ ES │ │ MinIO │ │
│ │192.168.3.x│ │192.168.3.x│ │192.168.3.x│ │192.168.3.x│ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────┘ │
│ ┌───────────┐ ┌───────────┐ │
│ │ Kafka │ │ Zookeeper │ │
│ │192.168.3.x│ │192.168.3.x│ │
│ └───────────┘ └───────────┘ │
└─────────────────────────────────────────────────────────────────────┘4.2 网络安全策略
| 源区域 | 目标区域 | 端口 | 协议 | 说明 |
|---|---|---|---|---|
| 互联网 | DMZ | 80, 443 | TCP | HTTP/HTTPS访问 |
| DMZ | 内网 | 8080-8090 | TCP | 服务调用 |
| 内网 | 数据存储 | 3306 | TCP | MySQL访问 |
| 内网 | 数据存储 | 6379 | TCP | Redis访问 |
| 内网 | 数据存储 | 9200 | TCP | ES访问 |
| 内网 | 数据存储 | 9000 | TCP | MinIO访问 |
| 内网 | 数据存储 | 9092 | TCP | Kafka访问 |
| 管理区域 | 所有区域 | 22, 9100 | TCP | SSH和监控 |
4.3 域名规划
| 环境 | 域名 | 说明 |
|---|---|---|
| 生产 | https://system.linsir.com | 主域名 |
| 生产 | https://api.system.linsir.com | API域名 |
| 测试 | https://test-system.linsir.com | 测试环境 |
| 开发 | https://dev-system.linsir.com | 开发环境 |
5. 容器化部署方案
5.1 Kubernetes架构
┌─────────────────────────────────────────────────────────────────────┐
│ Kubernetes集群架构 │
├─────────────────────────────────────────────────────────────────────┤
│ 控制平面 (Control Plane) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Master │ │ Master │ │ Master │ │
│ │ 01 │ │ 02 │ │ 03 │ │
│ │ │ │ │ │ │ │
│ │• API Server │ │• API Server │ │• API Server │ │
│ │• Controller │ │• Controller │ │• Controller │ │
│ │• Scheduler │ │• Scheduler │ │• Scheduler │ │
│ │• etcd │ │• etcd │ │• etcd │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
├─────────────────────────────────────────────────────────────────────┤
│ 工作节点 (Worker Nodes) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Worker │ │ Worker │ │ Worker │ │ Worker │ │
│ │ 01 │ │ 02 │ │ 03 │ │ 04 │ │
│ │ │ │ │ │ │ │ │ │
│ │• kubelet │ │• kubelet │ │• kubelet │ │• kubelet │ │
│ │• kube-proxy│ │• kube-proxy│ │• kube-proxy│ │• kube-proxy│ │
│ │• Containerd│ │• Containerd│ │• Containerd│ │• Containerd│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────────────┘5.2 命名空间规划
| 命名空间 | 用途 | 部署组件 |
|---|---|---|
| kube-system | K8s系统组件 | CoreDNS, kube-proxy等 |
| ingress-nginx | 入口控制器 | Nginx Ingress Controller |
| monitoring | 监控组件 | Prometheus, Grafana |
| logging | 日志组件 | ELK Stack |
| system-platform | 业务应用 | System平台所有服务 |
5.3 服务部署配置
5.3.1 Gateway服务
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: system-gateway
namespace: system-platform
spec:
replicas: 2
selector:
matchLabels:
app: system-gateway
template:
metadata:
labels:
app: system-gateway
spec:
containers:
- name: gateway
image: registry.linsir.com/system/gateway:1.0.0
ports:
- containerPort: 8080
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
---
apiVersion: v1
kind: Service
metadata:
name: system-gateway
namespace: system-platform
spec:
selector:
app: system-gateway
ports:
- port: 8080
targetPort: 8080
type: ClusterIP5.3.2 System服务
yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: system-service
namespace: system-platform
spec:
replicas: 2
selector:
matchLabels:
app: system-service
template:
metadata:
labels:
app: system-service
spec:
containers:
- name: system-service
image: registry.linsir.com/system/system-service:1.0.0
ports:
- containerPort: 8081
resources:
requests:
memory: "2Gi"
cpu: "1000m"
limits:
memory: "4Gi"
cpu: "2000m"
env:
- name: SPRING_PROFILES_ACTIVE
value: "prod"
- name: MYSQL_HOST
value: "mysql-master"
- name: REDIS_HOST
value: "redis-cluster"5.4 配置管理
5.4.1 ConfigMap
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: system-config
namespace: system-platform
data:
application.yml: |
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://mysql-master:3306/system_db
username: ${DB_USERNAME}
password: ${DB_PASSWORD}
redis:
cluster:
nodes: redis-01:6379,redis-02:6379,redis-03:63795.4.2 Secret
yaml
apiVersion: v1
kind: Secret
metadata:
name: system-secrets
namespace: system-platform
type: Opaque
data:
DB_USERNAME: c3lzdGVtX3VzZXI= # system_user (base64)
DB_PASSWORD: c3lzdGVtX3Bhc3N3b3Jk # system_password (base64)
JWT_SECRET: eW91ci1qd3Qtc2VjcmV0LWtleQ== # your-jwt-secret-key (base64)6. 高可用架构设计
6.1 负载均衡高可用
┌─────────────────────────────────────────────────────────────┐
│ 负载均衡高可用架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Nginx主 │◄──────Keepalived──►│ Nginx备 │ │
│ │ 192.168. │ (VRRP协议) │ 192.168. │ │
│ │ 1.10 │ │ 1.11 │ │
│ │ (Master) │ │ (Backup) │ │
│ └──────┬──────┘ └─────────────┘ │
│ │ │
│ │ VIP: 192.168.1.100 │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ K8s集群 (多Worker节点) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘故障切换:
- Keepalived检测Nginx主节点状态
- 主节点故障时,VIP自动漂移到备节点
- 切换时间 < 3秒
6.2 应用服务高可用
| 高可用策略 | 实现方式 | 说明 |
|---|---|---|
| 多实例部署 | K8s Deployment多副本 | 至少2个实例 |
| 健康检查 | Liveness/Readiness Probe | 自动重启异常实例 |
| 自动扩缩容 | HPA (Horizontal Pod Autoscaler) | CPU>70%自动扩容 |
| 优雅停机 | PreStop Hook | 保证请求处理完成 |
6.3 数据库高可用
6.3.1 MySQL高可用
┌─────────────────────────────────────────────────────────────┐
│ MySQL高可用架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Master │◄───────►│ Slave 1 │ │
│ │ (写操作) │ 同步复制 │ (读操作) │ │
│ │ │ │ │ │
│ │ 192.168. │ │ 192.168. │ │
│ │ 3.10 │ │ 3.11 │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ │ ┌─────────────┐ │ │
│ └───►│ Slave 2 │◄────┘ │
│ │ (读操作/备) │ │
│ │ 192.168. │ │
│ │ 3.12 │ │
│ └─────────────┘ │
│ │
│ 故障切换: MHA (Master High Availability) │
│ 自动选举新Master,切换时间 < 30秒 │
└─────────────────────────────────────────────────────────────┘6.3.2 Redis高可用
┌─────────────────────────────────────────────────────────────┐
│ Redis集群架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Node 1 │◄───────►│ Node 2 │ │
│ │ (Master) │ Gossip │ (Master) │ │
│ │ 192.168. │ 协议 │ 192.168. │ │
│ │ 3.20 │ │ 3.21 │ │
│ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │
│ │ ┌─────────────┐ │ │
│ └───►│ Node 3 │◄────┘ │
│ │ (Master) │ │
│ │ 192.168. │ │
│ │ 3.22 │ │
│ └─────────────┘ │
│ │
│ 分片: 16384 slots均匀分布到3个节点 │
│ 故障转移: 自动选举,切换时间 < 10秒 │
└─────────────────────────────────────────────────────────────┘6.4 存储高可用
| 存储类型 | 高可用方案 | 数据保护 |
|---|---|---|
| MySQL | 主从复制 + MHA | 每日全量备份 + Binlog增量 |
| Redis | Cluster模式 | AOF持久化 + RDB快照 |
| ES | 多节点 + 副本分片 | 快照备份 |
| MinIO | 分布式纠删码 | 多副本冗余 |
7. 监控与运维
7.1 监控架构
┌─────────────────────────────────────────────────────────────┐
│ 监控体系架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Prometheus │◄───│ Grafana │ │ Alertmanager│ │
│ │ (指标采集) │ │ (可视化) │ │ (告警通知) │ │
│ └──────┬──────┘ └─────────────┘ └──────┬──────┘ │
│ │ │ │
│ │ 拉取指标 │ 告警通知 │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 被监控目标 │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ K8s节点 │ │ 应用Pod │ │ 数据库 │ │ 中间件 │ │ │
│ │ │(Node │ │(App │ │(MySQL │ │(Redis │ │ │
│ │ │Exporter)│ │Metrics) │ │Exporter)│ │Exporter)│ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘7.2 日志架构
┌─────────────────────────────────────────────────────────────┐
│ 日志收集架构 │
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Filebeat │───►│ Kafka │───►│ Logstash │ │
│ │ (日志收集) │ │ (消息缓冲) │ │ (日志处理) │ │
│ └─────────────┘ └─────────────┘ └──────┬──────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Elasticsearch │ │
│ │ (日志存储/检索) │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Kibana │ │
│ │ (日志可视化) │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘7.3 运维工具
| 工具 | 用途 | 部署方式 |
|---|---|---|
| Prometheus | 指标监控 | K8s Deployment |
| Grafana | 监控可视化 | K8s Deployment |
| ELK Stack | 日志管理 | K8s Deployment |
| Jenkins | CI/CD | 独立服务器 |
| Harbor | 镜像仓库 | 独立服务器 |
| JumpServer | 运维跳板机 | 独立服务器 |
8. 容量规划
8.1 初期容量(1-1000用户)
| 资源 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 8C16G | 3 | 支撑1000并发 |
| 数据库 | 8C16G | 2 | 主从架构 |
| 存储 | 500GB | - | 数据+日志 |
8.2 中期容量(1000-5000用户)
| 资源 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 8C16G | 5 | 水平扩容 |
| 数据库 | 16C32G | 2 | 升级配置 |
| 存储 | 2TB | - | 扩容存储 |
8.3 长期容量(5000+用户)
| 资源 | 配置 | 数量 | 说明 |
|---|---|---|---|
| 应用服务器 | 16C32G | 8+ | 大规模集群 |
| 数据库 | 分库分表 | - | 数据库拆分 |
| 存储 | 分布式存储 | - | 对象存储 |
9. 相关文档
10. 修订记录
| 版本 | 日期 | 作者 | 变更内容 |
|---|---|---|---|
| 1.0 | 2026-03-08 | 架构师 | 初始版本,定义物理部署架构 |
