跳到主要内容

pd — 数据湖 CLI

pd(PlantPulse DataLake)是数据湖容器内启动、停止、诊断八个服务,渲染配置和执行备份的单一入口命令。管理控制台显示的几乎所有内容都来自该命令的--json输出。

项目
模块plantpulse-datalake-cli
位置容器内/opt/kopens/plantpulse-platform/plantpulse-datalake-cli/bin/pd(在PATH中)
主机上 — 必须docker exec plantpulse-datalake pd …
docker exec plantpulse-datalake pd status # 하나만 칠 때
/opt/kopens/plantpulse-platform-docker/bin/shell.sh # 여러 개 칠 때 — 셸을 열고 pd … 만 친다
运维人员的第一入口不在这里

整个平台的启动/停止/重启在主机的/opt/kopens/plantpulse-platform-docker/bin/中执行 — up.sh · down.sh · restart.sh · restart-datalake.sh · status.shpd是更低一层的工具,用于操控容器的服务。容器本身也会在启动时执行pd start,在关闭时执行pd stop,所以运维人员很少需要手动执行pd start。大多数情况是查看状态和重启单个服务。

30秒速览

安全级别:读取 = 不改变任何状态 · 变更 = 改变状态 · 破坏性 = 删除数据或进程。

动作单行说明级别
pd status [서비스] [--wait]端口表。仅当所有行都为RUNNING时才退出0读取
pd doctor检查环境、密钥、模板、运行时树(PASS / FAIL / N/A)读取
pd env该节点的目录、镜像身份 — 仅声明,无测量读取
pd logs [--list] [--lines N] [서비스…]跟踪服务日志读取
pd storage卷、WAL、复制槽、存储大小、Kafka保留读取
pd retention表TTL、主题保留、冷存储、归档任务读取
pd flowKafka消费者组延迟读取
pd downtime计划外宕机期间 — 仅重启读取
pd config list · diff · diff --templates模板→路径表 · 运行时vs渲染 · 主机模板vs镜像默认值读取
pd node status · info · cql · psqlCassandra / PostgreSQL查询和shell读取
pd backup list · schedule · status物理备份集 · 定时器 · 当前运行中的读取
pd backup restore … --dry-run仅恢复计划读取
pd start [서비스] · stop · restart [--clean]按顺序启动 · 反向停止(停止证明) · 两者变更
pd config render实际写入配置生成物变更
pd secret rotate VAR=값凭证轮换 — 由主机的passwd.sh调用。不要手动执行变更
pd backup · pd backup run --engine E --type full|diff逻辑转储 · 物理备份一次变更
pd backup schedule set|reset备份定时器计划变更
pd node add · repair · compact · flush · drainCassandra维护变更
pd clean已停止模块的日志 · 临时文件删除破坏性(日志)
pd kill [--dry-run]PP_HOME下的所有进程发送SIGKILL破坏性
pd recover [파일]DROP pp数据库并用逻辑转储恢复破坏性
pd backup restore … --yes将数据目录恢复到物理备份破坏性
pd node cleanup · remove <host-id>删除快照 · 从环中移除节点破坏性

选项集对任何动作都有相同的含义。

选项含义
--json输出JSON文档而非人类可读表。这是控制台读取的格式。仅限特定动作接收,其他动作会以exit 2拒绝
--show-secretsconfig diff。不用***隐藏密码。不能与--json一起使用
PD_DEBUG=1DEBUG日志。像PD_DEBUG=1 pd start一样添加到前缀

服务和启动顺序

八个服务以定义的顺序启动。权威源是services/order.txt一个。pd start从上到下,pd stop为反向顺序。

顺序服务MASTERWORKER内部组件pd status行(端口)
1storagevalkey → postgres → cassandra → minio(仅MASTER)6379 · 5432 · 9042 · 9000
2analyticsspark-master → hive → gravitino → kyuubi(WORKER为spark-worker · kyuubi)7077 · 4440 · 9083 · 19001 · 10000
3messagingkafka · mqtt(HiveMQ)9092 · 1883
4timeseriesengine(TSE) · dashboard(Grafana)7800 · 3000
5cepTomcat7400
6workflowtemporal → kestra7233 · 8233 · 8380
7data-gatewayTomcat5500
8admin-api管理控制台后端4949
  • 每个服务启动后,等待健康检查返回UP才进行下一步(上限:storage 1800秒,analytics 600秒,其他300秒)。
  • storageanalytics守门人。如果未启动,则不尝试后续操作并exit 5。其余服务发出警告并继续(最后exit 6)。
  • timeseries从2026-09-05开始仅限MASTER。plantpulse-sql在2026-09-07弃用,已从列表中删除。

生命周期

pd status # 전체 표 — 마지막 줄 "0 STOPPED" 면 정상
pd status storage # 서비스 하나의 헬스체크
pd status storage --wait # UP 이 될 때까지 대기

pd start cep # 죽은 서비스 하나 다시 띄우기
pd stop cep # 서비스 하나 내리기 — «멈췄다» 를 증명한다 (30초 + SIGTERM 15초 + SIGKILL 10초)
pd restart cep # stop → (정지가 증명되면) 5초 → start
pd restart cep --clean # 사이에 pd clean
pd restart # 전부 — 몇 분 걸린다. storage 가 먼저 돌아온다

pd status有四种状态。

状态含义
RUNNING端口已打开
STOPPED端口已关闭。启动后数十秒是窗口期,1分钟后重新检查
UNKNOWN无法测量 — 测量端口的工具不可用。不代表已死亡
DISABLEDPD_OPTIONS关闭。不改变退出代码
如果pd stop是exit 7,请勿立即pd start

STILL RUNNING表示无法证明停止。在幸存的进程上启动会导致端口冲突·数据损坏。用pd kill --dry-run查看剩余的内容,用pd killpd status确认已清空,然后pd start不要使用FORCE=1 pd start

容器本身的Docker HEALTHCHECK不调用pd status(太慢且有时波动)。反之,它检查postgres·cassandra是否响应实际查询以及所有端口是否打开。因此,「docker ps是healthy但pd status是STOPPED」是启动窗口或偶发故障,「unhealthy但pd status全部RUNNING」表示端口已打开但无法响应查询的状态(pd logs storage)。

诊断

pd doctor # 여섯 절 검사. 마지막 줄 FAIL 0 이면 된다
pd env # 디렉터리 · 이미지 정체 (0.25초)
pd logs --list # 따라갈 파일 목록만
pd logs --lines 50 cep # cep 만, 마지막 50줄부터
pd storage # 볼륨 90% 이상이면 FAIL
pd retention # 왜 안 줄어드나 — TTL · 토픽 보존 · 콜드 티어
pd flow # 데이터가 안 들어온다 — 컨슈머 lag
pd downtime # 자꾸 죽는 것 같다 — 계획 밖 정지 기록

pd doctor的六个部分:[1] inputs(密钥·节点文件·镜像)·[2] tools·[3] config templates(全部渲染)·[4] runtime tree·[5] TLS material·[6] core portsN/A是「无法在此测量」,括号中注明原因。容器内的sidecar文件不存在是正常的 — 值通过环境变量来获取。

pd flowNA不是「落后」而是**「从未读取过」。如果MEMB列为0,说明消费者未运行;若大于0但主题为空则正常(无内容可读);若大于0且主题有数据则是真正的警告信号**。

配置

pd config list # 이 모드의 템플릿 → 경로 표
pd config diff # 런타임 파일 vs 지금 렌더하면 나올 것 (0 같음 / 1 다름 / 3 시크릿 없음 / 4 렌더 실패)
pd config diff --templates # 호스트 템플릿 vs 이미지 기본값 (same / differs / local / missing)
pd config render # 실제로 쓴다 — 그 뒤 pd restart <서비스> 까지가 한 세트

变更值的过程和「应该改哪里」见配置变更方法。不要直接编辑容器内生成的物体 — 下一次pd start时会消失。

Cassandra·PostgreSQL节点操作

pd node status # nodetool status — UN 이 정상, DN 이면 죽은 노드
pd node status --json # + PostgreSQL 복제 · Valkey 복제 · 워커 명부
pd node info # 노드 상세
pd node cql # cqlsh (cassandra 계정)
pd node psql # psql (postgres OS 사용자)
pd node errors # cassandra debug.log 의 최근 WARN/ERROR
pd node topic # kafka 토픽 "event" describe
pd node tpstats | compactionstats | proxyhistograms | table-stats [ks] | table-histograms <ks> <tbl> | sstable-size <ks> <tbl> | disk
变更动作级别单行说明
pd node add变更根据活动节点数提高键空间RF(最多3),然后修复。连接worker后在master上执行一次
pd node repair · repair-table <ks> <tbl>变更(重)协调节点间数据不一致
pd node flush · drain变更将内存写入刷到磁盘。drain之后拒绝写入,仅在停止前执行
pd node compact [ks] [tbl]变更(重)SSTable合并
pd node cleanup破坏性删除所有快照+此节点不再拥有的数据
pd node remove <host-id>破坏性从环中移除已死亡的节点。不要在活动节点上执行
pd node upgrade · init-cms · train-zstd · cache-clear变更安装步骤·版本升级·OS页缓存清除

备份·恢复

pd backup # PostgreSQL 논리 덤프 → /data1/pp-data/postgres/dump/
pd backup list | schedule | status
pd backup run --engine postgres --type diff
pd backup restore --engine postgres --set <세트> --dry-run # 계획 먼저
pd recover [덤프파일] # pp DB 하나를 논리 덤프로 되돌림 (파괴적)

过程见备份·恢复

退出代码

代码含义
0成功。status全部RUNNING,doctorFAIL计数为0,config diff无差异
1一般失败·「不同」·「有问题」
2用法错误 — 未知动作·服务·选项,--json拒绝,PP_HOME未指定
3必需密钥缺失 — 消息列出所有名称。在backup run·restore处为「另有备份正在运行」
4渲染失败 — 未替换的${PP_*},列出所有名称
5守门人服务(storage·analytics)未启动,启动中止
6启动完成但部分服务未准备好
7无法证明停止(STILL RUNNING)
8公告地址是环回(127.0.0.1) — 拒绝渲染

日志格式和日志

pd输出的每一行都遵循统一格式 — [시각] [DATALAKE-CLI] [레벨] [동사] 메시지。INFO写入stdout,其他写入stderr。

pd start·stop·restart·backup每行生成一条JSON事件到事件日志plantpulse-datalake-admin-api/logs/pd-events.jsonl,控制台将其显示为事件时间线。从控制台执行的命令由actor记录为operator:<name>

旧名称对应表

plantpulse-startup的脚本集合于2026-09-03合并到pd旧目录已不在镜像中

旧脚本现在
start-daemon.sh · start.shpd start
stop.shpd stop
restart.sh · restart-<module>.shpd restart [서비스]
restart-monitor.shpd restart admin-api
status.shpd status
kill.sh · clean.shpd kill · pd clean
configure.shpd config render
log-viewer.shpd logs
node-<동사>.sh · node-added.sh · node-error.shpd node <동사> · pd node add · pd node errors
secrets/rotate.shpd secret rotate(由主机的passwd.sh调用)
env.sh · env-reset.sh · env-validate.sh已移除 — 值由主机sidecar·节点文件和compose协调
prepare-ssl.shplantpulse-certs容器处理 → 安全配置
PP_OPTIONSPD_OPTIONS(2026-09-07)。旧名称不被读取
不要在容器内寻找应用重启脚本

服务器·批处理·仓库·OPC-UA·AASX分别在各自的容器中处理。数据湖容器内没有这些模块。从主机重启应用。

cd /opt/kopens/plantpulse-platform-docker/bin
./restart-server.sh # 또는 restart-batch.sh · restart-warehouse.sh · restart-one.sh <서비스>

相关文档