1. 程式人生 > >配置EOS同步主網資料到mongoDB

配置EOS同步主網資料到mongoDB

EOS編譯安裝,請參考 編譯EOS主網EOS-Mainnet程式碼

一. 修改Config配置

先執行下nodeos,將會自動建立~/.local/share/eosio/nodeos/config目錄和config.ini檔案。
修改config.ini中如下內容

//新增 (2018-8-18 此時可用,如果有想分享的節點,請私聊我)
p2p-peer-address = fullnode.eoslaomao.com:443
p2p-peer-address = mars.fnp2p.eosbixin.com:443
//修改 可忽略
agent-name = "BcSkill"
//如果需要返回錯誤資訊,修改
verbose-http-errors = true
//新增外掛支援
plugin = eosio::chain_plugin
plugin = eosio::net_plugin
//修改mongodb外掛相關配置
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

參考:MongoDB Filtering and Optimizations
參考:issues/5797

二. 安裝配置並啟動MongoDB

1. 安裝MongoDB

先安裝MongoDB 參考(Ubuntu 安裝 Mongodb 3+

2. 配置MongoDB

進入到MongoDB bin 目錄,可以新增到環境變數,方便操作。

cd ~/opt/mongodb/bin

由於鏈上資料較大,比如1000W塊左右的資料,離線壓縮包大約14GB,同步到MongoDB大概需要200GB左右。所以需要將MongoDB資料單獨磁碟儲存。
修改MongoDB資料儲存位置,/mnt/data為我這邊掛載的儲存盤
新建目錄mkdir /mnt/data/mongo/db

3. 啟動MongoDB

mongod --dbpath /mnt/data/mongo/db

這時MongoDB服務會預設監聽27017埠

三. 下載主網離線資料包

參考 EOS 主網資料更新,離線資料包
因為使用離線包可以加快追上主網的進度,如果從零自己同步到主網進度,難以想象要多久...
假設已經將離線資料下載並解壓到了 /mnt/data/data目錄下。

四. 啟動nodeos開始同步資料

nodeos --data-dir /mnt/data/data --hard-replay-blockchain

如果需要清空mongo資料庫的話,新增--mongodb-wipe


相關程式碼如下eos\plugins\mongo_db_plugin\mongo_db_plugin.cpp

void mongo_db_plugin::plugin_initialize(const variables_map& options)
{
   try {
      if( options.count( "mongodb-uri" )) {
         ilog( "initializing mongo_db_plugin" );
         my->configured = true;

         if( options.at( "replay-blockchain" ).as<bool>() || options.at( "hard-replay-blockchain" ).as<bool>() || options.at( "delete-all-blocks" ).as<bool>() ) {
            if( options.at( "mongodb-wipe" ).as<bool>()) {
               ilog( "Wiping mongo database on startup" );
               my->wipe_database_on_startup = true;
            } else if( options.count( "mongodb-block-start" ) == 0 ) {
               EOS_ASSERT( false, chain::plugin_config_exception, "--mongodb-wipe required with --replay-blockchain, --hard-replay-blockchain, or --delete-all-blocks"
                                 " --mongodb-wipe will remove all EOS collections from mongodb." );
            }
         }

此時已開始,同步中

五. 伺服器建議配置

記憶體:32GB
儲存:1T+