启动 · 停止 · 重启
开启和关闭数据湖有两个位置。容器本身在主机上操作,而容器内的某个服务则通过 pd 来处理。请先决定使用哪一个。
| 要执行的操作 | 在哪里 | 命令 |
|---|---|---|
| 开启 / 关闭整个平台 | 主机 | up.sh · down.sh · restart.sh |
| 更改配置 · 密码后,只需重建数据湖 | 主机 | restart-datalake.sh |
| 只重启一个应用(服务器 · 批处理 · 数据仓库) | 主机 | restart-server.sh · restart-batch.sh · restart-warehouse.sh · restart-one.sh <서비스> |
| 只重启数据湖内的某个服务(CEP · 工作流 …) | 容器内 | pd restart <서비스> |
| 查看状态 | 主机 / 容器内 | status.sh / pd status |
主机命令
cd /opt/kopens/plantpulse-platform-docker/bin
./up.sh # 기동 — 준비될 때까지 기다린다. 종료 코드 0 = 쓸 수 있다
./down.sh # 정지 — 컨테이너 · 볼륨은 남는다
./restart.sh # 전체 재시작 — graceful drain → 재기동 → 준비 대기. 인자를 받지 않는다
./restart-datalake.sh # 데이터레이크만 — drain → 재생성 → 준비 대기 → 의존 앱 판정
./status.sh # 컨테이너 · 헬스 · 볼륨 요약. 0 = 정상 / 2 = 비정상
| 命令 | 退出码 0 的含义 | 注意事项 |
|---|---|---|
up.sh | 「可用」 —— 并非命令成功。 会重复检查直到就绪判定通过(默认900秒,间隔15秒) | 若为 PP_WAIT=0 则不等待,此时的 0 并不表示就绪 |
restart.sh | 重启后就绪 | 包括六个应用 · 代理 · 证书容器在内的全部。 当修改了语言 · 时区等也会影响到应用的值时使用 |
restart-datalake.sh | 数据湖恢复正常,其依赖的应用也恢复正常 | 虽然只是一个容器,但属于堆栈事件 —— 所有应用都持有与此的连接,因此结束后会判定应用,仅对未能自行恢复的应用再执行一次 restart。 耗时与启动相当 |
status.sh | 正常结束 | 仅查看卷 · 配置,不将其纳入退出码 |
restart-datalake.sh 而非 docker restartSidecar · 节点文件中的值会在 compose 重新创建容器时作为环境变量注入。 docker restart plantpulse-datalake 只是使用相同的环境变量重新启动,因此新值不会生效。
启动顺序
容器之间
plantpulse-certs(TLS 材料) → plantpulse-datalake → 六个应用 · 代理。 应用仅在数据湖变为 healthy 之后才会启动。 数据湖的启动宽限期为900秒,首次启动时可能因创建 Aster TSDB 模式而耗时这么久。
数据湖内部
容器启动后,pd start 会自动执行。
- 如果核心端口(6379 · 5432 · 9042)已打开,则视为「已在运行」并拒绝。
- 检查必需的 15 个密钥(工作进程则 +1)是否全部存在。 如果缺失,则列出所有名称并退出,退出码为 3。
- 检查 TLS 材料(
/var/security/plantpulse)。 - 配置渲染 —— 将全部模板渲染为
PP_HOME下的实际文件。 每次,无一例外。 - 按照
storage → analytics → messaging → timeseries → cep → workflow → data-gateway → admin-api的顺序启动,并等待各个组件的健康检查 UP。
最后一行即结果。
datalake started: 8 service(s) ready. Logs: pd logs # exit 0
datalake started with 1 service(s) not ready (7 ready). Check: pd status # exit 6
停止顺序
主机的 down.sh · restart.sh 会先停止应用,然后 drain 数据湖 —— 容器内的 pd stop 会按逆序(admin-api → … → storage)停止服务,并逐一证明各服务「已停止」(等待30秒 → SIGTERM 15秒 → SIGKILL 10秒)。 容器的停止宽限期(stop_grace_period)为180秒。
storage 而留下其他服务上述所有服务都连接到 storage。 如果要停止,应使用 pd stop 按逆序停止全部,而如果要这么做,则更应使用主机的 down.sh 来停止整个容器。 如果为了「暂时静默」而执行 pd stop,容器的 HEALTHCHECK 会在几分钟内变为不健康,主机侧的监控会做出反应。
仅一个服务 —— pd
docker exec plantpulse-datalake pd status # 어느 것이 STOPPED 인가
docker exec plantpulse-datalake pd logs --lines 100 cep
docker exec plantpulse-datalake pd restart cep # stop → 정지 증명 → 5초 → start
| 服务 | 重新启动后 |
|---|---|
storage | 所有依赖它的组件都会失去连接。 如有可能,请使用主机的 restart-datalake.sh 来整体操作 |
analytics | 所有正在运行的 SQL · Spark 作业都会中止。 如果归档作业正在运行,请等待其结束后 |
messaging | 所有消息接收会暂停数秒。 消费者(服务器 · CEP · 批处理)会自动重新连接 |
timeseries · cep · workflow · data-gateway · admin-api | 仅该服务。 应用会自动重新连接 |
pd restart 会先证明已停止。 如果停止失败(退出码 7),则在此处停止 —— 此时请执行 pd kill --dry-run → pd kill → pd status → pd start。
逐行查看状态
./status.sh # 호스트: 0 정상 / 2 비정상
docker ps --format 'table {{.Names}}\t{{.Status}}' # 컨테이너와 (healthy)
docker exec plantpulse-datalake pd status # 서비스 포트 표
curl -kfsS https://<server-ip>:4950/api/health | jq .status # 콘솔 헬스 API
由于容器内的 PID 1 是 systemd,只有 Java 进程会被 cgroup OOM-kill,而 docker ps 会继续显示 Up (healthy),之后才变为不健康。 如果 pd status 全部显示 STOPPED 但容器还活着,请首先怀疑此问题。
dmesg -T | grep -i "memory cgroup" # 호스트
docker inspect plantpulse-datalake --format '{{.State.OOMKilled}}'
提高限制的方法请参见 修改配置 — 内存。
自动启动
容器设置为 restart: always,因此主机重启时 Docker 守护进程会自动启动容器。 无需额外的 systemd 单元。 但通过 down.sh 特意停止的堆栈在重启后仍保持停止状态 —— 请使用 up.sh 将其启动。