メインコンテンツまでスキップ

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 両方(RustFS は MASTER のみ)
起動順序内での位置valkey → postgres → cassandra → rustfs

構成​

ディレクトリ構造​

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 가 기동하지 않습니다

conf/ 以下のファイルはすべて生成物です。修正する場所はホストの /etc/kopens/conf/*.template です → 設定変更方法

各エンジン​

Aster TSDB — 時系列 · イベント​

項目値
ポート9042 (CQL) · 7000/7001 (ノード間) · 7099 (JMX)
キースペースpp (PP_KEYSPACE)
アカウントcassandra (PP_CASSANDRA_USER) / PP_CASSANDRA_PASSWORD — PasswordAuthenticator
設定cassandra.yaml.template · jvm-server.options.template (WORKER は cluster/ 版)
広告アドレスbroadcast_rpc_address — 127.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)

Aster TSDB Reaper はイメージ tools/reaper/ に含まれますが、pd が起動しない手動ツールです。定期 repair は 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 がサイドカー値としてロールのパスワードを合わせます(起動ごとに ALTER ROLE — 冪等)。そのため、PP_GRAVITINO_PASSWORD · PP_KESTRA_DB_PASSWORD のようなローテーションツールが扱わない PostgreSQL アカウントは、サイドカーを修正して再起動すれば対応できます。

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_PASSWORD — requirepass
設定valkey.conf.template (WORKER は cluster/ 版 — replicaof マスター)
ログ/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

RustFS — オブジェクトストレージ​

項目値
ポート9000 (S3 API — pd が監視) · 9001 (コンソール — 人が開く画面)
アカウントrustfs (PP_S3_USER) / PP_S3_PASSWORD — 起動 env RUSTFS_ACCESS_KEY·RUSTFS_SECRET_KEY で注入
デフォルトバケットplantpulse (PP_S3_BUCKET). Iceberg データ · バックアップ · 添付
コンソールhttp://<server-ip>:9001/ — ログインは上記アカウントと同じ値

RustFS は MASTER ノードでのみ起動します。クライアント rc(rustfs/cli) がイメージに含まれ、起動スクリプトが pp-s3 エイリアスを登録した後、バケットがなければ作成します。

統合運用​

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 (論理)full / diff · 時点復旧
Aster TSDBMedusafull / diff スナップショット
RustFSrc mirror外部 S3 レプリケーション

手順は バックアップ · 復元 にあります。

頻発する問題​

症状原因対処
Aster TSDB WriteTimeoutディスク I/O 飽和pd node compactionstats, throughput 調整
Aster TSDB ノード downネットワーク · ディスク · OOMpd logs storage の GC pause、ホスト dmesg
PostgreSQL Too many connections接続プールリークmax_connections 増加 + アプリケーションプール点検
WAL が増え続ける削除されたワーカーのレプリケーションスロットpd storage の slot.orphan → ホスト ops-check.sh --reclaim
Valkey メモリ不足maxmemory-policy 未設定allkeys-lru または volatile-lru
RustFS ディスク満杯Iceberg · バックアップ蓄積コンソール 9001 でライフサイクルポリシー
再起動後の応答遅延Aster TSDB warmup正常 (3 ~ 5分)

ディスクレイアウト推奨​

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

Aster TSDB commitlog と data を別ディスク(または別 LV)に分離すると、書き込みスループットが大幅に向上します。

関連ドキュメント​