当前位置: 首页区块链公链正文 Mina 开发者文档 ## 4.2归档文件的冗余 归档数据对于需要历史查询的应用程序至关重要。在协议方面,归档数据对于灾难恢复非常重要,因为需要它来重建某个状态。为此,只有一个归档节点设置可能是不够的。如果向归档进程发送区块的守护进程,或者归档进程本身由于某种原因失败,那么数据库中可能会丢失区块。为了使归档数据丢失的风险最小化,可以使用一些冗余技术。 单个[归档节点](https://learnblockchain.cn/article/3349)的设置中有一个将区块发送给归档进程的守护进程,该进程将区块写入数据库。 通过在多个守护进程中指定一个归档进程的地址,便可以将多个守护进程连接到归档进程中,从而减少对单个守护进程的依赖,并为归档进程提供区块。 例如,归档进程的服务器端口是3086,那么守护进程可以使用`archive-address`参数连接到它。 “` mina daemon ….. -archive-address <Ip-address>:3086 “` 同样,也可以让多个归档进程向同一个数据库中写入数据。在这种情况下,传递给归档进程的postgres uri在多个归档进程之间是相同的。 然而,多个归档进程同时写入一个数据库可能会导致数据不一致([参见解释](https://github.com/MinaProtocol/mina/issues/7567中参见解释))。为了避免这种情况,请使用以下请求将归档数据库的交易隔离级别设置为`Serializable`的: “` ALTER DATABASE <DATABASE NAME> SET DEFAULT_TRANSACTION_ISOLATION TO SERIALIZABLE ; “` 这应该在创建数据库之后进行操作,并在归档进程连接到数据库之前完成。 ### 备份区块数据 为了进一步确保可以使归档数据恢复,您可以使用以下特性去备份区块数据并在必要时恢复它们。 我们有这样的机制去代替使用JSON记录的高保真、机器可读化的区块展示。其中包括内部的一些不透明信息。我们在内部使用这些日志来快速重新执行区块,从而获得某些链状态以进行调试。这些信息足以重建网络的确切状态。 一些内部数据是这样的: “` {"data":["Signed_command",{"payload":{"common":{"fee":"100","fee_token":"1","fee_payer_pk":"B62qixbmBBmCmv1xH5SeF1hw6EqwSNVPi9B28epa3phqVMSyuZk9EoH","nonce":"340","valid_until":"4294967295","memo":"E4YM2vTHhWEg66xpj5 (省略) “` 尽管我们不希望主网之前有太多的变动,然而这种JSON将随着网络中区块和交易有效负载的格式变化而变化。这些数据区块可以上传到谷歌存储桶中,也可以写入mina.log文件,也可以单独备份。 #### 将区块数据上传到谷歌云存储 为了标记出一个将区块数据上传到谷歌云存储的守护进程,请传递-`-upload-blocks-to-gcloud`。为了成功上传文件,守护进程需要设置以下的环境变量: 1. `GCLOUD_KEYFILE`认证密钥文件。2.`NETWORK_NAME`:文件名中使用的网络名,便于区分不同网络(主网和测试网)中的区块。3. `GCLOUD_BLOCK_UPLOAD_BUCKET`:谷歌云存储桶上载文件。 守护进程为每个区块生成一个名为`<network-name>-<protocol-state-hash>.json`的文件,这些被称为预计算区块,并且将拥有一个区块的所有字段。 #### 从日志中保存区块数据 如果`-log-precomputed-blocks`参数被传递,那么守护进程也会记录区块数据。要查找的日志是`Saw block with state hash $state_hash`,该区块包含元数据中的`precomputed_block`并具有区块信息。这是上传到谷歌云存储的相同信息(预计算区块)。 #### 从另一个归档数据库生成区块数据 从完全同步的归档数据库中,您可以使用`mina-extract-blocks `工具为每个区块生成区块数据。 该工具接受一个`–archive-uri`、一个`–end-state-hash`和一个可选的–start-state-hash,并且写入从start-state-hash开始到end-state-hash结束的链中的所有区块(包括开始和结束)。 如果只提供了结束哈希,那么该工具将生成以最接近结束区块的无父区块开始的区块。如果在两者之间没有遗漏的区块,那这就是创世区块。该工具将为每个区块生成一个名为`<protocol-state-hash>.json`的文件。这些文件中的区块数据称为扩展区块。因为这些是从数据库生成的,它们只会在归档数据库中存储,并且不包含预先计算出的其它区块信息(例如,snark声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。 收藏 海报 链接