热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

运用快照启动FIBOS、EOS节点

为何运用快照1.疾速同步节点EOS的日记文件已到达了160G,同步一个EOS全节点约莫须要耗时10-15天的时候,时候本钱异常高。作为一个一般Dapp开发者,我们并不须要之前的区块

为何运用快照

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. 运用快照启动

响应的源码地点: 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();

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

2. 完成快照备份

举行快照备份时,效劳器资本运用情况稳固。但正在备份中的节点效劳将临时不可用,待数据备份完毕后将恢复。所以引荐备份节点和营业节点自力开。
响应的源码以下: 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};
}

从源码中能够看出,当举行快照备份时,会将备份数据写到我们设置的途径下,快照的文件名为当前区块的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 节点地点信息能够去 http://p2pcheck.fibospubg.top… 猎取。

天生快照

启动节点后,经由过程挪用接口:/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+

经由过程快照启动

下载快照文件:

最新的快照文件地点: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

目次构造:

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

注重:运用快照备份的体式格局启动时,须要保证
node-data 文件夹下无日记和状况数据文件。

设置文件:

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

相干 p2p 节点地点信息能够去 https://github.com/CryptoLion… 猎取

快照体式格局启动剧本:

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. 只体贴当前最新的区块数据、生意业务,无需溯源

推荐阅读
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文详细解析了JavaScript中相称性推断的知识点,包括严厉相称和宽松相称的区别,以及范例转换的规则。针对不同类型的范例值,如差别范例值、统一类的原始范例值和统一类的复合范例值,都给出了具体的比较方法。对于宽松相称的情况,也解释了原始范例值和对象之间的比较规则。通过本文的学习,读者可以更好地理解JavaScript中相称性推断的概念和应用。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了2020年计算机二级MSOffice的选择习题及答案,详细解析了操作系统的五大功能模块,包括处理器管理、作业管理、存储器管理、设备管理和文件管理。同时,还解答了算法的有穷性的含义。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
author-avatar
十月
我的征途是星辰大海!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有