为什么使用快照

1. 快速同步节点

EOS 的日志文件已经达到了 160G,同步一个 EOS 全节点大约需要耗时 10-15 天的时间,时间成本非常高。作为一个普通 Dapp 开发者,我们并不需要之前的区块数据,所以完全不需要浪费大把时间去同步一个 EOS 全节点。通过快照同步的方式能够很好的满足我们的需求,使用最新快照启动的节点,能够在 3~4 分钟内完成节点同步达到主网高度,时间成本大大降低。

2. 节省服务器资源

快照启动的节点,区块日志 block.log 内只会保存节点启动之后的区块数据,占用的磁盘空间更小。对比全节点和快照方式启动的节点两种方式同步 EOS 主网的结果来看,可以得出的结论是使用快照启动的节点在 CPU 和 RAM 的使用上都要远远小于全节点。这就意味着在一定程度上使用快照同步的节点能够很大程度上的降低我们的服务器成本。

3. 不停机数据备份

传统的区块数据备份步骤:

  1. 停止同步中的节点
  2. 使用压缩工具将区块数据压缩
  3. 重新启动节点

快照备份步骤:

访问对应的接口: /v1/producer/create_snapshot,节点开始数据备份,备份结束后继续同步,无需停掉正在运行的节点。

通过上面的对比可以看出,使用快照方式启动的节点,在数据备份上将更加简单便捷。

快照实现的原理

1. 使用快照启动

相应的源码地址: github.com/EOSIO/eos/b…

auto infile = std::ifstream(my->snapshot_path->generic_string(), (std::ios::in | std::ios::binary));
auto reader = std::make_shared<istream_snapshot_reader>(infile);
reader->validate();
reader->read_section<genesis_state>([this]( auto &section ){section.read_row(my->chain_config->genesis);});
infile.close();
复制代码

从源码中可以看出当启动添加参数:snapshot时,会以快照中的数据启动。

2. 实现快照备份

进行快照备份时,服务器资源使用情况稳定。但正在备份中的节点服务将暂时不可用,待数据备份结束后将恢复。所以推荐备份节点和业务节点独立开。 相应的源码如下: github.com/EOSIO/eos/b…

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 blockchain.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<ostream_snapshot_writer>(snap_out);chain.write_snapshot(writer);writer->finalize();snap_out.flush();snap_out.close();return {head_id, snapshot_path};
}
复制代码

从源码中可以看出,当进行快照备份时,会将备份数据写到我们设置的路径下,快照的文件名为当前区块的hash。

下面我们将详细介绍在 FIBOS、EOS 上如何通过快照启动

启动 FIBOS 节点

注意: FIBOS 版本: v1.4.0+

创建快照

配置快照目录

快照生成位置 config.data_dir 为根目录,可以配置为:

config.data_dir = "./blockData/data"fibos.load("producer", {
"snapshots-dir": "snapshots"
});
复制代码

根据配置,快照生成的位置为: ./blockData/data/snapshots

载入插件

fibos.load("producer_api");
复制代码

注意: 开启该插件后,请确保你的节点放置在内网安全。

完整配置文件可参考:

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();
复制代码

相关 p2p 节点地址信息可以去 p2pcheck.fibospubg.top/v1/net/conn… 获取。

生成快照

启动节点后,通过调用接口:/v1/producer/create_snapshot 生成快照,命令如下:

curl http://127.0.0.1:8870/v1/producer/create_snapshot
复制代码

节点生成完快照后,返回结果如下:

{
"head_block_id":"00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe",
"snapshot_name":"./blockData/data/snapshots/snapshot-00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe.bin"
}
复制代码

通过快照启动

配置快照文件路径

fibos.load("chain", {
"snapshot": "./blockData/data/snapshots/snapshot-00003070049e51276829f6d1020fa638e5428fc9f8b0532fc60f680d72359dbe.bin"
});
复制代码

启动服务

fibos.start();
复制代码

启动 EOS 节点

注意: nodeos 版本: v1.4.0+

通过快照启动

下载快照文件:

最新的快照文件地址: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
复制代码

目录结构:

├── node-data │   ├── snapshots └── config.ini

注意:使用快照备份的方式启动时,需要保证 node-data 文件夹下无日志和状态数据文件。

配置文件:

vim config.ini

agent-name = EOSNODEOSchain-state-db-size-mb = 10240
reversible-blocks-db-size-mb = 1024http-server-address = 0.0.0.0:8870http-validate-host = false
verbose-http-errors = true
abi-serializer-max-time-ms = 2000access-control-allow-origin = *
allowed-connection = anymax-clients = 2
sync-fetch-span = 3000
connection-cleanup-period = 30
enable-stale-production = falseplugin = eosio::chain_api_plugin
plugin = eosio::chain_pluginp2p-peer-address = ip:prot
复制代码

相关 p2p 节点地址信息可以去 github.com/CryptoLions… 获取

快照方式启动脚本:

nodeos --config-dir ./ --data-dir ./node-data --snapshot ./node-data/snapshots/snapshot-023e5e8813f687c6c5ffcf6eae853eb24f78d90b475dac4fb94face8c8308e4f.bin
复制代码

节点启动后目录结构: ├── 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}'
复制代码

返回结果为高度38006282的区块数据,返回的结果大致如下:

{"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
复制代码

注意: 开启该插件后,请确保你的节点放置在内网安全。

设置备份目录

启动时完整参数:

nodeos --config-dir ./ --data-dir ./node-data --snapshots-dir ../snapshots-backups
复制代码

创建快照

curl http://curl http://127.0.0.1:8870/v1/producer/create_snapshot
复制代码

按照目前 EOS 的大小,这一步大约需要耗时10~15分钟。快照创建结束后,在 snapshots-backups 目录下,生成相应的快照文件。请求返回结果如下:

{"head_block_id":"000006a4529a21b72b58c70c262fd3a754930d68b30b0b166f72fc1dbbc376e8","snapshot_name":"./snapshots-backups/snapshot-000006a4529a21b72b58c70c262fd3a754930d68b30b0b166f72fc1dbbc376e8.bin"
}
复制代码

适用场景

  1. 搭建自己的 EOS、FIBOS API 节点
  2. 只关心当前最新的区块数据、交易,无需溯源

转载于:https://juejin.im/post/5c46d1f1e51d456e4138fb01

使用快照启动 FIBOS、EOS 节点相关推荐

  1. 如何在 fibos 上创建快照和使用快照启动节点

    本文介绍下如何通过快照启动 FIBOS 节点. 快照创建无需停止节点打包数据比备份数据更方便快捷.如果还不清楚如何启动一个 fibos 节点请参考 启动 fibo节点 fibos 版本 v1.4.1+ ...

  2. mongodb一致性协议_mongodb副本集用一致性快照方法添加从节点步骤

    环境描述 主节点 192.168.0.1:27002 两个从节点 192.168.0.2:27002 192.168.0.3:27002 目标:用一致性快照方式添加第三个从节点192.168.0.3 ...

  3. 启动hadoop的节点

    1.启动hadoop的节点 start-dfs.sh 本文转自 素颜猪 51CTO博客,原文链接:http://blog.51cto.com/suyanzhu/1959242

  4. EOS节点之争已开始 准备好欣赏了么?

    EOS节点之争已开始 准备好欣赏了么? 2018-03-14 00:23 来源:雷锋网 原标题:EOS节点之争已开始 准备好欣赏了么? 雷锋网AI金融评论按:本文作者大毛向前冲.文章略有改动. EOS ...

  5. eos节点服务器_eos区块链php开发包

    1. 开发包概述EosTool的目的是消除使用PHP开发EOS区块链应用的痛苦,例如:通过Nodeos和Keosd的RPC接口调用其功能 离线生成EOS格式的私钥和公钥 使用本地私钥生成符合EOS要求 ...

  6. eos节点服务器_EOS柚子生态投票的骗局,你以为自己在区块恋革命,其实是在参与CX罢了...

    文/币侠bx 最近有粉丝问关于EOS柚子生态投票,之前也听说过EOS的各种ZJP,什么EOS生态,EOS社区,EOS金融等等,这些ZJP都是打着EOS的旗号在招摇撞骗. 首先说一下EOS本身的机制,E ...

  7. 信仰不分国籍,合作成就未来——EOSWTZ助力全球EOS节点共建中文社群

    大家都知道,王团长在竞选EOS超级节点.从宣布竞选以来,我们与其他节点频繁合作,多次采访其他节点,在推特上也和其他节点频繁互动. 今天我们与EOS New York.EOS Nation一起正式宣布, ...

  8. launch文件启动多个节点

    当编写的程序中存在多个节点时,每次都使用"rosrun 功能包名 节点名"一个个开启节点是很麻烦的,因此开始学习如何采用xxx.launch文件启动多个节点,并记录下在编写的过程中 ...

  9. RabbitMQ 入门系列(4)— RabbitMQ 启动、停止节点和应用程序、用户管理、权限配置

    1. 服务器管理 我们使用 "节点" 来指代 RabbitMQ 实例,当我们谈到 RabbitMQ 节点时指的是 RabbitMQ 应用程序和其所在的 Erlang 节点. 1.1 ...

最新文章

  1. java正则截取xml节点_实例讲述Java使用正则表达式截取重复出现的XML字符串功能...
  2. Compellent试用手记之二:系统连接
  3. html中内联元素和块元素的区别、用法以及联系
  4. 谋定新型农业主体-农业大健康·万祥军:农业高质量发展规划
  5. 欧拉函数(简单介绍+例题)
  6. java rotate怎么用_jQuery旋转插件jqueryrotate用法详解
  7. 机器学习 —— 浅谈贝叶斯和MCMC
  8. 那些没有兴趣花必要的C++时间
  9. eigen冲突 sophus 安装_SLAM-Sophus模板库安装总结
  10. 关于datetime 比较大小失效的问题
  11. 人工学院2卡顿_浙大宁波理工学院就业率怎么样 | 就业情况 | 前景好的专业
  12. 检查计算机网络是否连通可运行什么命令,用ping命令如何检测目标主机是否能连通...
  13. 创建华丽 UI 的 7条规则 第一部分 (2019年更新)
  14. 六张图了解Python的赋值、浅复制、深复制
  15. 关于定时任务中批量更新方案思考
  16. apache netbeans ide为什么安装不了_Eclipse安装及常见的基于Eclipse的嵌入式集成开发环境...
  17. NCRE一到四级的刷题软件
  18. leetcode(19):Anagrams (字谜游戏)
  19. mysql中存储ip地址,将ip转换为整数存储
  20. 通俗易懂的Kafka零拷贝机制

热门文章

  1. Unity入门--Unity的下载安装及基本使用
  2. ajax请求时拒绝访问,ajax跨域请求js拒绝访问的解决方法
  3. 珍惜身边所有,因为来日不方长。
  4. android视频开发面试!金三银四我带你去BAT面试现场,附带学习经验
  5. php绘制时钟刻度,html5 画布时钟效果
  6. 微信小程序直播间实现下拉刷新(目前全网最优最美观的方法)
  7. Python正则表达式模式
  8. 综合设计一个OPPE主页--页面的售后服务
  9. 蓝桥杯-算法提高-Cowboys
  10. 移动端UI设计尺寸适配