系统要求
本指南旨在提供稳定运行 PlantPulse Platform 所需的硬件 / OS / 网络要求。所有规格均基于经过验证的标准环境编写。
需求概览
| 类别 | 最低 (开发 / 测试) | 标准 (运行) | 大规模 |
|---|---|---|---|
| CPU | 16 vCPU | 32 vCPU | 48+ vCPU |
| 内存 | 128 GB | 128 GB | 256 GB+ |
| OS 磁盘 | 200 GB | 256 GB | 512 GB |
| 数据磁盘 | 1 TB (SSD) | 1 TB (NVMe SSD) | 4 TB+ (NVMe SSD) |
| 网络 | 1 Gbps | 1 Gbps | 10 Gbps |
| OS | RHEL · Rocky · Oracle Linux 8.x 及以上 | 9.x 或 10.x | 相同 |
| JDK | OpenJDK 21 LTS | OpenJDK 21 LTS | OpenJDK 21 LTS |
数据湖 Master 容器(plantpulse-datalake)需要 96 GB 以上 的内存上限。96 GB 是最小值而非余裕空间,64 GB 规格不支持。
- 为何需要 96 GB — 仅不可停止的常驻服务(Aster TSDB Heap 16 GB + direct 6 GB, CEP, HiveMQ, Valkey, PostgreSQL, TSE, Kafka 等)的声明上限之和就约为 67 GB。在验证环境中,该容器于 2026-10-29 达到了 96 GB 上限,导致 Kafka 因内存分配失败(ENOMEM)而崩溃。
- 宿主机内存必须更大 — 安装脚本会将数据湖上限设置为宿主机 RAM 的 90%。因此,若宿主机 RAM 低于 107 GB,则无法提供 96 GB 内存,该宿主机将不符合规格。64 GB 规格的上限将被截断至 57.6 GB,无法部署数据湖。
- 加上应用容器份额 — 同一宿主机上运行的基础应用容器上限之和为 32 GB(server-web 14 · batch 4 · warehouse 4 · OPC UA 3 · AASX 3 · HA 2 · 前线 1 · proxy 1)。Master 96 GB + 应用基础上限 32 GB = 128 GB,这与 128 GB 最低要求 相符。若开启 mirror-maker (+2 GB) 或调高应用上限,则需要更多内存。上限是天花板而非实际用量。运行环境下建议配置 256 GB。
安装后,可通过数据湖 CLI 的 pd doctor 判断实际上限是否充足(在 [9] memory budget 节中将 docker inspect 的 HostConfig.Memory 值传递至 --memory-limit)。
验证环境:运行验证环境(reference dev server)配置为 48 vCPU / 188 GB RAM / 4.8 TB NVMe SSD / RHEL 9 / Temurin OpenJDK 21.0.11 LTS。
硬件
CPU
- 建议:32 vCPU 以上 (Intel Xeon, AMD EPYC, ARM Graviton 等)
- IIoT 引擎使用 36 线程流水线 (
engine.pipeline.threads) - Spark 分布式分析额外使用
PP_CLUSTER_CORES - 核心数越多,并发消息处理量 ↑
内存
- 基础 128 GB 以上 · 运行建议 256 GB
- 数据湖 Master 容器 96 GB 以上 — 宿主机 RAM 低于 107 GB 则不符合规格,64 GB 不支持(参考上述警告)
- 内存通过页缓存直接影响 Aster TSDB / Kafka 性能
- Aster TSDB Heap: 16 GB 固定 + direct 内存 6 GB
- 数据湖容器内存限制:
DOCKER_DATALAKE_MEMORY— 默认为96G,且不超过宿主机 RAM 的 90%
磁盘
建议 OS / 数据磁盘分离:将 OS 磁盘 (
/) 与数据磁盘 (/data1) 分离,以便于备份 / 扩展 / 故障隔离。
/ # OS 디스크 (256 GB)
└── opt/kopens/ # PlantPulse 설치 트리
/data1/ # 데이터 디스크 (1 TB+ NVMe SSD)
├── pp-data/ # Aster TSDB · PostgreSQL · RustFS · Valkey
├── pp-temp/ # Spark / 처리 임시
└── pp-backup/ # 백업 산출물
| 挂载点 | 容量 | 磁盘类型 | 用途 |
|---|---|---|---|
/ | 256 GB | SSD | OS, 安装树 |
/data1 | 1 TB+ | 必须 NVMe SSD | 主数据 |
/data2 ~ /dataN | 1 TB+ | NVMe SSD | (可选) Aster TSDB 数据 / commitlog 分离 |
Aster TSDB 磁盘优化 (高级)
在大规模环境下,将 commitlog 与 data 放置在不同磁盘可显著提升写入吞吐量。
/data1/pp-data/cassandra/data/ # SSTable (대용량 NVMe)
/data2/pp-data/cassandra/commitlog/ # commitlog (별도 NVMe, sync I/O)
操作系统
支持的 OS
RHEL · Rocky Linux · Oracle Linux 8.x · 9.x · 10.x — 这三个发行版视为同一类(RPM 系 · 相同软件包名 · 相同防火墙工具)。
| OS | 版本 |
|---|---|
| RHEL · Rocky Linux · Oracle Linux | 8.x · 9.x · 10.x |
| AlmaLinux | 8.x · 9.x |
| Ubuntu | 20.04 及以上 |
| Amazon Linux | 2 · 2023 |
后续所有指南均基于 RHEL · Rocky Linux · Oracle Linux 8.x · 9.x · 10.x。若使用 Ubuntu / Amazon Linux,请仅将软件包命令(
apt/dnf)替换为对应的环境命令。
Java (JDK)
PlantPulse 基于 Java 21 LTS。setup.sh / tools/java/ 将自动安装。
$ java -version
openjdk version "21.0.11" 2026-04-21 LTS
OpenJDK Runtime Environment Temurin-21.0.11+10 (build 21.0.11+10-LTS)
如需手动安装:
# RHEL/Rocky/Oracle
dnf install -y java-21-openjdk java-21-openjdk-devel
# Ubuntu
apt-get install -y openjdk-21-jdk
JAVA_HOME 环境变量将自动注册,所有模块统一应用至 JAVA_TOOL_OPTIONS="-Duser.language=${PP_LANG} -Duser.timezone=${PP_TZ}"。
网络 / 主机名
主机名
hostnamectl set-hostname plantpulse-prod-01
# /etc/hosts
vi /etc/hosts
# 첫 행 직후에 추가:
# 192.168.0.41 plantpulse-prod-01 plantpulse-prod-01.local
固定 IP
若服务器 IP 变更,集群 / 客户端连接将中断,因此必须使用固定 IP。
# NetworkManager (RHEL 9+)
nmcli con mod ens33 ipv4.method manual \
ipv4.addresses 192.168.0.41/24 \
ipv4.gateway 192.168.0.1 \
ipv4.dns "168.126.0.1 8.8.8.8"
nmcli con up ens33
时间同步 (必须)
分布式组件 (Aster TSDB, Kafka 等) 对节点间的时间精度极其敏感。
dnf install -y chrony
systemctl enable --now chronyd
chronyc tracking # 동기화 상태 확인
chronyc -a makestep # 즉시 동기화
OS 调优 (必须)
以下数值为 install.sh (One-line / Docker 安装) 自动应用的数值。仅在手动环境下请自行进行相同配置。
文件描述符 / 进程限制
# /etc/security/limits.conf
* - memlock unlimited
* - nofile 1048576
* - nproc 32768
* - as unlimited
内核参数
# /etc/sysctl.conf (install.sh 자동 적용)
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 10
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.somaxconn = 1024
vm.max_map_count = 1048576
vm.overcommit_memory = 0
fs.file-max = 1048576
sysctl -p /etc/sysctl.conf
禁用 Swap
数据库 / Java 进程应避免使用 swap。
swapoff --all
# /etc/fstab 의 swap 라인 주석 처리
sed -i '/swap/s/^/#/' /etc/fstab
SELinux
setup.sh 会自动将其转换为 permissive。手动更改:
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
Native 库
用于提升 Aster TSDB 性能的库。
dnf install -y jna jemalloc jemalloc-devel zstd libpq
磁盘 I/O 调优
NVMe SSD
# /etc/udev/rules.d/60-ioscheduler.rules
ACTION=="add|change", KERNEL=="nvme[0-9]*", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="sd*", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# 즉시 적용
udevadm trigger
HDD (不建议运行)
echo mq-deadline > /sys/block/sdb/queue/scheduler
blockdev --setra 128 /dev/sdb
防火墙
install.sh 会 激活 firewalld (systemctl enable --now firewalld) 并自动开放 Platform 所需端口。仅在通过外部(公司防火墙 / 云安全组)管理防火墙时,才使用 SKIP_FW=1 跳过此步骤。
手动环境下直接开放示例:
systemctl enable --now firewalld
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=4950/tcp
firewall-cmd --permanent --add-port=1883/tcp
firewall-cmd --permanent --add-port=1884/tcp
firewall-cmd --permanent --add-port=9092/tcp
firewall-cmd --permanent --add-port=9094/tcp
firewall-cmd --reload
完整端口列表请参考 端口配置信息。
上级防火墙 / 云安全组:公司 / 云防火墙为独立配置,请同步允许。对于私网网段 (RFC 1918, Tailscale CGN),建议将源限制为可信 IP。
外部访问 / 暴露建议
| 外部暴露 | 端口 | 建议 |
|---|---|---|
| Web 控制台 | 80, 443 | 建议经由 nginx/HAProxy |
| 健康检查 | 4950 | 仅限监控系统 (HTTPS) |
| MQTT (外部设备) | 1884 (TLS), 18884 | 建议 TLS |
| Kafka 外部客户端 | 9094 (TLS) | 必须 TLS |
| 数据网关 | 5500 | API Key + TLS |
DB / 消息 PLAINTEXT 端口 / JMX 请限制为 仅限私网。
支持的浏览器
Web 控制台支持最新的标准浏览器。
| 浏览器 | 最低版本 | 建议 |
|---|---|---|
| Google Chrome | 100+ | 建议 |
| Microsoft Edge | 100+ | ✓ |
| Firefox | 100+ | ✓ |
| Safari | 15+ | ✓ |
安装前巡检清单
安装前请确认以下各项:
- CPU 16+ vCPU, 内存 128+ GB(需能为数据湖 Master 提供 96 GB — 64 GB 为不支持规格), 数据磁盘 200+ GB
- 数据磁盘挂载至独立的
/data1 - OS 为 RHEL/Rocky/Oracle 8+ 或 Ubuntu 20.04+
- 已设置固定 IP
-
chronyd已激活 (时间同步) - 主机名 +
/etc/hosts已注册 - 已禁用 swap
- 已应用 limits (如
nofile 1048576) - 已应用 sysctl (如
vm.max_map_count) - 防火墙策略 (外部暴露端口明确)
- DNS 正常工作 (
getent hosts <hostname>) - 具备互联网访问或已准备隔离网络 Bundle
下一步
- 快速安装 → One-line 安装 (建议)
- 基于容器安装 → Docker 安装
- 确认端口冲突 → 端口配置信息