部署节点
TRON 节点的端到端部署指南:包括普通全节点、具备出块功能的超级代表(SR)全节点及轻节点。涵盖硬件要求、获取客户端、节点启动配置及日常运维。
本文涵盖 TRON 网络各类节点的端到端部署:普通全节点(Full Node)、超级代表(SR)出块节点,以及基于数据库快照的轻节点(Lite Full Node)。这些节点本质上都运行同一份客户端 FullNode.jar,配置和启动参数不同,扮演的网络角色就不同。
有关各节点类型的详细对比与选型建议,请参阅节点概述。
支持平台
| 操作系统 | 架构 | JDK 版本 |
|---|---|---|
| Linux | x86_64 | Oracle JDK 8 |
| Linux | ARM64 | Oracle JDK 17 |
| macOS | x86_64 / ARM64 | Oracle JDK 8(x86_64)或 17(ARM64) |
硬件要求
最低配置
运行 java-tron 节点的最低硬件配置要求如下:
- CPU:8 核
- 内存:16 GB
- SSD:3 TB 以上
- 网络带宽:100 Mbps
该配置能基本满足区块的同步需求并处理轻量级的查询。若需要部署在正式的生产环境,建议选用下方的推荐配置。
推荐配置
| 角色 | CPU | 内存 | SSD 硬盘 | 网络带宽 |
|---|---|---|---|---|
| 全节点 | 16 核 | 32 GB | 3 TB+ | 100 Mbps |
| SR 出块全节点 | 32 核 | 64 GB | 3 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>出块全节点(超级代表)
如果已成功申请为超级代表(SR)账户,或准备竞选超级代表,就需要部署并运行出块节点。在 TRON 网络中,得票最高的前 27 名超级代表当选活跃超级代表,轮流打包出块并领取产块奖励。
启用全节点出块模块,只需在启动命令里加 --witness 参数,这是超级代表参与共识、领取奖励的前提。此外,出块节点运行时必须加载 SR 的签名私钥:可在配置文件里直接写明文私钥,或用 keystore 文件加密加载。
配置签名私钥
方式 A:在 config.conf 中直接配置私钥——最便捷,但私钥以明文存在磁盘上。
localwitness = [
650950B1...295BD812 // 64 位 Hex 编码的私钥
]方式 B:通过加密 keystore 文件加载——生产环境推荐,启动节点时需交互式输入密码。
localwitness = []
localwitnesskeystore = [
"subdir/localwitnesskeystore.json"
]这里的路径相对于执行启动命令的目录。可用 TRON 命令行工具 wallet-cli 的 RegisterWallet 命令生成 keystore 文件。
如果超级代表已把witness_permission(出块权限)代理给独立账户,这里应使用被代理账户的私钥或 keystore,而非 SR 账户的 Owner 权限密钥。出块权限分离的细节,参阅超级代表 (SR) 最佳实践。
使用 --witness 参数启动节点
--witness 参数启动节点java -Xmx24g -XX:+UseConcMarkSweepGC -jar FullNode.jar --witness -c config.conf若配置了 keystore 文件,进程启动时会暂停、等待人工输入密码,因此不要直接用后台无交互命令(如 nohup)启动。建议用会话管理器(如 screen、tmux),或配置 Type=notify 的 systemd 服务,这样输入密码后即可断开终端、保持进程运行。
轻节点部署
轻节点和普通全节点运行同一份 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.java 和 LiteFnQueryGrpcInterceptor.java。
如果希望轻节点提供它启动同步之后累积的历史数据查询,可在 config.conf 中把下面的参数设为 true:
node.openHistoryQueryWhenLiteFN = true注意,快照生成之前的历史区块数据并未保存在本节点磁盘上,因此无论这个参数怎么设,轻节点都无法提供那段时间之前的历史数据。
定期进行重新裁剪
轻节点运行起来后,累积新区块的速度与普通全节点一致。为保持磁盘轻量,建议定期用 Toolkit.jar 命令行工具的 lite 命令对节点数据库做二次裁剪(通常每月一次)。
日常运维
安全关闭节点
为避免底层数据库写损坏,请用以下命令优雅关闭:
kill -15 <pid>维持节点在线
节点无法保证 100% 在线,但保持在线能减少重启后追赶最新区块的时间。运维建议:
- 始终使用
kill -15优雅关闭节点以保护数据完整性。 - 重启时,从本地最新区块高度继续追赶。若离线过久,节点在追上最新高度前,无法正常响应外部实时 API 请求。
客户端升级
请关注客户端升级公告,在重大升级或治理提议生效前完成更新。客户端版本过旧,可能在升级提议激活后无法同步新区块。
基本的节点升级步骤如下:
- 下载最新发布的
FullNode.jar与Toolkit.jar包。 - 使用
kill -15安全关闭当前运行中的节点。 - 替换对应的旧 JAR 包。
- 重启节点进程。
作为超级代表(SR),升级出块主节点前,务必先把出块权限切换到备用节点。切勿在正在出块的主节点上直接做就地热升级。详细的升级与倒换规范,参阅超级代表 (SR) 最佳实践。
其他常用配置选项
使用 tcmalloc 优化内存分配
tcmalloc 能明显改善 JVM 原生内存分配的碎片化,并降低高并发查询下的系统延迟。装好后,在启动节点前加载环境变量即可启用。
| Linux 发行版 | 安装命令 | 库文件路径 |
|---|---|---|
| Ubuntu 18.04 / 20.04 / Debian stable | sudo apt install libgoogle-perftools4 | /usr/lib/x86_64-linux-gnu/libtcmalloc.so.4 |
| Ubuntu 16.04 LTS | sudo apt install libgoogle-perftools4 | /usr/lib/libtcmalloc.so.4 |
| CentOS 7 | sudo 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.fullNodePort | 8090 |
| HTTP 服务(Solidity 合约查询) | node.http.solidityPort | 8091 |
| HTTP 服务(PBFT 共识查询) | node.http.PBFTPort | 8092 |
| gRPC 服务(全节点接口) | node.rpc.port | 50051 |
| gRPC 服务(Solidity 合约查询) | node.rpc.solidityPort | 50061 |
| gRPC 服务(PBFT 共识查询) | node.rpc.PBFTPort | 50071 |
| P2P 网络监听 | node.listen.port | 18888 |
| ZeroMQ 事件发布端口 | event.subscribe.native.bindport | 5555 |
| 备用节点通信端口 | node.backup.port | 10001 |
启用历史余额查询功能
如果要用 API wallet/getaccountbalance 查询任意账户在任意历史高度的 TRX 余额,需做以下配置:
-
在
config.conf配置文件中开启该功能:storage { balance.history.lookup = true } -
(可选)下载并使用包含历史余额数据的全节点快照,参见主网数据库快照。若不用带余额历史的快照,节点只能查询从开启该参数、完成同步以来各区块高度的余额,更早的历史数据无法追溯。
-
正常启动节点。等节点同步追上网络高度后,历史余额 API 就会返回正常数据。
相关资源
- 节点概述——TRON 节点类型及如何选型
- 数据库快照——使用主网备份快照跳过冷同步
- 节点维护工具套件——数据库的转换、裁剪与备份维护
- TRON 私链——如何搭建隔离的私有开发测试链
- 成为超级代表——超级代表注册与竞选流程说明
- 超级代表配置——超级代表节点的高级 witness 权限代理配置
- 账户与密钥——TRON 账户与密钥模型基础
Updated about 3 hours ago