关键词:BSC、币安智能链、全节点、RPC 接口、geth、快速同步、高并发
想给自己的 DApp 提供最稳定、低延迟的 BSC RPC 服务?比起依赖第三方节点,自建全节点不仅数据可控,还能大幅降低调用成本。本文聚焦“非挖矿”主网全节点,带你从选机、装系统到成功出块同步,每一步都踩过坑后给出的最新经验。
1. 硬件怎么选?——千万别在云盘里存区块
硬盘
- 容量:3 TB 起步,最好 4 TB,2023 年起 BSC 历史数据已达 2 TB+。
- 类型:NVMe 裸盘,千万别用云盘。实测云盘 IOPS 顶多 3 万,NVMe 可轻松飙到 50 万。
- 额外检查:
dd或fio测试,连续写速度必须 ≥1000 MB/s,低于 500 MB/s 的别浪费电费。
CPU / 内存
- 6 核以上,内存 ≥16 GB,同步过程中 30 GB 也常见,swap 设置大点为保险。
- 建议直接整台 裸金属,同价位比云主机性能高一个量级,还免邻居抢 I/O。
带宽
越高越好,1 Gbps 不限流量是标配,300 Mbps 以下就等三天两头掉块吧。
👉 想要测试你的服务器是否能扛住 BSC 的 I/O 压力?先来看这份性能基线报告。
2. 系统与环境:CentOS 7/8、Ubuntu 20+ 均可
下面以 CentOS 7/8 示范;如用 Ubuntu,仅需把 yum 换成 apt 即可。
# 更新并装必要工具
yum update -y
yum install -y screen iftop iotop htop git wget安装 Golang
CentOS 自带源一般版本过旧,建议二进制安装:
cd /root
wget -O go.tar.gz https://go.dev/dl/go1.20.10.linux-amd64.tar.gz
tar -C /usr/local -xzf go.tar.gz
export PATH=$PATH:/usr/local/go/bin
go version看到 go version go1.20.10 即成功。3. 用 screen 隔离会话,不怕断网
screen -S bsc用法提示:
- 临时离开:先按 Ctrl+a,再按 d(不会的真的会掉 6 小时同步进度)。
- 重新进入:
screen -r bsc。
4. 编译安装官方 geth(BSC 版)
# 目录规划
mkdir -p /data/bsc/data
cd /root
wget -O bsc.tar.gz https://github.com/bnb-chain/bsc/archive/v1.2.15.tar.gz
tar xf bsc.tar.gz && cd bsc-*
make all验证:
/root/bsc-*/build/bin/geth version
# 输出应包含 "Version: 1.2.15"5. 配置文件:三步到位
- config.toml、genesis.json 两文件放
/data/bsc/(可随时换目录)。 - 若不会改端口,可用官方模板仅调大 cache 参数。
- 记得同步完后统一关闭
allow-insecure-unlock,防误操作。
6. 防火墙开 3 个端口即可
firewall-cmd --permanent --add-port=30311/tcp # 节点通讯
firewall-cmd --permanent --add-port=8575/tcp # HTTP-RPC
firewall-cmd --permanent --add-port=8576/tcp # WebSocket
firewall-cmd --reload7. 快照加速:把 20 天拉到 3 天
官方每日快照 BSC Snapshots:
cd /data/bsc/data
wget -c https://snapshots.bnbstatic.com/geth-20231027.tar.gz
tar xf geth.tar.gz --strip-components=1⚠️ 注意核对顶层目录正确;如多了一层 chaindata/chaindata,直接 mv 调整即可。
8. 启动!第一次必须先 init
# 只做一次
/root/bsc-*/build/bin/geth \
--datadir /data/bsc/data \
--config /data/bsc/config.toml \
init /data/bsc/genesis.json日常启动放在 start.sh,内容示例:
#!/bin/bash
ulimit -n 65535
/root/bsc-*/build/bin/geth \
--datadir /data/bsc/data \
--config /data/bsc/config.toml \
--syncmode=full \
--cache=12288 \
--rpc.allow-unprotected-txs \
--txlookuplimit=0 \
--ws --ws.api eth,net,web3 --ws.addr 0.0.0.0 --ws.port=8576 \
--http --http.api eth,net,web3,debug --http.addr 0.0.0.0 --http.port=8575执行:
chmod +x start.sh
./start.sh再按 Ctrl+a d 回到主会话即可。
9. 状态查看与测试
判断同步进度
curl -s -X POST http://localhost:8575 \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_syncing"}'返回 "result":false 说明已追平最高块。
查询当前块高
curl -s -X POST http://localhost:8575 \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber"}'将十六进制值 0x21d5700 转为十进制即可与 bscscan.com 比对。
10. 优雅关停
重新进入 screen:
screen -r bsc
Ctrl+c # 稍等 3-5 秒,看见 "Block synchronisation stopped" 即安全退出常见问题 FAQ
Q1:启动 30 分钟后就 OOM 被杀?
A:先检查 /var/log/messages,若提示 "too many open files",运行 echo "* - nofile 65535" >> /etc/security/limits.conf && reboot。
Q2:我用快照后卡住高度很久不涨?
A:十有八九是 I/O 瓶颈,或者带宽被 runaway peer 占光。限速:--maxpeers 50 --LightIngress 0 --LightEgress 0。
Q3:fast 同步完为什么磁盘使用量持续涨?
A:fast 会自动变 full node,之后需要保存世界状态,所以每天新增约 20–30 GB,很正常。
Q4:云厂商说 IOPS 无限,但还是卡?
A:所谓“无限”只是 突增额度,持续 2–3 小时后被打回原型。只有本地 NVMe 才能硬扛。
Q5:非 1 Gbps 的轻量云能不能跑?
A:能跑,但别指望实时性能。适合离线分析、日志归档,用作业务 RPC 会遇到超时报警。
11. 额外监控与报警
- Grafana + Node Exporter + Process Exporter,把磁盘 util 和 open FDs 拉到面板,黄色阈值设 80%。
脚本自检:
HEIGHT=$(curl -s http://localhost:8575 -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'|jq -r '.result') LATEST=$(curl -s https://api.bscscan.com/api?module=proxy\&action=eth_blockNumber|jq -r '.result') [ $((16#$HEIGHT)) -gt $((16#$LATEST-10)) ] || echo "$(date) 落后!"放到 cron 每 5 分钟跑一次,如果滞后超过 50 块即可短信/Webhook 通知。
12. 接口参考与生态链接
- 官方文档:BNB Chain Full Node
- RPC 示例:Ethereum JSON-RPC 文档中文版(BSC 与其 100% 兼容)
👉 想用脚本一键管理节点生命周期?这里整理了一份轻量级运维脚本合集,开箱即用。
结束语
把所有坑踩完后回头发现,建 BSC 节点最大的敌人并不是技术本身,而是对硬件的幻想。只要硬盘够快、带宽够大,剩余的就是等区块追平然后享受毫秒级延迟的 本地 RPC。祝你早日拥有一个随叫随到的 BSC 数据引擎!