菜单

进程管理

相关源文件

本文档解释了 Base Node 系统如何管理和协调其关键进程。它涵盖了用于运行 op-node 和执行客户端进程的 supervisord 配置、它们的监控方式以及可用的部署选项。有关正在管理的特定组件的信息,请参阅 op-node执行客户端

概述

Base Node 在单容器环境中运行时使用 supervisord 来管理其关键进程。这种进程管理方法确保了组件能够被正确启动、监控并在需要时优雅地终止。

来源: supervisord.conf README.md96-106

进程管理选项

Base Node 支持两种部署模式

  1. 多容器模式 (默认): 使用 Docker Compose 管理 op-node 和执行客户端的独立容器
  2. 单容器模式: 使用 supervisord 在单个容器中运行所有进程

多容器模式

在默认的多容器模式下,Docker Compose 管理独立容器的生命周期,每个容器负责一个特定的组件。

单容器模式

在单容器模式下,supervisord 在单个容器中管理多个进程。此模式对于 Kubernetes 部署或其他偏好“每个容器一个进程”模型的编排系统特别有用,但仍需要维护进程间的依赖关系。

来源: README.md96-106

Supervisord 配置

supervisord 配置定义了在 Base Node 单容器环境中进程如何启动、监控和管理。

主要配置组件

来源: supervisord.conf1-19

supervisord 配置包括

章节目的关键设置
[supervisord]全局配置nodaemon=true - 在前台运行
logfile=/dev/null - 抑制内部日志
[program:op-node]op-node 进程设置command=/app/op-node-entrypoint
stopwaitsecs=300 - 5 分钟的关闭宽限期
[program:op-execution]执行客户端设置command=/app/execution-entrypoint
stopwaitsecs=300 - 5 分钟的关闭宽限期

来源: supervisord.conf1-19

进程入口脚本

进程管理系统依赖于两个关键的入口脚本

  1. op-node-entrypoint: 配置和启动 op-node 进程
  2. execution-entrypoint: 配置和启动选定的执行客户端 (Geth, Reth, 或 Nethermind)

这些脚本准备环境、设置必要的配置参数,并以适当的参数执行各自的进程。

进程生命周期管理

Supervisord 管理每个进程的完整生命周期,包括:

启动序列

在单容器模式下,supervisord 同时启动这两个进程。进程之间建立必要的连接。

  1. 执行客户端初始化并设置 Engine API 端点。
  2. op-node 通过 Engine API 连接到执行客户端。
  3. op-node 开始与 L1 同步并派生 L2 数据。

关闭处理

Supervisord 为两个进程配置了 5 分钟的宽限期 (stopwaitsecs=300),以确保正确的关闭流程。

  1. 当启动关闭时,supervisord 向进程发送 SIGTERM。
  2. 进程有 5 分钟的时间来完成待处理操作并优雅地关闭。
  3. 如果在宽限期内进程未能终止,supervisord 将发送 SIGKILL。

来源: supervisord.conf6-19

日志记录和监控

由 supervisord 管理的这两个进程都配置为:

  • stdout 输出重定向到 /dev/fd/1 (容器的标准输出)
  • 将 stderr 重定向到 stdout (redirect_stderr=true)
  • 不限制日志文件大小 (stdout_logfile_maxbytes=0)

此配置确保所有日志都可以通过容器的标准日志记录机制进行访问,从而通过 Docker 日志或 Kubernetes Pod 日志可用。

来源: supervisord.conf6-19

使用单容器模式

要使用 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 和执行客户端进程的正确生命周期管理。