跳到主要内容

启动 · 停止 · 重启

开启和关闭数据湖有两个位置。容器本身在主机上操作,而容器内的某个服务则通过 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 restart

Sidecar · 节点文件中的值会在 compose 重新创建容器时作为环境变量注入。 docker restart plantpulse-datalake 只是使用相同的环境变量重新启动,因此新值不会生效。

启动顺序​

容器之间​

plantpulse-certs(TLS 材料) → plantpulse-datalake → 六个应用 · 代理。 应用仅在数据湖变为 healthy 之后才会启动。 数据湖的启动宽限期为900秒,首次启动时可能因创建 Aster TSDB 模式而耗时这么久。

数据湖内部​

容器启动后,pd start 会自动执行。

  1. 如果核心端口(6379 · 5432 · 9042)已打开,则视为「已在运行」并拒绝。
  2. 检查必需的 15 个密钥(工作进程则 +1)是否全部存在。 如果缺失,则列出所有名称并退出,退出码为 3。
  3. 检查 TLS 材料(/var/security/plantpulse)。
  4. 配置渲染 —— 将全部模板渲染为 PP_HOME 下的实际文件。 每次,无一例外。
  5. 按照 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
「显示 Up 但已死」—— 内存 OOM

由于容器内的 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 将其启动。

相关文档​