2ノード分離インストール (データレイク / アプリケーション)
概要
PlantPulse プラットフォームをデータレイクノードとアプリケーションノードの2台のサーバに分けてインストールする方法です。単一ボックス(FULL)インストールと異なり、ストレージ・メッシング・分析層とコンソール・バッチ層が異なるボックスで動作するため、大容量バッチ作業(アーカイブなど)がコンソール応答性に影響を与えず、ノード別のメモリ要求量も低くなります。
どのような場合に使用しますか? 単一サーバのメモリが128GB以下であるか、データ処理負荷とコンソールサービスを分離して安定性を高めたい場合に適しています。1台で十分な環境(推奨256GB)であれば、ワンラインインストールの基本(FULL)インストールを使用してください。
ティア(PP_TIER)概念
インストール時にPP_TIER環境変数でノードの役割を指定します。
| PP_TIER | 役割 | 起動サービス |
|---|---|---|
FULL (デフォルト) | 単一ボックスオールインワン | 全体 (未指定時は既存インストールと完全に同じ) |
DATALAKE | データレイクノード | Cassandra · PostgreSQL · Kafka · MQTT · Redis · MinIO · Spark · Hive · TSE · CEP · Data Gateway · Temporal · Kestra · Monitor等インフラ層 |
APP | アプリケーションノード | Server(コンソール 80/443) · Batch · Warehouse · OPC-UA · AASX · HA等アプリケーション層 |
PP_TIERはクラスタリング変数PP_MODE(MASTER/WORKER)と独立しています。- APPノードの全データレイクアクセス(ホスト変数)は
PP_MASTER_IP(データレイクノードIP)に自動接続されます。
ノード別設定ファイル (コピー対象 vs ノード別)
2ノードインストールで/etc/kopens/のファイルは役割が異なります。何をコピーして何をコピーしてはいけないのかが最も重要です。
| ファイル/ディレクトリ | 内容 | 性格 | ノード間コピー |
|---|---|---|---|
/etc/kopens/plantpulse-platform.env | サービスシークレットサイドカー (DB/メッシング パスワード等) | クラスタ共有 | ✅ コピー対象 |
/etc/kopens/ca/ | 共有クラスタCA (CA.crt/CA.key) — ノード間TLS信頼 | クラスタ共有 | ✅ コピー対象 |
/etc/kopens/platform.node.env | ノードトポロジ (PP_TIER, PP_MASTER_IP) — インストール時に自動記録 | ノード別アイデンティティ | ❌ コピー禁止 |
パス確認 — シークレットサイドカーの正本は
/etc/kopens/plantpulse-platform.env1つです(権限0600)。古いインストールで/opt/kopens/配下に同じ名前が残っていることがありますが読まれず、インストールスクリプトが正本に戻します → 環境変数リファレンス
platform.node.envはインストール時にstack-run.shが自動生成・記録され、このファイルのおかげで再起動・アップグレード後もノードが自分のティアを記憶します。- トポロジ(
PP_TIER)をシークレットサイドカーではなく別ファイルに置く理由: サイドカーはアプリノードにそのままコピーされるファイルなので、ここにティアが入っているとデータレイクノードのティアがアプリノードに漏れ込んでアプリノードがDATA_LAKEで誤ってインストールされるためです。
ノード別要求仕様
| ノード | 最小仕様 | 備考 |
|---|---|---|
| データレイク | 16 vCPU / 64GB RAM / 500GB+ ディスク | データ保存量に応じてディスク増設 |
| アプリケーション | 8 vCPU / 48GB RAM / 100GB ディスク | 実測常駐約35GB |
2つのノードは同じネットワーク内で相互に到達可能である必要があります(ポートリストは下記ファイアウォールセクション参照)。
インストール手順
ステップ1 — データレイクノードのインストール
データレイクとして使用するサーバで実行します。
sudo -i
export PP_TIER=DATALAKE
curl -fsSL https://product.kopens.io/plantpulse-platform/install.sh | bash
- ブートゲートはティアを自動認識します。データレイクノードはモニターヘルス(
:4950/api/health)がOK/WARNになるまで待機した後、スタック全体準備判定(bin/stack-verify-boot.sh)を通過して初めてインストール成功と見なされます。 - インストール完了後、ジョインバンドルが自動生成されます:
/etc/kopens/plantpulse-platform.env— サービスシークレット (クラスタ共有)/etc/kopens/ca/— 共有クラスタCA (ノード間TLS信頼)
データレイクノードはクラスタのCA発行権限です。アプリケーションノードはこのCAを受け取って再利用するため、ノード間TLS(CEPイベントチャネル)が自動的に信頼されます。
ステップ2 — ジョインバンドルのコピー
データレイクノードからアプリケーションノードへ2つの項目をコピーします。
# 데이터레이크 노드에서 실행 (<app-ip> = 애플리케이션 노드 IP)
scp /etc/kopens/plantpulse-platform.env root@<app-ip>:/etc/kopens/
scp -r /etc/kopens/ca root@<app-ip>:/etc/kopens/
注意:
/etc/kopens/platform.node.envファイルはコピーしてはいけません。 このファイルはノードのティアアイデンティティ(自分の役割)を格納するノード別ファイルです。コピー対象は上記2つの項目のみです(ノード別設定ファイル参照)。古いバージョンでインストールしたサーバの場合、
platform.env.generated内にexport PP_TIER=...行が残っていることがあります。最新インストールスクリプトは自動的に削除(マイグレーション)しますが、コピー前にその行を削除するのが安全です。
ステップ3 — アプリケーションノードのインストール
アプリケーションノードで実行します。PP_MASTER_IPにデータレイクノードIPを指定します。
sudo -i
export PP_TIER=APP
export PP_MASTER_IP=<datalake-node-ip>
curl -fsSL https://product.kopens.io/plantpulse-platform/install.sh | bash
stack-run.shがジョインバンドルの共有CA(/etc/kopens/ca/)を初回起動前にpp-securityボリュームに自動適用(seed)します。その後、証明書準備ステップが共有CAでこのノードの証明書に署名し、truststoreを構成するため、データレイクノードのTLSサービス(CEPイベントチャネル等)が自動的に信頼されます。- 全データレイクバックエンド(Cassandra/PostgreSQL/Kafka/Redis/MinIO/TSE/CEP等)アクセスが
PP_MASTER_IPに自動設定されます。 - アプリノードにはモニター(:4950)がないため、ブートゲートはコンソール(
:80/status) 200応答基準で実行されます。
ファイアウォール (データレイクノード)
データレイクノードはアプリケーションノードからのアクセスを許可する必要があります。最も簡単な方法はfirewalld trusted zoneにアプリケーションノードIPを追加することです。
# 데이터레이크 노드에서 실행
firewall-cmd --permanent --zone=trusted --add-source=<app-ip>
firewall-cmd --reload
主要なクロスノードポート: 9042(Cassandra) · 5432(PostgreSQL) · 9092/9093/9094(Kafka) · 1883/1884(MQTT) · 6379(Redis) · 9000(MinIO) · 7077(Spark) · 9083(Hive) · 10000(Kyuubi) · 19001(Gravitino) · 7800/7801(TSE) · 7400(CEP) · 5500(Data Gateway) · 7233(Temporal) · 4950(Monitor)
インストール確認
# 데이터레이크 노드 — 인프라 헬스 (OK 또는 WARN 이면 정상)
curl -kfsS https://127.0.0.1:4950/api/health | jq .status
# 애플리케이션 노드 — 콘솔 상태
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:80/status # 200 이면 정상
Webコンソールアクセス: https://<app-node-ip> — ログインまで成功して初めて最終確認です(初期アカウントはログイン参照)。
クロスノードTLS (共有CA)確認
両ノードでCA指紋を出力して同じか確認します。指紋が異なる場合、ノード間TLS信頼が壊れています。
CA材料はpp-securityボリューム内にあり、そのボリュームをマウントしたコンテナ内から読み込みます。ノードごとに問い合わせるコンテナが異なります — データレイクノードにはplantpulse-datalakeがあり、アプリノードにはありません。
# 데이터레이크 노드에서
docker exec plantpulse-datalake \
openssl x509 -in /var/security/plantpulse/CA.crt -noout -fingerprint -sha256
# 애플리케이션 노드에서 (앱 컨테이너면 무엇이든 같은 볼륨을 읽습니다)
docker exec plantpulse-server-web \
openssl x509 -in /var/security/plantpulse/CA.crt -noout -fingerprint -sha256
アプリケーションノードログにTLS信頼エラー(PKIX)が0件か確認します。
# 애플리케이션 노드에서 — 아무 것도 출력되지 않아야 정상
grep -Rl "PKIX" /opt/kopens/plantpulse-platform-docker/logs 2>/dev/null
データレイク接続確認
アプリケーションノードからデータレイク接続を確認するには:
アプリコンテナはデータレイクの設定レンダラを持たず、そちらのenv.shも読み込みません。アプリが見える値の定義元はcomposeのみなので、コンテナに実際に注入された環境変数をそのまま確認します。
# 애플리케이션 노드에서 — 백엔드 호스트가 데이터레이크 IP 로 잡혀 있는지
docker exec plantpulse-server-web env | grep -E '_HOST=|MASTER_IP='
値が127.0.0.1の場合、PP_MASTER_IPなしでインストールされています。
再起動・アップグレード時の動作
- ティアアイデンティティは各ノードの
/etc/kopens/platform.node.envに保存され、再起動・アップグレード後も維持されます。再インストールでない限り、PP_TIERを再度指定する必要はありません。 - コンテナイメージアップグレードはノード別に既存手順(
update.sh)と同じです。
ティア切り替え・再インストール時の注意
-
単一ボックス(FULL)に再インストールする場合は
/etc/kopens/platform.node.envを先に削除してください。このファイルが残っていると、環境設定がファイルを自動的に読み込んで以前のティア(DATALAKE/APP)で起動します。PP_TIER未指定(FULL)インストールはこのファイルを上書きしないためです。rm -f /etc/kopens/platform.node.env -
APPノードをFULL(単一ボックス)に切り替えるにはクリーン再インストールが必要です。APPノードはローカルインフラ(データベーススキーマ等)が初期化されたことがないため、コンテナ・ボリューム・設定をすべて削除した後、最初からFULLでインストールしてください (削除手順はDockerインストールの完全削除セクション参照)。
トラブルシューティング
| 症状 | 原因/対処 |
|---|---|
APPノードサービスが127.0.0.1で接続試行 | PP_MASTER_IP未指定インストール — node.envを確認して再インストール |
| 再インストールしたのに以前のティアで起動 | /etc/kopens/platform.node.env残存 — 削除後に再インストール (ティア切り替え・再インストール時の注意) |
| アプリノードがDATALAKEでインストールされた | 古いバージョンサイドカーにPP_TIER行が残った状態でコピー — サイドカーからその行を削除して再インストール |
| CEPイベントTLSエラー (PKIX) | ジョインバンドルのca/コピー漏れ(CA指紋不一致) — ステップ2を再実行後、APPノードを再インストール |
| APPノードからKafka発行失敗 (Expiring records) | データレイクファイアウォールがAPPノードを未許可、または古いバージョンインストールスクリプト — ファイアウォール確認後、最新スクリプトで再インストール |
| ログイン画面でエラー | APPノード起動初期にデータレイク接続遅延 — コンソールコンテナを再起動(docker compose -f compose/docker-compose.yml restart plantpulse-server-web) |