geth 同步区块一直落后的解决方案

核心思路 : 从原有的(或者从别人那里) 拷贝数据到自己的电脑上;

geth 版本: Geth/v1.8.18-stable/linux-amd64/go1.11.2

最近 新开了一台 服务器来同步 以太坊的 区块, 但是在 geth 的控制台调用 eth.syncing 发现 currentBlock 一直低于highestBlock,

苦于百度上, Google 上 和 github 上都没有确实际的解决方案…

网上有人说是磁盘的问题, 但是我的是 Google Cloud 的 SSD 云盘啊!

所以我想到了一个非常苦逼的办法: 从别人的机器上服务制区块链数据到我的服务器上,
嗯… 我之前已经有一台服务器在 日本, 区块已经同步好了, 所以我准备将数据从日本拷贝到Google Cloud 上来.

服务器 A: 已经同步好区块的服务器
服务器 B: 同步有问题的服务器
当前区块数据大小: 180G 左右
备注: 我下面写的命令中的路径你要注意修改一下

  1. 关闭 A服务器 上 的 geth
    我启动geth 的方式是 用 nohup 启动在后台的, 我 查找到 geth pid 之后 直接 kill 掉(不要加 -9 选项),
    然后查看 nohup 文件的内容, 等待 geth 完全退出. 下面是我执行的命令过程
ps -axu | grep geth # 查看geth 的 pid
kill ${pid} # 给 geth 发出 停止信号
#.... 等待关闭完成(大约 20 秒)
tail -n 10 nohup.out # 查看是否输出 已经关闭了数据库(这个文件是我的nohup 输出文件)
ps -axu | grep geth # 确保没有geth 正在运行
  1. 拷贝数据到新的服务器
    无非就是用 scp 将数据拷贝到另一台电脑嘛~
export target=username@0.0.0.0:~/ethdata/data/
nohup scp ~/eth/data ${target} & 
#... 睡一觉吧, 拷贝很久呢
  1. 在 B 服务器上 同步 A 服务器 的数据
    等了好久, 终于拷贝完成了, 不要忘了把 A 服务的geth 重新启动起来(我花费的传输时间, 区块落后了1000 块).
    接下来在服务器 B 上启动 geth,
    启动数据文件夹指向复制过来的文件夹, 同步节点 指向 服务器 A.
    不过记得修改 nodekey, 否则无法同步
./geth --data-dir =/tmp/eth/ # 生成 新的 nodekey
#将原有的nodkey 改名
mv ~/ethdata/data/geth/nodekey ~/ethdata/data/geth/nodekey2
# 复制新生成的nodekey 到数据目录
cp /tmp/eth/geth/nodekey ~/ethdata/data/geth/nodekey
rm -rf /tmp/eth/ # ...
# 启动
./geth --data-dir=/home/xxx/ethdata/data/ .... #

启动会花费一些时间…
然后进入geth 控制台, 将A 服务器的节点添加进去

./geth attach http://xxx.xxx.xxx.xxx # 连接到
admin.addPeer("xxxx"); # 添加服务器A geht 的节点

我的 A 服务器同步特别快, 我B 服务器还没启动起来就追上了最新块,
B 服务器上的geth 启动 执行 eth.blockNumber 的结果是和 服务器 A 传输之前是一致的,
接下来就等 服务器 B 同步 A 服务器的数据了.

嗯… 20 分钟就同步完了.
好了, 现在我两台服务器的 blockNumber 都和 etherscan.io 一致了!



关于如何查看服务器A 的节点.
进入服务器 A , 查看 日志文件(我的是nohup.out 文件)

head -n 20 nohup.out
  1. 找到 Started P2P networking 相关日志, 大致类似于下面这样
INFO [11-29|07:56:16.208] Started P2P networking  self="enode://xxxxx@0.0.0.0:30303?discport=0"

# enode://xxxxx@0.0.0.0:30303?discport=0 就是了
# admin.addPeer("enode://xxxxx@0.0.0.0:30303?discport=0");
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值