摘要:快照實現(xiàn)的原理使用快照啟動相應(yīng)的源碼地址,截取部分代碼從源碼中可以看出當(dāng)啟動添加參數(shù)時會以快照中的數(shù)據(jù)啟動。
為什么使用快照 1. 快速同步節(jié)點
EOS 的日志文件已經(jīng)達(dá)到了 160G,同步一個 EOS 全節(jié)點大約需要耗時 10-15 天的時間,時間成本非常高。作為一個普通 Dapp 開發(fā)者,我們并不需要之前的區(qū)塊數(shù)據(jù),所以完全不需要浪費大把時間去同步一個 EOS 全節(jié)點。通過快照同步的方式能夠很好的滿足我們的需求,使用最新快照啟動的節(jié)點,能夠在 3~4 分鐘內(nèi)完成節(jié)點同步達(dá)到主網(wǎng)高度,時間成本大大降低。
2. 節(jié)省服務(wù)器資源??快照啟動的節(jié)點,區(qū)塊日志 block.log 內(nèi)只會保存節(jié)點啟動之后的區(qū)塊數(shù)據(jù),占用的磁盤空間更小。對比全節(jié)點和快照方式啟動的節(jié)點兩種方式同步 EOS 主網(wǎng)的結(jié)果來看,可以得出的結(jié)論是使用快照啟動的節(jié)點在 CPU 和 RAM 的使用上都要遠(yuǎn)遠(yuǎn)小于全節(jié)點。這就意味著在一定程度上使用快照同步的節(jié)點能夠很大程度上的降低我們的服務(wù)器成本。
3. 不停機數(shù)據(jù)備份傳統(tǒng)的區(qū)塊數(shù)據(jù)備份步驟:
停止同步中的節(jié)點
使用壓縮工具將區(qū)塊數(shù)據(jù)壓縮
重新啟動節(jié)點
快照備份步驟:
訪問對應(yīng)的接口: /v1/producer/create_snapshot,節(jié)點開始數(shù)據(jù)備份,備份結(jié)束后繼續(xù)同步,無需停掉正在運行的節(jié)點。
通過上面的對比可以看出,使用快照方式啟動的節(jié)點,在數(shù)據(jù)備份上將更加簡單便捷。
快照實現(xiàn)的原理 1. 使用快照啟動相應(yīng)的源碼地址: https://github.com/EOSIO/eos/...,截取部分代碼:
auto infile = std::ifstream(my->snapshot_path->generic_string(), (std::ios::in | std::ios::binary)); auto reader = std::make_shared(infile); reader->validate(); reader->read_section ([this]( auto §ion ){ section.read_row(my->chain_config->genesis); }); infile.close();
從源碼中可以看出當(dāng)啟動添加參數(shù):snapshot時,會以快照中的數(shù)據(jù)啟動。
2. 實現(xiàn)快照備份進(jìn)行快照備份時,服務(wù)器資源使用情況穩(wěn)定。但正在備份中的節(jié)點服務(wù)將暫時不可用,待數(shù)據(jù)備份結(jié)束后將恢復(fù)。所以推薦備份節(jié)點和業(yè)務(wù)節(jié)點獨立開。
相應(yīng)的源碼如下: https://github.com/EOSIO/eos/...
producer_plugin::snapshot_information producer_plugin::create_snapshot() const { chain::controller& chain = my->chain_plug->chain(); auto reschedule = fc::make_scoped_exit([this](){ my->schedule_production_loop(); }); if (chain.pending_block_state()) { // abort the pending block chain.abort_block(); } else { reschedule.cancel(); } auto head_id = chain.head_block_id(); std::string snapshot_path = (my->_snapshots_dir / fc::format_string("snapshot-${id}.bin", fc::mutable_variant_object()("id", head_id))).generic_string(); EOS_ASSERT( !fc::is_regular_file(snapshot_path), snapshot_exists_exception, "snapshot named ${name} already exists", ("name", snapshot_path)); auto snap_out = std::ofstream(snapshot_path, (std::ios::out | std::ios::binary)); auto writer = std::make_shared(snap_out); chain.write_snapshot(writer); writer->finalize(); snap_out.flush(); snap_out.close(); return {head_id, snapshot_path}; }
從源碼中可以看出,當(dāng)進(jìn)行快照備份時,會將備份數(shù)據(jù)寫到我們設(shè)置的路徑下,快照的文件名為當(dāng)前區(qū)塊的hash。
下面我們將詳細(xì)介紹在 FIBOS、EOS 上如何通過快照啟動啟動 FIBOS 節(jié)點
注意: FIBOS 版本: v1.4.0+創(chuàng)建快照 配置快照目錄
快照生成位置 config.data_dir 為根目錄,可以配置為:
config.data_dir = "./blockData/data" fibos.load("producer", { "snapshots-dir": "snapshots" });
根據(jù)配置,快照生成的位置為:
./blockData/data/snapshots
fibos.load("producer_api");?
注意: 開啟該插件后,請確保你的節(jié)點放置在內(nèi)網(wǎng)安全。
完整配置文件可參考:
const fibos = require("fibos"); fibos.config_dir = "./blockData/data" fibos.data_dir = "./blockData/data"; fibos.load("http", { "http-server-address": "0.0.0.0:8870", "access-control-allow-origin": "*", "http-validate-host": false, "verbose-http-errors": true }); fibos.load("net", { "p2p-peer-address": [], "max-clients": 100, "p2p-listen-endpoint": "0.0.0.0:9876" }); fibos.load("producer", { "snapshots-dir": "snapshots" }); fibos.load("producer_api"); fibos.load("chain", { "contracts-console": true, "genesis-json": "genesis.json" }); fibos.load("chain_api"); fibos.start();
相關(guān) p2p 節(jié)點地址信息可以去 http://p2pcheck.fibospubg.top... 獲取。
生成快照啟動節(jié)點后,通過調(diào)用接口:/v1/producer/create_snapshot 生成快照,命令如下:
curl http://127.0.0.1:8870/v1/producer/create_snapshot
節(jié)點生成完快照后,返回結(jié)果如下:
{ "head_block_id":"00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe", "snapshot_name":"./blockData/data/snapshots/snapshot-00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe.bin" }通過快照啟動 配置快照文件路徑
fibos.load("chain", { "snapshot": "./blockData/data/snapshots/snapshot-00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe.bin" });啟動服務(wù)
fibos.start();啟動 EOS 節(jié)點
注意: nodeos 版本: v1.4.0+通過快照啟動 下載快照文件:
最新的快照文件地址:https://eosnode.tools/snapshots
wget $(wget --quiet "https://eosnode.tools/api/snapshots?limit=1" -O- | jq -r ".data[0].s3") -O snapshot.tar.gz
解壓快照文件
tar -xvzf snapshot.tar.gz目錄結(jié)構(gòu):
├── node-data
│?? ├── snapshots
└── config.ini
注意:使用快照備份的方式啟動時,需要保證 node-data 文件夾下無日志和狀態(tài)數(shù)據(jù)文件。配置文件:
vim config.ini
agent-name = EOSNODEOS chain-state-db-size-mb = 10240 reversible-blocks-db-size-mb = 1024 http-server-address = 0.0.0.0:8870 http-validate-host = false verbose-http-errors = true abi-serializer-max-time-ms = 2000 access-control-allow-origin = * allowed-connection = any max-clients = 2 sync-fetch-span = 3000 connection-cleanup-period = 30 enable-stale-production = false plugin = eosio::chain_api_plugin plugin = eosio::chain_plugin p2p-peer-address = ip:prot
相關(guān) p2p 節(jié)點地址信息可以去 https://github.com/CryptoLion... 獲取
快照方式啟動腳本:nodeos --config-dir ./ --data-dir ./node-data --snapshot ./node-data/snapshots/snapshot-023e5e8813f687c6c5ffcf6eae853eb24f78d90b475dac4fb94face8c8308e4f.bin
節(jié)點啟動后目錄結(jié)構(gòu):
├── node-data
│?? ├── snapshots
│ ├── blocks
│ ├── state
└── config.ini
curl http://127.0.0.1:8870/v1/chain/get_block -X POST -d "{"block_num_or_id":38006282}"
返回結(jié)果為高度38006282的區(qū)塊數(shù)據(jù),返回的結(jié)果大致如下:
{ "timestamp": "2019-01-18T02:43:16.500", "producer": "atticlabeosb", "confirmed": 0, "previous": "0243ee09128b14b56f90b3a0288b4b6f34526f53d71f8dc4e56bb89a42b4a93d", "transaction_mroot": "179c0382cf457b63356f733dc93bd3c582419f2b3a64e0d270e9d9238149bae4", "action_mroot": "e83174a2fae3c44777616993e7ba65393805a382bf423b744010873f76beaae8", "schedule_version": 667, "new_producers": null, "header_extensions": [ ], "producer_signature": "SIG_K1_KhkTgB5PHXGmYtiZMGgHVcQKxKFh8uUFVA8Mwic8bpjA6bCFSYnNkbGqYZW23A5zBXWKvb3PnMJGEiS3MHwvPGpZzf95wd", "transactions": [.....] }生成快照 添加插件
在 config.ini 中添加:
plugin = eosio::producer_api?_plugin
注意: 開啟該插件后,請確保你的節(jié)點放置在內(nèi)網(wǎng)安全。設(shè)置備份目錄
啟動時完整參數(shù):
nodeos --config-dir ./ --data-dir ./node-data --snapshots??-dir ../snapshots-backups創(chuàng)建快照
curl http://curl http://127.0.0.1:8870/v1/producer/create_sn?apshot
按照目前 EOS 的大小,這一步大約需要耗時10~15分鐘??煺談?chuàng)建結(jié)束后,在 snapshots-backups 目錄下,生成相應(yīng)的快照文件。請求返回結(jié)果如下:
{ "head_block_id":"000006a4529a21b72b58c70c262fd3a754930d68b30b0b166f72fc1dbbc376e8", "snapshot_name":"./snapshots-backups/snapshot-000006a4529a21b72b58c70c262fd3a754930d68b30b0b166f72fc1dbbc376e8.bin" }適用場景
搭建自己的 EOS、FIBOS API 節(jié)點
只關(guān)心當(dāng)前最新的區(qū)塊數(shù)據(jù)、交易,無需溯源
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/24540.html
摘要:快照實現(xiàn)的原理使用快照啟動相應(yīng)的源碼地址,截取部分代碼從源碼中可以看出當(dāng)啟動添加參數(shù)時會以快照中的數(shù)據(jù)啟動。 為什么使用快照 1. 快速同步節(jié)點 EOS 的日志文件已經(jīng)達(dá)到了 160G,同步一個 EOS 全節(jié)點大約需要耗時 10-15 天的時間,時間成本非常高。作為一個普通 Dapp 開發(fā)者,我們并不需要之前的區(qū)塊數(shù)據(jù),所以完全不需要浪費大把時間去同步一個 EOS 全節(jié)點。通過快照同步...
摘要:如果出錯,需要查看一下本地節(jié)點是否正在運行,在瀏覽器輸入后記完至此,本地的開發(fā)環(huán)境基本搭建完成,如果你想試試在本地環(huán)境編寫部署調(diào)用智能合約,可以參考官方開發(fā)文檔,當(dāng)然,后續(xù)有時間,我也會把在智能合約開發(fā)過程中踩到的坑寫寫。 FIBOS是什么? FIBOS 是一個結(jié)合 FIBJS 以及 EOS 的 JavaScript 的運行平臺,它使得 EOS 提供可編程性,并允許使用 JavaSc...
摘要:本文介紹下如何通過快照啟動節(jié)點??煺談?chuàng)建無需停止節(jié)點打包數(shù)據(jù)比備份數(shù)據(jù)更方便快捷。 本文介紹下如何通過快照啟動 FIBOS 節(jié)點。 快照創(chuàng)建無需停止節(jié)點打包數(shù)據(jù)比備份數(shù)據(jù)更方便快捷。如果還不清楚如何啟動一個 fibos 節(jié)點請參考 啟動 fibo節(jié)點 fibos 版本 v1.4.1+ 如何創(chuàng)建快照 1.配置快照目錄 快照生成位置 config.data_dir 為根目錄,可以配置 例1...
摘要:穩(wěn)定幣的上線年月日,發(fā)布了穩(wěn)定幣,并且成功通過了社區(qū)多簽。年月日,的穩(wěn)定幣正式上線。年月日,六大個稅抵扣社會保險費由稅務(wù)部門統(tǒng)一征收等一批新規(guī)正式實施。本次的攻擊為針對項目方的重放攻擊。 FIBOS 穩(wěn)定幣的上線 2018年12月21日,F(xiàn)IBOS 發(fā)布了穩(wěn)定幣—— FOD,并且成功通過了社區(qū)多簽。 2018年12月28日, FIBOS 的穩(wěn)定幣 FOD 正式上線。 早在2018年9月...
閱讀 3697·2021-09-07 10:19
閱讀 3639·2021-09-03 10:42
閱讀 3592·2021-09-03 10:28
閱讀 2560·2019-08-29 14:11
閱讀 819·2019-08-29 13:54
閱讀 1604·2019-08-29 12:14
閱讀 426·2019-08-26 12:12
閱讀 3624·2019-08-26 10:45