本文档解释了 Base Node 系统如何管理和协调其关键进程。它涵盖了用于运行 op-node 和执行客户端进程的 supervisord 配置、它们的监控方式以及可用的部署选项。有关正在管理的特定组件的信息,请参阅 op-node 和 执行客户端。
Base Node 在单容器环境中运行时使用 supervisord 来管理其关键进程。这种进程管理方法确保了组件能够被正确启动、监控并在需要时优雅地终止。
来源: supervisord.conf README.md96-106
Base Node 支持两种部署模式
在默认的多容器模式下,Docker Compose 管理独立容器的生命周期,每个容器负责一个特定的组件。
在单容器模式下,supervisord 在单个容器中管理多个进程。此模式对于 Kubernetes 部署或其他偏好“每个容器一个进程”模型的编排系统特别有用,但仍需要维护进程间的依赖关系。
来源: README.md96-106
supervisord 配置定义了在 Base Node 单容器环境中进程如何启动、监控和管理。
supervisord 配置包括
| 章节 | 目的 | 关键设置 |
|---|---|---|
[supervisord] | 全局配置 | nodaemon=true - 在前台运行logfile=/dev/null - 抑制内部日志 |
[program:op-node] | op-node 进程设置 | command=/app/op-node-entrypointstopwaitsecs=300 - 5 分钟的关闭宽限期 |
[program:op-execution] | 执行客户端设置 | command=/app/execution-entrypointstopwaitsecs=300 - 5 分钟的关闭宽限期 |
进程管理系统依赖于两个关键的入口脚本
这些脚本准备环境、设置必要的配置参数,并以适当的参数执行各自的进程。
Supervisord 管理每个进程的完整生命周期,包括:
在单容器模式下,supervisord 同时启动这两个进程。进程之间建立必要的连接。
Supervisord 为两个进程配置了 5 分钟的宽限期 (stopwaitsecs=300),以确保正确的关闭流程。
由 supervisord 管理的这两个进程都配置为:
stdout 输出重定向到 /dev/fd/1 (容器的标准输出)redirect_stderr=true)stdout_logfile_maxbytes=0)此配置确保所有日志都可以通过容器的标准日志记录机制进行访问,从而通过 Docker 日志或 Kubernetes Pod 日志可用。
要使用 supervisord 在单个容器中运行节点,请使用以下命令模式:
docker run --env-file .env.sepolia -e OP_NODE_L2_ENGINE_RPC=ws://:8551 -e OP_NODE_RPC_PORT=7545 ghcr.io/base/node:latest
重要的配置说明
OP_NODE_L2_ENGINE_RPC 以使用 localhost (因为两个进程在同一个容器中)OP_NODE_RPC_PORT 以避免端口冲突来源: README.md96-106
| 问题 | 可能的原因 | 解决方案 |
|---|---|---|
| 进程未启动 | 缺少必需的环境变量 | 检查容器日志以获取配置错误 |
| 进程意外终止 | 资源限制 | 确保主机具有足够的资源 |
| 关闭时间过长 | 对于区块链节点来说是正常的 | 允许完整的优雅关闭周期以进行正确的状态处理 |
| 端口冲突 | 多个进程尝试使用相同的端口 | 在使用单容器模式时覆盖端口配置 |
Base Node 中的进程管理系统提供了灵活的部署选项和强大的进程处理能力。无论是使用 Docker Compose 的默认多容器方法,还是使用 supervisord 的单容器模式,该系统都能确保关键的 op-node 和执行客户端进程的正确生命周期管理。