Zum Hauptinhalt springen

plantpulse-storage (Speicherschicht)

Rolle​

Dies ist die Schicht, die alle Daten von PlantPulse dauerhaft speichert. 4 spezialisierte Engines je nach Datenart werden als einzelnes Modul betrieben. In der Startreihenfolge von pd steht es an erster Stelle — der Türhüter, ohne den kein nachfolgender Dienst überhaupt versucht wird zu starten.

PunktWert
Modulnameplantpulse-storage
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-storage/
Datenspeicherort/data1/pp-data/ (PP_DATA_DIR, Volume pp-data)
Backup-Speicherort/data1/pp-backup/ (PP_BACKUP_DIR, Volume pp-backup)
pd Dienststorage — sowohl MASTER als auch WORKER (RustFS nur auf MASTER)
In der Startreihenfolgevalkey → postgres → cassandra → rustfs

Aufbau​

Verzeichnisstruktur​

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/
│ ├── rustfs/ # bin/ · lib/(rustfs · rc) · logs/
├── graph/janusgraph/ # 그래프 DB — 이미지에 있지만 pd 가 기동하지 않습니다
└── tools/reaper/ # Cassandra Reaper — 이미지에 있지만 pd 가 기동하지 않습니다

Die Dateien unter conf/ sind allesamt generierte Artefakte. Der Ort, an dem Änderungen vorgenommen werden, ist /etc/kopens/conf/*.template auf dem Host → So ändern Sie die Konfiguration

Die einzelnen Engines​

Aster TSDB — Zeitreihe · Ereignisse​

PunktWert
Port9042 (CQL) · 7000/7001 (Inter-Node) · 7099 (JMX)
Keyspacepp (PP_KEYSPACE)
Kontocassandra (PP_CASSANDRA_USER) / PP_CASSANDRA_PASSWORD — PasswordAuthenticator
Konfigurationcassandra.yaml.template · jvm-server.options.template (WORKER nutzt die cluster/-Version)
Advertised Addressbroadcast_rpc_address — wenn 127.0.0.1, verweigert das Rendering

Repräsentative Tabellen: pp.ts_data_points (Datenpunkte der Zeitreihen-Engine, TTL pro Zeile), pp.tm_tag_point · tm_tag_point_archive · tm_tag_point_snapshot (Tag), pp.tm_asset_data (Anlage), pp.tw_* (Aufzeichnung der in die Cold-Tier verschobenen Daten). TTL, Kompressionsstrategie und Größe je Tabelle zeigt 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 # 파괴적 — 스냅샷 삭제
Tuning-PunktVorlageEmpfehlung
Heapjvm-server.options.template1/4 des Host-Speichers, maximal 32GB
compaction_throughputcassandra.yaml.template128 MB/s (NVMe) / 16 MB/s (HDD)
concurrent_compactorscassandra.yaml.templatemin(코어 수, 8)

Aster TSDB Reaper ist im Image tools/reaper/ enthalten, wird aber nicht von pd gestartet — ein manuelles Werkzeug. Regelmäßiges Repair erfolgt über pd node repair.

PostgreSQL — Metadaten​

PunktWert
Port5432
Datenbankpp (PP_DB_NAME) — daneben temporal · temporal_visibility · kestra · hive-metastore-230
Kontoplantpulse / PP_PG_PASSWORD. Auch die Rollen temporal · hive · gravitino · kestra · replica hier
Authentifizierungscram-sha-256 (pg_hba.conf.template)
Konfigurationpostgresql.conf.template · pg_hba.conf.template

Beim ersten Start werden Schema und Rollen ohne Passwort angelegt, und pd gleicht die Rollen-Passwörter mit den Sidecar-Werten ab (bei jedem Start ALTER ROLE — idempotent). Deshalb genügt es bei PostgreSQL-Konten, die von Rotationswerkzeugen wie PP_GRAVITINO_PASSWORD · PP_KESTRA_DB_PASSWORD nicht verwaltet werden, den Sidecar anzupassen und neu zu starten.

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 # 논리 덤프
Tuning-PunktEmpfehlung
shared_buffers25% des Host-Speichers
effective_cache_size50 ~ 75%
max_connections200 (bei großen Umgebungen 500)
max_slot_wal_keep_sizeSetzen Sie eine Obergrenze — verhindert, dass der Slot eines entfernten Workers das WAL unbegrenzt festhält (Image-Standard 8GB)

Valkey — In-Memory-Cache​

PunktWert
Port6379 (Klartext) · 6380 (TLS)
Kontoredis (PP_REDIS_USER) / PP_REDIS_PASSWORD — requirepass
Konfigurationvalkey.conf.template (WORKER nutzt die cluster/-Version — replicaof Master)
Log/data1/pp-data/valkey/logs/system.log — unterhalb des Daten-Volumes
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

RustFS — Objektspeicher​

PunktWert
Port9000 (S3 API — überwacht durch pd) · 9001 (Konsole — vom Menschen geöffnete Oberfläche)
Kontorustfs (PP_S3_USER) / PP_S3_PASSWORD — beim Start über env RUSTFS_ACCESS_KEY·RUSTFS_SECRET_KEY injiziert
Standard-Bucketplantpulse (PP_S3_BUCKET). Iceberg-Daten · Backups · Anhänge
Konsolehttp://<server-ip>:9001/ — Anmeldung mit denselben Werten wie oben

RustFS läuft nur auf dem MASTER-Knoten. Der Client rc (rustfs/cli) ist im Image enthalten, und das Startskript registriert den Alias pp-s3 und legt den Bucket an, falls er nicht existiert.

Integrierter Betrieb​

docker exec plantpulse-datalake pd status storage # 넷의 UP/DOWN
docker exec plantpulse-datalake pd restart storage # 넷 전부 — 의존하는 모든 서비스가 연결을 잃습니다
docker exec plantpulse-datalake pd storage # 볼륨 · WAL · 슬롯 · 스냅샷 · 크기
Ein Neustart von nur storage unterbricht alles Obige

Starten Sie nach Möglichkeit das gesamte Data Lake über restart-datalake.sh auf dem Host neu. Das berücksichtigt auch die abhängigen Anwendungen → Start · Stopp · Neustart

Backup / Wiederherstellung​

EngineWerkzeugMethode
PostgreSQLpgBackRest (physisch) · pg_dump (logisch)full / diff · Point-in-Time-Recovery
Aster TSDBMedusafull / diff Snapshot
RustFSrc mirrorexterne S3-Replikation

Das Verfahren finden Sie unter Backup · Wiederherstellung.

Häufig auftretende Probleme​

SymptomUrsacheMaßnahme
Aster TSDB WriteTimeoutDisk-I/O-Sättigungpd node compactionstats, Durchsatz anpassen
Aster TSDB-Knoten downNetzwerk · Disk · OOMGC-Pause in pd logs storage, Host dmesg
PostgreSQL Too many connectionsConnection-Pool-Leckmax_connections erhöhen + Anwendungs-Pool prüfen
WAL wächst kontinuierlichReplikations-Slot eines entfernten Workerspd storage von slot.orphan → Host ops-check.sh --reclaim
Valkey Speichermangelmaxmemory-policy nicht konfiguriertallkeys-lru oder volatile-lru
RustFS-Disk vollAnsammlung von Iceberg-Daten · BackupsLifecycle-Policy in Konsole 9001
Verzögerte Antwort nach NeustartAster TSDB Warmupnormal (3 ~ 5 Minuten)

Empfohlenes Disk-Layout​

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

Wenn Aster TSDB commitlog und data auf separaten Disks (oder separaten LVs) getrennt werden, steigt der Schreibdurchsatz deutlich.

Verwandte Dokumente​