部署节点

TRON 节点的端到端部署指南:包括普通全节点、具备出块功能的超级代表(SR)全节点及轻节点。涵盖硬件要求、获取客户端、节点启动配置及日常运维。

📘

前置阅读

本文涵盖 TRON 网络各类节点的端到端部署:普通全节点(Full Node)、超级代表(SR)出块节点,以及基于数据库快照的轻节点(Lite Full Node)。这些节点本质上都运行同一份客户端 FullNode.jar,配置和启动参数不同,扮演的网络角色就不同。

有关各节点类型的详细对比与选型建议,请参阅节点概述


支持平台

操作系统架构JDK 版本
Linuxx86_64Oracle JDK 8
LinuxARM64Oracle JDK 17
macOSx86_64 / ARM64Oracle JDK 8(x86_64)或 17(ARM64)

硬件要求

最低配置

运行 java-tron 节点的最低硬件配置要求如下:

  • CPU:8 核
  • 内存:16 GB
  • SSD:3 TB 以上
  • 网络带宽:100 Mbps

该配置能基本满足区块的同步需求并处理轻量级的查询。若需要部署在正式的生产环境,建议选用下方的推荐配置。

推荐配置

角色CPU内存SSD 硬盘网络带宽
全节点16 核32 GB3 TB+100 Mbps
SR 出块全节点32 核64 GB3 TB+100 Mbps
轻节点16 核32 GB随运行时间逐渐累积100 Mbps

超级代表(SR)全节点除了处理普通网络请求,还要承担高频、敏感的共识计算和签名出块,因此 CPU 和内存规格要求更高。轻节点初始占用磁盘小,但启动同步后的数据增长速度与全节点一致,建议定期用裁剪工具清理磁盘(参见轻节点部署)。

您也可使用第三方托管服务,例如 Chainstack Self-Hosted


1. 获取 FullNode.jar

可以从源码编译,或直接下载已发布的稳定版本。

方式 A:从源码编译

git clone https://github.com/tronprotocol/java-tron.git
cd java-tron
git checkout -t origin/master
./gradlew clean build -x test

编译成功后,生成的 FullNode.jar 会位于 ./build/libs/FullNode.jar

方式 B:下载发布版本

直接从 java-tron releases 下载最新发布的 JAR 包。发布包都已签名,投入生产前务必验证校验和(Checksum)。

📘

Toolkit 伴随版本发布。 每个发布的 java-tron 版本都附带一套与 FullNode.jar 配套的 Toolkit 维护工具集Toolkit.jar),可执行多种数据库维护操作:从全节点生成轻节点快照、跨磁盘卷复制数据、在 LevelDB 和 RocksDB 之间转换、拆分数据库分区、优化 LevelDB 启动速度。无需单独下载,它已内置在发布归档中,与 FullNode.jar 同目录。关于各子工具的具体介绍,请参阅节点维护工具套件

2. 选择配置文件

针对不同的网络,请选择对应的默认配置文件:

网络类型配置文件获取途径
主网 (Mainnet)main_net_config.conf内置于 framework/src/main/resources/
Nile 测试网参见 Nile 网络运行说明社区维护托管
Shasta 测试网不适用该测试网不支持第三方节点接入
私有测试链自定义配置文件——参见 TRON 私链搭建自行按模板修改

下载或准备好配置文件后,将其重命名为 config.conf,并存放在与 FullNode.jar 相同的目录下。

3. 启动节点

在主网上运行普通的只读或同步全节点:

# JDK 8 环境 — 使用并发标记清除垃圾回收器 (CMS GC)
java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c config.conf

# JDK 17+ 环境 — 由于 CMS 已在 JDK 14 中被移除,请改用 G1 垃圾回收器 (G1GC)
java -Xmx24g -XX:+UseG1GC -jar FullNode.jar -c config.conf
  • -Xmx24g:设置 JVM 最大堆内存。请按主机实际内存配置:一般建议设为物理内存的 70%,且绝不能超过可用物理内存。例如 16 GB 内存的主机应改为 -Xmx12g,而非 -Xmx24g
  • -XX:+UseConcMarkSweepGC / -XX:+UseG1GC:指定垃圾回收算法,必须在 -jar 之前声明。由于 CMS 垃圾回收器在 JDK 14 后被移除,JDK 17+ 环境下必须使用 G1GC。
  • -c config.conf:指定配置文件的路径。

在主网从创世区块(高度 0)开始冷同步可能耗时数月。建议先下载主网数据库快照,解压到 FullNode.jar 同目录的 output-directory 文件夹中快速同步。

如需安全关闭正在运行的节点,请使用:

kill -15 <pid>
🚧

严禁使用强杀命令(kill -9):强行中止进程极易损坏 LevelDB 或 RocksDB 数据库,届时只能重新下载并解压快照。


出块全节点(超级代表)

如果已成功申请为超级代表(SR)账户,或准备竞选超级代表,就需要部署并运行出块节点。在 TRON 网络中,得票最高的前 27 名超级代表当选活跃超级代表,轮流打包出块并领取产块奖励。

启用全节点出块模块,只需在启动命令里加 --witness 参数,这是超级代表参与共识、领取奖励的前提。此外,出块节点运行时必须加载 SR 的签名私钥:可在配置文件里直接写明文私钥,或用 keystore 文件加密加载。

配置签名私钥

方式 A:在 config.conf 中直接配置私钥——最便捷,但私钥以明文存在磁盘上。

localwitness = [
    650950B1...295BD812   // 64 位 Hex 编码的私钥
]

方式 B:通过加密 keystore 文件加载——生产环境推荐,启动节点时需交互式输入密码。

localwitness = []
localwitnesskeystore = [
    "subdir/localwitnesskeystore.json"
]

这里的路径相对于执行启动命令的目录。可用 TRON 命令行工具 wallet-cliRegisterWallet 命令生成 keystore 文件。

📘

如果超级代表已把 witness_permission(出块权限)代理给独立账户,这里应使用被代理账户的私钥或 keystore,而非 SR 账户的 Owner 权限密钥。出块权限分离的细节,参阅超级代表 (SR) 最佳实践

使用 --witness 参数启动节点

java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -c config.conf
📘

在 JDK 17+ 环境下,请将 -XX:+UseConcMarkSweepGC 替换为 -XX:+UseG1GC

若配置了 keystore 文件,进程启动时会暂停、等待人工输入密码,因此不要直接用后台无交互命令(如 nohup)启动。建议用会话管理器(如 screentmux),或配置 Type=notifysystemd 服务,这样输入密码后即可断开终端、保持进程运行。


轻节点部署

轻节点和普通全节点运行同一份 FullNode.jar,但从轻节点数据库快照启动,该快照只含最新全局状态和最近 65,536 个区块。两者的性能对比参阅节点概述

获取轻节点快照

获取快照主要有以下两种方式:

  • 直接下载公开快照:从公开数据备份源下载社区打包好的轻节点快照,这是最快的方式。

  • 利用 Toolkit 工具自行裁剪现有的全节点数据库

    java -jar Toolkit.jar lite -o split -t snapshot -fn /path/to/fullnode/output-directory -ds /path/to/snapshot

    如果本地已有同步完整的全节点,可用此命令提取轻节点快照。参数细节参阅节点维护工具套件

解压获取到的快照数据,并将其放置在 FullNode.jar 目录下的 output-directory 文件夹中。

启动轻节点

轻节点的启动命令与全节点完全一致(在 JDK 17+ 环境下请将 CMS GC 替换为 G1GC):

java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c config.conf

启动命令不需要指定额外参数,FullNode.jar 会自动检测当前数据库结构为轻节点快照,并以轻节点模式运行。

默认的 API 查询限制

默认情况下,轻节点拒绝查询快照区块高度(即最近 65,536 个区块)之前的历史数据:所有按区块 / 交易哈希,或按历史去中心化交易所交易,访问 /wallet//walletsolidity//walletpbft/ 的查询请求,都会被网关过滤,并收到报错:this API is closed because this node is a lite fullnode。具体过滤的 API 列表见 LiteFnQueryHttpFilter.javaLiteFnQueryGrpcInterceptor.java

如果希望轻节点提供它启动同步之后累积的历史数据查询,可在 config.conf 中把下面的参数设为 true

node.openHistoryQueryWhenLiteFN = true

注意,快照生成之前的历史区块数据并未保存在本节点磁盘上,因此无论这个参数怎么设,轻节点都无法提供那段时间之前的历史数据。

定期进行重新裁剪

轻节点运行起来后,累积新区块的速度与普通全节点一致。为保持磁盘轻量,建议定期用 Toolkit.jar 命令行工具的 lite 命令对节点数据库做二次裁剪(通常每月一次)。


日常运维

安全关闭节点

为避免底层数据库写损坏,请用以下命令优雅关闭:

kill -15 <pid>
🚧

切勿使用强制杀进程命令(kill -9)。异常中止可能损坏正在写入的 LevelDB 或 RocksDB 数据,导致节点需要重新同步。

维持节点在线

节点无法保证 100% 在线,但保持在线能减少重启后追赶最新区块的时间。运维建议:

  1. 始终使用 kill -15 优雅关闭节点以保护数据完整性。
  2. 重启时,从本地最新区块高度继续追赶。若离线过久,节点在追上最新高度前,无法正常响应外部实时 API 请求。

客户端升级

请关注客户端升级公告,在重大升级或治理提议生效前完成更新。客户端版本过旧,可能在升级提议激活后无法同步新区块。

基本的节点升级步骤如下:

  1. 下载最新发布的 FullNode.jarToolkit.jar 包。
  2. 使用 kill -15 安全关闭当前运行中的节点。
  3. 替换对应的旧 JAR 包。
  4. 重启节点进程。

作为超级代表(SR),升级出块主节点前,务必先把出块权限切换到备用节点。切勿在正在出块的主节点上直接做就地热升级。详细的升级与倒换规范,参阅超级代表 (SR) 最佳实践


其他常用配置选项

使用 tcmalloc 优化内存分配

tcmalloc 能明显改善 JVM 原生内存分配的碎片化,并降低高并发查询下的系统延迟。装好后,在启动节点前加载环境变量即可启用。

Linux 发行版安装命令库文件路径
Ubuntu 18.04 / 20.04 / Debian stablesudo apt install libgoogle-perftools4/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4
Ubuntu 16.04 LTSsudo apt install libgoogle-perftools4/usr/lib/libtcmalloc.so.4
CentOS 7sudo yum install gperftools-libs/usr/lib64/libtcmalloc.so.4

在启动脚本中加入预加载配置:

#!/bin/bash
export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc.so.4"
export TCMALLOC_RELEASE_RATE=10

java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar -c config.conf

作为纯只读/查询节点运行(禁用 P2P 网络连接)

节点支持在关闭 P2P 发现和通信的情况下运行,只对本地提供离线数据查询。该模式很适合数据分析、只读归档服务或只读索引器后端。

目前禁用 P2P 的唯一方式是命令行传入 --p2p-disable true 参数(代码 CommonParameter.java 中已确认,没有对应的配置文件键):

java -jar FullNode.jar -c config.conf --p2p-disable true

同时,为彻底阻止节点对外发起 P2P 连接,建议在 config.conf 中这样配置:

node.discovery.enable = false
node.active = []
node.passive = []

这样启动的节点仍提供 HTTP 和 gRPC 查询接口,但不再主动连接对等节点、也不再同步最新区块。

默认端口列表

主网默认的 config.conf 包含以下通信端口。如果在单台主机上运行多个节点,请确保这些端口不冲突:

服务类型配置文件键名默认端口号
HTTP 服务(全节点接口)node.http.fullNodePort8090
HTTP 服务(Solidity 合约查询)node.http.solidityPort8091
HTTP 服务(PBFT 共识查询)node.http.PBFTPort8092
gRPC 服务(全节点接口)node.rpc.port50051
gRPC 服务(Solidity 合约查询)node.rpc.solidityPort50061
gRPC 服务(PBFT 共识查询)node.rpc.PBFTPort50071
P2P 网络监听node.listen.port18888
ZeroMQ 事件发布端口event.subscribe.native.bindport5555
备用节点通信端口node.backup.port10001

启用历史余额查询功能

如果要用 API wallet/getaccountbalance 查询任意账户在任意历史高度的 TRX 余额,需做以下配置:

  1. config.conf 配置文件中开启该功能:

    storage {
      balance.history.lookup = true
    }
  2. (可选)下载并使用包含历史余额数据的全节点快照,参见主网数据库快照。若不用带余额历史的快照,节点只能查询从开启该参数、完成同步以来各区块高度的余额,更早的历史数据无法追溯。

  3. 正常启动节点。等节点同步追上网络高度后,历史余额 API 就会返回正常数据。


相关资源