跳到主要内容

plantpulse-storage (存储层)

角色

PlantPulse 的所有数据永久存储层。根据数据类型集成 4 个专用引擎到单一模块中运行。pd 启动顺序中首位,未启动则后续所有服务都不会尝试启动的守门人。

项目
模块名plantpulse-storage
安装路径/opt/kopens/plantpulse-platform/plantpulse-storage/
数据位置/data1/pp-data/ (PP_DATA_DIR,卷 pp-data)
备份位置/data1/pp-backup/ (PP_BACKUP_DIR,卷 pp-backup)
pd 服务storage — MASTER · WORKER 均可 (MinIO 仅 MASTER)
启动顺序中valkey → postgres → cassandra → minio

架构

目录结构

plantpulse-storage/
├── cache/valkey/ # conf/valkey.conf (생성물) · 로그는 /data1/pp-data/valkey/logs
├── db/
│ ├── cassandra/ # bin/ (cqlsh · nodetool) · conf/cassandra.yaml · jvm-server.options (생성물) · logs/
│ └── postgres/ # bin/ (psql · pg_ctl) · conf/postgresql.conf · pg_hba.conf (생성물) · logs/
├── object/
│ ├── minio/ # bin/ · logs/
│ ├── rustfs/ weedfs/ # 대안 오브젝트 스토어 — 이미지에 있지만 pd 가 기동하지 않습니다
├── graph/janusgraph/ # 그래프 DB — 이미지에 있지만 pd 가 기동하지 않습니다
└── tools/reaper/ # Cassandra Reaper — 이미지에 있지만 pd 가 기동하지 않습니다

conf/ 下的所有文件都是生成产物。修改位置在主机的 /etc/kopens/conf/*.template如何修改配置

各引擎详解

Cassandra — 时序 · 事件

项目
端口9042 (CQL) · 7000/7001 (节点间) · 7099 (JMX)
键空间pp (PP_KEYSPACE)
账户cassandra (PP_CASSANDRA_USER) / PP_CASSANDRA_PASSWORDPasswordAuthenticator
配置cassandra.yaml.template · jvm-server.options.template (WORKER 使用 cluster/ 版本)
广告地址broadcast_rpc_address127.0.0.1 时渲染会被拒绝

主要表:pp.ts_data_points(时序引擎数据点,每行带 TTL)、pp.tm_tag_point · tm_tag_point_archive · tm_tag_point_snapshot(标签)、pp.tm_asset_data(资产)、pp.tw_*(冷存档转移记录)。表的 TTL · 压缩策略 · 大小由 pd retention 显示。

docker exec plantpulse-datalake pd node status # 링 상태 — UN 이 정상
docker exec plantpulse-datalake pd node cql # cqlsh
docker exec plantpulse-datalake pd node errors # 최근 WARN/ERROR
docker exec plantpulse-datalake pd node compactionstats
docker exec plantpulse-datalake pd node repair # 무겁습니다
docker exec plantpulse-datalake pd node cleanup # 파괴적 — 스냅샷 삭제
调优点模板建议
jvm-server.options.template主机内存的 1/4,最大 32GB
compaction_throughputcassandra.yaml.template128 MB/s (NVMe) / 16 MB/s (HDD)
concurrent_compactorscassandra.yaml.templatemin(코어 수, 8)

Cassandra Reaper 已包含在镜像 tools/reaper/ 中,但 pd 不启动它,是手动工具。定期修复通过 pd node repair 进行。

PostgreSQL — 元数据

项目
端口5432
数据库pp (PP_DB_NAME) — 另外还有 temporal · temporal_visibility · kestra · hive-metastore-230
账户plantpulse / PP_PG_PASSWORD。角色 temporal · hive · gravitino · kestra · replica 也在此
认证scram-sha-256 (pg_hba.conf.template)
配置postgresql.conf.template · pg_hba.conf.template

首次启动时无密码创建模式和角色,pd 作为 sidecar 以其值同步角色密码(每次启动都 ALTER ROLE — 幂等)。因此不受旋转工具处理的 PostgreSQL 账户(如 PP_GRAVITINO_PASSWORD · PP_KESTRA_DB_PASSWORD),修改 sidecar 后重启即可。

docker exec -it plantpulse-datalake pd node psql # postgres OS 사용자로 psql
docker exec plantpulse-datalake pd storage # WAL · 복제 슬롯 · max_slot_wal_keep_size
docker exec plantpulse-datalake pd backup # 논리 덤프
调优点建议
shared_buffers主机内存的 25%
effective_cache_size50 ~ 75%
max_connections200 (大规模 500)
max_slot_wal_keep_size设置上限 — 防止已移除工作进程的槽位无限占用 WAL(镜像默认 8GB)

Valkey — 内存缓存

项目
端口6379 (明文) · 6380 (TLS)
账户redis (PP_REDIS_USER) / PP_REDIS_PASSWORDrequirepass
配置valkey.conf.template (WORKER 使用 cluster/ 版本 — replicaof master)
日志/data1/pp-data/valkey/logs/system.log — 在数据卷下
docker exec -it plantpulse-datalake bash -c '"$PP_HOME/tools/valkey/bin/valkey-cli" -h 127.0.0.1 -a "$PP_REDIS_PASSWORD"'
> INFO memory
> CONFIG GET maxmemory

MinIO — 对象存储

项目
端口9000 (S3 API — pd 监听) · 9001 (控制台 — 用户界面)
账户minio (PP_MINIO_USER) / PP_MINIO_PASSWORD — 通过启动 env MINIO_ROOT_* 注入
默认桶plantpulse (PP_MINIO_BUCKET)。Iceberg 数据 · 备份 · 附件
控制台http://<server-ip>:9001/ — 登录使用上述账户的相同凭证

MinIO 仅在 MASTER 节点上运行。mc 客户端已在镜像中,启动脚本注册 pp-minio 别名。

统一运维

docker exec plantpulse-datalake pd status storage # 넷의 UP/DOWN
docker exec plantpulse-datalake pd restart storage # 넷 전부 — 의존하는 모든 서비스가 연결을 잃습니다
docker exec plantpulse-datalake pd storage # 볼륨 · WAL · 슬롯 · 스냅샷 · 크기
仅重启 storage 会导致上述所有服务中断

尽可能通过主机的 restart-datalake.sh 重启整个数据湖。会自动判断依赖应用 → 启动 · 停止 · 重启

备份 / 恢复

引擎工具方式
PostgreSQLpgBackRest (物理) · pg_dump (逻辑)完全 / 增量 · 时点恢复
CassandraMedusa完全 / 增量快照
MinIOmc mirror外部 S3 复制

详见 备份 · 恢复

常见问题

症状原因处理
Cassandra WriteTimeout磁盘 I/O 饱和pd node compactionstats,调整 throughput
Cassandra 节点宕机网络 · 磁盘 · OOMpd logs storage 的 GC 暂停,检查主机 dmesg
PostgreSQL Too many connections连接池泄漏提高 max_connections + 检查应用连接池
WAL 持续增长已移除工作进程的复制槽pd storageslot.orphan → 主机 ops-check.sh --reclaim
Valkey 内存不足maxmemory-policy 未设置调整 allkeys-lruvolatile-lru
MinIO 磁盘满Iceberg · 备份累积在控制台 9001 配置生命周期策略
重启后响应延迟Cassandra 预热正常 (3 ~ 5 分钟)

磁盘布局建议

/data1/
├── pp-data/ # 데이터 볼륨 (NVMe SSD)
│ ├── cassandra/ # SSTable · commitlog · saved_caches
│ ├── postgres/ # data · dump
│ ├── minio/
│ ├── valkey/
│ └── kafka/
├── pp-temp/
└── pp-backup/ # pgbackrest · medusa

将 Cassandra commitlog 和 data 分离到不同磁盘(或不同 LV)会显著提升写入吞吐。

相关文档