一文系列之EOS主网快速同步

文章于EOS主网块高度30673871编写

0. 全节点配置要求

最低16G内存,磁盘200GB,最好SSD,如果有查历史交易就是get_transaction或者get_actions需求,最好准备大一些,比如1T,但这也只是只能存储部分数据,主要看是什么存储方案MongoDB或者其他,以下会详细讲解。

1. 直接编译https://github.com/EOSIO/eos代码进行安装(推荐,后续说明原因),或者通过安装包
1.png
2. 到https://eosnode.tools/blocks网站下载打包好的区块数据,由于EOS出块速度太快,如果直接从0块开始P2P追的话会花很长时间,所以可以直接下载现有的块,replay然后在P2P追,这里要说明一点,到2000w块之后交易数量增大,replay的速度会变慢
2.png

敲黑板,启动之前,先配置一下config.ini,如果不知道config.ini在哪里可以直接在终端里nodeos,然后ctrl+c看一下日志就可以看到config.ini的位置了,当然也可以使用--config-dir 指定位置,然后修改(避免同步到中间出错)


chain-state-db-size-mb = 65536
reversible-blocks-db-size-mb = 2048

# 下载
wget $(wget --quiet "https://eosnode.tools/api/blocks?limit=1" -O- | jq -r '.data[0].s3') -O blocks_backup.tar.gz

# 解压
tar xvzf blocks_backup.tar.gz

# 创建 start.sh
vim start.sh

# 把命令写到start.sh中 --truncate-at-block 22643600 是指定哪个块结束重放
nohup nodeos --hard-replay-blockchain --wasm-runtime wabt  --truncate-at-block 22643600 --data-dir /eosdata --config-dir "xxx" > ./logs/eos.log 2>&1 &

# 创建logs目录
mkdir logs
mkdir eosdata

# 启动重放
bash start.sh 

# 查看日志
tail -f logs/eos.log

#日志大概是这样的,就是正在重放
2018-08-13T09:42:10.168 initializing chain plugin
2018-08-13T09:42:10.170 Hard replay requested: deleting state database
2018-08-13T09:42:10.171 Recovering Block Log...
2018-08-13T09:42:10.171 Moved existing blocks directory to backup location: '/mnt/blocks-2018-08-13T09:42:10.171'
2018-08-13T09:42:10.172 Reconstructing '/mnt/blocks/blocks.log' from backed up block log
2018-08-13T09:44:33.490 Existing block log was undamaged. Recovered all irreversible blocks up to block number 10887835.
2018-08-13T09:44:33.493 Reversible blocks database was not corrupted. Copying from backup to blocks directory.
2018-08-13T09:44:38.833 Log is nonempty
2018-08-13T09:44:38.833 Index is empty
2018-08-13T09:44:38.833 Reconstructing Block Log Index...
...
2018-08-13T09:47:12.722 No head block in fork db, perhaps we need to replay
2018-08-13T09:47:12.722 Initializing new blockchain with genesis state
2018-08-13T09:47:12.755 existing block log, attempting to replay 10887835 blocks
    140700 of 10887835
3. replay完成之后使用pkill nodes,然后接下来就是开启p2p同步节点数据了,那么这时候又要开始修改config.ini了,因为默认的配置里是没有p2p节点的,这里推荐大家使用以下这个配置,替换一下我们原有的config.ini
https://github.com/CryptoLions/EOS-MainNet/blob/master/config.ini

如果没有get_transaction和get_actions需求,基本就结束了

4. get_transaction和get_actions需求,由于history插件非常的消耗内存,所以基本上现在的超级节点都是关闭的,只有寥寥几家是在开启的状态,如果有打量的数据分析需求建议自己搭建history数据全节点,有以下几种方案:
https://github.com/EOSIO/eos/blob/master/plugins/COMMUNITY.md
3.png

我以官方的MongoDB的方案介绍一下整个过程,这就是为什么我推荐自己编译eos来安装全节点,这样在编译安装过程中会根据本机的配置和eos版本安装MongoDB,我首次使用的是安装包安装,然后要独立安装配置MongoDB,各种配置水土不服

1. 安装MongoDB(最好是3.6.3)版本,如果是编译安装eos代码的忽略,选择自己平台的配置,如果是centos7 选择Linux 64-bit legacy x64, version选3.6.9,然后下载的时候修改一下改成3.6.3,细节好请大家自行百度,原因是系统类型太多ubuntu可以直接apt安装,centos不能直接yum,比较费劲
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.3.tgz
4.png

主要要看mongodb的配置Ubuntu在/etc/mongod.conf,查看dbpath的位置,修改成我们自己想要存储的位置,还有注意bind_ip参数是不是127.0.0.1,启动MongoDB到27017端口就可以了

2. 修改config.ini文件(https://github.com/CryptoLions/EOS-mongo-history-API)
plugin = eosio::mongo_db_plugin
mongodb-uri = mongodb://127.0.0.1:27017/EOS
mongodb-filter-on = *
#mongodb-filter-out = spammer::
mongodb-filter-out = eosio:onblock:
mongodb-filter-out = gu2tembqgage::
mongodb-filter-out = blocktwitter::
mongodb-queue-size = 2048
abi-serializer-max-time-ms = 5000
mongodb-block-start = 1
mongodb-store-block-states = false
mongodb-store-blocks = false
mongodb-store-transactions = false
mongodb-store-transaction-traces = true
mongodb-store-action-traces = true

read-mode = read-only

然后创建索引,照着https://github.com/CryptoLions/EOS-mongo-history-API执行就可以了
3. 启动nodeos
nohup nodeos --data-dir /eosdata --config-dir /xxxx > ./logs/eos_run.log 2>&1 &

tail -f logs/eos_run.log

查看有没有异常,然后查看MongoDB的log
在mongod.conf中可以找到log的问题
tial -f xxx看一下 ,这里会有插入的数据的log打出来的
4. 以上数据同步到MongoDB上之后,可以写代码连接MongoDB,读取数据,也可以直接部署https://github.com/CryptoLions/EOS-mongo-history-API

你可能感兴趣的:(一文系列之EOS主网快速同步)