文章于EOS主網(wǎng)塊高度30673871編寫
0. 全節(jié)點配置要求
最低16G內(nèi)存,磁盤200GB,最好SSD,如果有查歷史交易就是get_transaction或者get_actions需求,最好準備大一些,比如1T,但這也只是只能存儲部分數(shù)據(jù),主要看是什么存儲方案MongoDB或者其他,以下會詳細講解。
1. 直接編譯https://github.com/EOSIO/eos代碼進行安裝(推薦,后續(xù)說明原因),或者通過安裝包

1.png
2. 到https://eosnode.tools/blocks網(wǎng)站下載打包好的區(qū)塊數(shù)據(jù),由于EOS出塊速度太快,如果直接從0塊開始P2P追的話會花很長時間,所以可以直接下載現(xiàn)有的塊,replay然后在P2P追,這里要說明一點,到2000w塊之后交易數(shù)量增大,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
# 創(chuàng)建 start.sh
vim start.sh
# 把命令寫到start.sh中 --truncate-at-block 22643600 是指定哪個塊結(jié)束重放
nohup nodeos --hard-replay-blockchain --wasm-runtime wabt --truncate-at-block 22643600 --data-dir /eosdata --config-dir "xxx" > ./logs/eos.log 2>&1 &
# 創(chuàng)建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同步節(jié)點數(shù)據(jù)了,那么這時候又要開始修改config.ini了,因為默認的配置里是沒有p2p節(jié)點的,這里推薦大家使用以下這個配置,替換一下我們原有的config.ini
https://github.com/CryptoLions/EOS-MainNet/blob/master/config.ini
如果沒有g(shù)et_transaction和get_actions需求,基本就結(jié)束了
4. get_transaction和get_actions需求,由于history插件非常的消耗內(nèi)存,所以基本上現(xiàn)在的超級節(jié)點都是關(guān)閉的,只有寥寥幾家是在開啟的狀態(tài),如果有打量的數(shù)據(jù)分析需求建議自己搭建history數(shù)據(jù)全節(jié)點,有以下幾種方案:
https://github.com/EOSIO/eos/blob/master/plugins/COMMUNITY.md

3.png
我以官方的MongoDB的方案介紹一下整個過程,這就是為什么我推薦自己編譯eos來安裝全節(jié)點,這樣在編譯安裝過程中會根據(jù)本機的配置和eos版本安裝MongoDB,我首次使用的是安裝包安裝,然后要獨立安裝配置MongoDB,各種配置水土不服
1. 安裝MongoDB(最好是3.6.3)版本,如果是編譯安裝eos代碼的忽略,選擇自己平臺的配置,如果是centos7 選擇Linux 64-bit legacy x64, version選3.6.9,然后下載的時候修改一下改成3.6.3,細節(jié)好請大家自行百度,原因是系統(tǒng)類型太多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參數(shù)是不是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
然后創(chuàng)建索引,照著https://github.com/CryptoLions/EOS-mongo-history-API執(zhí)行就可以了
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看一下 ,這里會有插入的數(shù)據(jù)的log打出來的