Zum Hauptinhalt springen

plantpulse-storage (Speicherebene)

Aufgabe

Speicherebene für die dauerhafte Speicherung aller Daten in PlantPulse. 4 spezialisierte Engines für verschiedene Datentypen werden als einzelnes Modul zusammengefasst. Sie ist die erste in der Startsequenz von pd und fungiert als Gatekeeper – wenn sie nicht startet, werden alle nachfolgenden Dienste nicht gestartet.

ElementWert
Modulnameplantpulse-storage
Installationspfad/opt/kopens/plantpulse-platform/plantpulse-storage/
Datenspeicher/data1/pp-data/ (PP_DATA_DIR, Volume pp-data)
Sicherungspfad/data1/pp-backup/ (PP_BACKUP_DIR, Volume pp-backup)
pd Servicestorage — sowohl MASTER als auch WORKER (MinIO nur auf MASTER)
In der Startsequenzvalkey → postgres → cassandra → minio

Architektur

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/
│ ├── minio/ # bin/ · logs/
│ ├── rustfs/ weedfs/ # 대안 오브젝트 스토어 — 이미지에 있지만 pd 가 기동하지 않습니다
├── graph/janusgraph/ # 그래프 DB — 이미지에 있지만 pd 가 기동하지 않습니다
└── tools/reaper/ # Cassandra Reaper — 이미지에 있지만 pd 가 기동하지 않습니다

conf/ Alle Dateien darunter sind generiert. Die einzige Stelle zum Bearbeiten ist /etc/kopens/conf/*.template auf dem Host → Konfiguration ändern

Jede Engine

Cassandra – Zeitreihen · Ereignisse

ElementWert
Port9042 (CQL) · 7000/7001 (zwischen Knoten) · 7099 (JMX)
Keyspacepp (PP_KEYSPACE)
Kontocassandra (PP_CASSANDRA_USER) / PP_CASSANDRA_PASSWORDPasswordAuthenticator
Konfigurationcassandra.yaml.template · jvm-server.options.template (WORKER nutzt cluster/ Variante)
Advertised Addressbroadcast_rpc_address — wenn 127.0.0.1 wird das Rendering abgelehnt

Wichtigste Tabellen: pp.ts_data_points (Datenpunkte der Zeitreihen-Engine, TTL pro Zeile), pp.tm_tag_point · tm_tag_point_archive · tm_tag_point_snapshot (Tags), pp.tm_asset_data (Anlagen), pp.tw_* (Datensätze der ins Cold Tier verschobenen Daten). TTL, Kompressierungsstrategie und Größe pro Tabelle werden in pd retention angezeigt.

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-PunktTemplateEmpfehlung
Heapjvm-server.options.template1/4 des Host-Speichers, max. 32 GB
compaction_throughputcassandra.yaml.template128 MB/s (NVMe) / 16 MB/s (HDD)
concurrent_compactorscassandra.yaml.templatemin(코어 수, 8)

Cassandra Reaper ist im Image tools/reaper/ enthalten, aber pd startet es nicht — es ist ein manuelles Werkzeug. Regelmäßige Repairs erfolgen über pd node repair.

PostgreSQL – Metadaten

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

Beim ersten Start werden Schema und Rollen ohne Passwort erstellt, und pd stimmt die Rollenkennwörter als Sidecar-Wert ab (bei jedem Start ALTER ROLE – idempotent). Daher können PostgreSQL-Konten, die nicht von Rotation-Tools verwaltet werden, wie PP_GRAVITINO_PASSWORD · PP_KESTRA_DB_PASSWORD, durch Änderung des Sidecars und Neustart geändert werden.

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 (große Installationen 500)
max_slot_wal_keep_sizeLegen Sie eine Obergrenze fest – verhindert, dass Replikations-Slots von gelöschten Workern WAL unbegrenzt halten (Image-Standard 8 GB)

Valkey – In-Memory-Cache

ElementWert
Port6379 (Klartext) · 6380 (TLS)
Kontoredis (PP_REDIS_USER) / PP_REDIS_PASSWORDrequirepass
Konfigurationvalkey.conf.template (WORKER nutzt cluster/ Variante – replicaof als Master)
Protokolle/data1/pp-data/valkey/logs/system.log – liegt unter dem Daten-Volume
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 – Objektspeicher

ElementWert
Port9000 (S3 API – überwacht durch pd) · 9001 (Konsole – für Menschen)
Kontominio (PP_MINIO_USER) / PP_MINIO_PASSWORD – injiziert via Startup env MINIO_ROOT_*
Standard-Bucketplantpulse (PP_MINIO_BUCKET). Iceberg-Daten · Sicherungen · Anhänge
Konsolehttp://<server-ip>:9001/ – Anmeldung mit den gleichen Kontowerten wie oben

MinIO läuft nur auf dem MASTER-Knoten. Der mc Client ist im Image vorhanden, und das Startup-Skript registriert den Alias pp-minio.

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 · 슬롯 · 스냅샷 · 크기
Das Neustarten von storage allein unterbricht alles oben Genannte

Starten Sie das gesamte Datalake über restart-datalake.sh auf dem Host neu, wenn möglich. Dies ermittelt auch abhängige Anwendungen → Starten · Beenden · Neustarten

Sicherung / Wiederherstellung

EngineWerkzeugMethode
PostgreSQLpgBackRest (physisch) · pg_dump (logisch)vollständig / differenziell · Point-in-Time-Wiederherstellung
CassandraMedusavollständige / differentielle Snapshots
MinIOmc mirrorexterne S3-Replikation

Verfahren finden Sie unter Sicherung · Wiederherstellung.

Häufig auftretende Probleme

SymptomUrsacheMaßnahme
Cassandra WriteTimeoutFestplatten-I/O-Sättigungpd node compactionstats, Durchsatz anpassen
Cassandra-Knoten downNetzwerk · Festplatte · OOMGC Pause in pd logs storage, Host dmesg
PostgreSQL Too many connectionsConnection Pool Leakmax_connections erhöhen + Anwendungs-Pool prüfen
WAL wächst weiterReplikations-Slot von gelöschtem Workerpd storage des slot.orphan → Host ops-check.sh --reclaim
Valkey Speicher vollmaxmemory-policy nicht gesetztallkeys-lru oder volatile-lru
MinIO Festplatte vollIceberg · Sicherungs-AnsammlungLifecycle-Richtlinie in Konsole 9001
Verzögerung nach NeustartCassandra WarmupNormal (3 – 5 Minuten)

Empfohlenes Datenträger-Layout

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

Durch Trennung von Cassandra commitlog und data auf separate Festplatte (oder separate LV) steigt der Schreibdurchsatz erheblich.

Verwandte Dokumentation